This commit is contained in:
Reid 'arrdem' McKenzie 2021-05-31 12:28:46 -06:00
commit 03b37675b5
32 changed files with 193 additions and 169 deletions
projects
calf
datalog-shell
datalog
flowmetal
setup.py
src/python/flowmetal
gandi/src/python/gandi
public-dns/src/python/arrdem/updater
ratchet
setup.py
src/python/ratchet
yamlschema
setup.py
src/python/yamlschema
test/python

View file

@ -2,7 +2,7 @@
from os import path
from setuptools import setup, find_namespace_packages
from setuptools import find_namespace_packages, setup
# Fetch the README contents

View file

@ -3,7 +3,7 @@ Some shared scaffolding for building terminal "REPL" drivers.
"""
import curses
from curses.textpad import Textbox, rectangle
from curses.textpad import rectangle, Textbox
def curse_repl(handle_buffer):

View file

@ -9,9 +9,9 @@ parsing, linting or other use.
import io
import re
from calf.token import CalfToken
from calf.io.reader import PeekPosReader
from calf.grammar import TOKENS
from calf.io.reader import PeekPosReader
from calf.token import CalfToken
from calf.util import *

View file

@ -5,8 +5,8 @@ The Calf parser.
from itertools import tee
import logging
from calf.lexer import CalfLexer, lex_buffer, lex_file
from calf.grammar import MATCHING, WHITESPACE_TYPES
from calf.lexer import CalfLexer, lex_buffer, lex_file
from calf.token import *

View file

@ -4,4 +4,5 @@ Fixtures for testing Calf.
import pytest
parametrize = pytest.mark.parametrize

View file

@ -7,7 +7,6 @@ trip through the lexer.
import calf.lexer as cl
from conftest import parametrize
import pytest

View file

@ -4,7 +4,6 @@ Tests of calf.parser
import calf.parser as cp
from conftest import parametrize
import pytest

View file

@ -1,9 +1,8 @@
"""
"""
from conftest import parametrize
from calf.reader import read_buffer
from conftest import parametrize
@parametrize(

View file

@ -58,13 +58,13 @@ from datalog.debris import Timing
from datalog.evaluator import select
from datalog.reader import pr_str, read_command, read_dataset
from datalog.types import (
CachedDataset,
Constant,
Dataset,
LVar,
PartlyIndexedDataset,
Rule,
TableIndexedDataset,
CachedDataset,
Constant,
Dataset,
LVar,
PartlyIndexedDataset,
Rule,
TableIndexedDataset
)
from prompt_toolkit import print_formatted_text, prompt, PromptSession

View file

@ -7,14 +7,7 @@ from itertools import chain
from datalog.parser import parse
from datalog.reader import pr_str, read
from datalog.types import (
CachedDataset,
Constant,
Dataset,
LVar,
Rule,
TableIndexedDataset,
)
from datalog.types import CachedDataset, Constant, Dataset, LVar, Rule, TableIndexedDataset
def match(tuple, expr, bindings=None):

View file

@ -2,13 +2,13 @@
from datalog.easy import read, select
from datalog.types import (
CachedDataset,
Constant,
Dataset,
LVar,
PartlyIndexedDataset,
Rule,
TableIndexedDataset,
CachedDataset,
Constant,
Dataset,
LVar,
PartlyIndexedDataset,
Rule,
TableIndexedDataset
)
import pytest

View file

@ -2,9 +2,10 @@
Reader tests.
"""
from datalog.reader import read
import pytest
from datalog.reader import read
EXS = [
"%foo\n",

View file

@ -1,5 +1,6 @@
from setuptools import setup
setup(
name="arrdem.flowmetal",
# Package metadata

View file

@ -2,9 +2,8 @@
The Flowmetal server entry point.
"""
from flowmetal import frontend, interpreter, scheduler, reaper
import click
from flowmetal import frontend, interpreter, reaper, scheduler
@click.group()

View file

@ -2,8 +2,8 @@
Quick and shitty Gandi REST API driver
"""
import json
from datetime import datetime
import json
import requests

View file

@ -2,21 +2,21 @@
A quick and dirty public DNS script, super tightly coupled to my infrastructure.
"""
import sys
import os
import argparse
import re
import os
from pprint import pprint
import re
import sys
for e in sys.path:
print(e)
from gandi.client import GandiAPI
import jinja2
import meraki
import pkg_resources
import yaml
import meraki
RECORD_LINE_PATTERN = re.compile(

View file

@ -1,5 +1,6 @@
from setuptools import setup
setup(
name="arrdem.ratchet",
# Package metadata

View file

@ -8,7 +8,7 @@ from abc import ABC, abstractmethod
class Message:
"""Messages can be sent. That's it.
Messages have headers, which may
Messages have headers, which may
Other things can filter the stream of inbound messages and do log processing, but that's the whole basis of the
thing.
@ -67,57 +67,51 @@ class Driver(ABC):
"""Shared interface for Ratchet backend drivers."""
@abstractmethod
def __init__(message_ttl=60000,
message_space="_",
message_author=""):
def __init__(message_ttl=60000, message_space="_", message_author=""):
"""Initialize the driver."""
@abstractmethod
def create_message(self,
message: str,
ttl: int = None,
space: str = None,
author: str = None) -> Message:
def create_message(
self, message: str, ttl: int = None, space: str = None, author: str = None
) -> Message:
"""Create a single message."""
@abstractmethod
def create_event(self,
timeout: int,
ttl: int = None,
space: str = None,
author: str = None):
def create_event(
self, timeout: int, ttl: int = None, space: str = None, author: str = None
):
"""Create a (pending) event."""
@abstractmethod
def set_event(self,
timeout: int,
ttl: int = None,
space: str = None,
author: str = None):
def set_event(
self, timeout: int, ttl: int = None, space: str = None, author: str = None
):
"""Attempt to mark an event as set."""
@abstractmethod
def create_request(self,
body: str,
timeout: int,
ttl: int = None,
space: str = None,
author: str = None):
def create_request(
self,
body: str,
timeout: int,
ttl: int = None,
space: str = None,
author: str = None,
):
"""Create a (pending) request."""
@abstractmethod
def deliver_request(self,
request_id,
response: str,
ttl: int = None,
space: str = None,
author: str = None):
def deliver_request(
self,
request_id,
response: str,
ttl: int = None,
space: str = None,
author: str = None,
):
"""Deliver a response to a (pending) request."""
@abstractmethod
def revoke_request(self,
request_id,
ttl: int = None,
space: str = None,
author: str = None):
def revoke_request(
self, request_id, ttl: int = None, space: str = None, author: str = None
):
"""Revoke a (pending) request."""

View file

@ -2,12 +2,12 @@
An implementation of the ratchet model against SQLite.
"""
import os
import sqlite3 as sql
from contextlib import closing
import os
import socket
import sqlite3 as sql
from ratchet import Message, Event, Request
from ratchet import Event, Message, Request
SCHEMA_SCRIPT = """

View file

@ -1,5 +1,6 @@
from setuptools import setup
setup(
name="arrdem.yamlschema",
# Package metadata

View file

@ -2,11 +2,11 @@
JSONSchema linting for YAML documents.
"""
import logging
import typing as t
from enum import Enum
from io import StringIO
import logging
import re
import typing as t
import yaml
from yaml.nodes import MappingNode, Node, ScalarNode, SequenceNode
@ -58,9 +58,13 @@ class YamlLinter(object):
schema = self._schema
for e in path:
if not e:
raise ValueError(f"Unable to dereference {ref}; contains empty segment!")
raise ValueError(
f"Unable to dereference {ref}; contains empty segment!"
)
if not (schema := schema.get(e)):
raise ValueError(f"Unable to dereference {ref}; references missing sub-document!")
raise ValueError(
f"Unable to dereference {ref}; references missing sub-document!"
)
return schema
@ -175,7 +179,10 @@ class YamlLinter(object):
else:
yield LintRecord(
LintLevel.MISSMATCH, node, schema, f"Expected an integer, got a {node.tag}"
LintLevel.MISSMATCH,
node,
schema,
f"Expected an integer, got a {node.tag}",
)
def lint_number(self, schema, node: Node) -> t.Iterable[LintRecord]:
@ -185,7 +192,10 @@ class YamlLinter(object):
else:
yield LintRecord(
LintLevel.MISSMATCH, node, schema, f"Expected an integer, got a {node.tag}"
LintLevel.MISSMATCH,
node,
schema,
f"Expected an integer, got a {node.tag}",
)
def _lint_num_range(self, schema, node: Node, value) -> t.Iterable[LintRecord]:

View file

@ -2,9 +2,8 @@
Tests covering the YAML linter.
"""
from yamlschema import lint_buffer
import pytest
from yamlschema import lint_buffer
@pytest.mark.parametrize(
@ -100,20 +99,31 @@ def test_lint_document_fails(msg, schema, obj):
assert list(lint_buffer(schema, obj)), msg
@pytest.mark.parametrize("msg, schema, obj", [
("Basic usage of $ref",
{"$ref": "#/definitions/Foo",
"definitions": {
"Foo": {"type": "string"},
}},
"---\nfoo"),
("Use of nested references",
{"$ref": "#/definitions/Foos",
"definitions": {
"Foos": {"type": "array", "items": {"$ref": "#/definitions/Foo"}},
"Foo": {"type": "string"},
}},
"---\n- foo\n- bar\n- baz"),
])
@pytest.mark.parametrize(
"msg, schema, obj",
[
(
"Basic usage of $ref",
{
"$ref": "#/definitions/Foo",
"definitions": {
"Foo": {"type": "string"},
},
},
"---\nfoo",
),
(
"Use of nested references",
{
"$ref": "#/definitions/Foos",
"definitions": {
"Foos": {"type": "array", "items": {"$ref": "#/definitions/Foo"}},
"Foo": {"type": "string"},
},
},
"---\n- foo\n- bar\n- baz",
),
],
)
def test_ref_references(msg, schema, obj):
assert not list(lint_buffer(schema, obj)), msg