示例#1
0
def handle():
    db = basing.Baser(name='kli-serving', temp=False)
    klis = koming.Komer(db=db, schema=KLIRecord, subkey='klis.')
    klis.rem(('kli-serving', ))

    daemon = daemonocle.Daemon(pid_file='/tmp/klid.pid', )
    daemon.do_action('stop')
示例#2
0
def test_serialization():
    @dataclass
    class Record:
        first: str  # first name
        last: str  # last name
        street: str  # street address
        city: str  # city name
        state: str  # state code
        zip: int  # zip code

    jim = Record(first="Jim",
                 last="Black",
                 street="100 Main Street",
                 city="Riverton",
                 state="UT",
                 zip=84058)

    with dbing.openLMDB() as db:
        k = koming.Komer(db=db, schema=Record, subkey='records.')
        srl = k._serializer(Serials.mgpk)

        expected = b'\x86\xa5first\xa3Jim\xa4last\xa5Black\xa6street\xaf100 Main Street\xa4city\xa8Riverton\xa5state\xa2UT\xa3zip\xce\x00\x01HZ'
        assert srl(jim) == expected

        srl = k._serializer(Serials.cbor)
        expected = b'\xa6efirstcJimdlasteBlackfstreeto100 Main StreetdcityhRivertonestatebUTczip\x1a\x00\x01HZ'
        assert srl(jim) == expected

        srl = k._serializer(Serials.json)
        expected = b'{"first":"Jim","last":"Black","street":"100 Main Street","city":"Riverton","state":"UT","zip":84058}'
        assert srl(jim) == expected
示例#3
0
def test_custom_serialization():
    @dataclass
    class Record:
        first: str  # first name
        last: str  # last name
        street: str  # street address
        city: str  # city name
        state: str  # state code
        zip: int  # zip code

        @staticmethod
        def _der(d):
            name = d["name"].split()
            street = d["address1"]
            city, state, z = d["address2"].split()

            return Record(first=name[0],
                          last=name[1],
                          street=street,
                          city=city,
                          state=state,
                          zip=int(z, 10)
                          )

        def _ser(self):
            d = dict(
                name="{} {}".format(self.first, self.last),
                address1="{}".format(self.street),
                address2="{} {} {}".format(self.city, self.state, self.zip)
            )

            return d


    jim = Record(first="Jim",
                 last="Black",
                 street="100 Main Street",
                 city="Riverton",
                 state="UT",
                 zip=84058)

    with dbing.openLMDB() as db:
        mydb = koming.Komer(db=db, schema=Record, subkey='records.')

        keys = ("test_key", "0001")
        mydb.put(keys=keys, data=jim)

        actual = mydb.get(keys=keys)
        assert actual.first == "Jim"
        assert actual.last == "Black"
        assert actual.street == "100 Main Street"
        assert actual.city == "Riverton"
        assert actual.state == "UT"
        assert actual.zip == 84058

        ser = db.getVal(mydb.sdb, mydb._tokey(keys))
        assert ser == b'{"name":"Jim Black","address1":"100 Main Street","address2":"Riverton UT 84058"}'
示例#4
0
def test_get_invalid_dataclass():
    @dataclass
    class Record:
        first: str

        def __iter__(self):
            return iter(asdict(self))

    @dataclass
    class AnotherClass:
        age: int

    with dbing.openLMDB() as db:
        mydb = koming.Komer(db=db, schema=Record, subkey='records.')
        sue = Record(first="Susan")
        keys = ("test_key", "0001")
        mydb.put(keys=keys, data=sue)

        mydb = koming.Komer(db=db, schema=AnotherClass, subkey='records.')
        with pytest.raises(ValueError):
            mydb.get(keys)
示例#5
0
    def __init__(self, real=False, limit=None, doers=None, **kwa):
        self.hab = habbing.Habitat(name='kli', temp=False)
        kli = koming.Komer(db=self.hab.db, schema=KLIRecord,
                           subkey='kli.').get((self.hab.pre, ))

        super().__init__(real, limit, doers, **kwa)

        self.client = clienting.Client(tymth=self.tymen(),
                                       host='127.0.0.1',
                                       port=5678)
        clientDoer = clienting.ClientDoer(client=self.client)

        self.extend([clientDoer, self.infoDoer])
示例#6
0
def test_not_found_entity():
    @dataclass
    class Record:
        first: str

        def __iter__(self):
            return iter(asdict(self))

    with dbing.openLMDB() as db:
        mydb = koming.Komer(db=db, schema=Record, subkey='records.')
        sue = Record(first="Susan")
        keys = ("test_key", "0001")

        mydb.put(keys=keys, data=sue)
        actual = mydb.get(("not_found", "0001"))
        assert actual is None
示例#7
0
def test_kom_get_item_iter():
    """
    Test Komer object class
    """
    @dataclass
    class Stuff:
        a: str  # dummy
        b: str  # dummy too

        def __iter__(self):
            return iter(asdict(self))

    w = Stuff(a="Big", b="Blue")
    x = Stuff(a="Tall", b="Red")
    y = Stuff(a="Fat", b="Green")
    z = Stuff(a="Eat", b="White")

    with dbing.openLMDB() as db:
        assert isinstance(db, dbing.LMDBer)
        assert db.name == "test"
        assert db.opened

        mydb = koming.Komer(db=db, schema=Stuff, subkey='recs.')
        assert isinstance(mydb, koming.Komer)

        mydb.put(keys=("a", "1"), data=w)
        mydb.put(keys=("a", "2"), data=x)
        mydb.put(keys=("a", "3"), data=y)
        mydb.put(keys=("a", "4"), data=z)

        items = [(keys, asdict(data)) for keys, data in mydb.getItemIter()]
        assert items == [(('a', '1'), {
            'a': 'Big',
            'b': 'Blue'
        }), (('a', '2'), {
            'a': 'Tall',
            'b': 'Red'
        }), (('a', '3'), {
            'a': 'Fat',
            'b': 'Green'
        }), (('a', '4'), {
            'a': 'Eat',
            'b': 'White'
        })]

    assert not os.path.exists(db.path)
    assert not db.opened
示例#8
0
def test_deserialization():
    @dataclass
    class Record:
        first: str  # first name
        last: str  # last name
        street: str  # street address
        city: str  # city name
        state: str  # state code
        zip: int  # zip code

    msgp = b'\x86\xa5first\xa3Jim\xa4last\xa5Black\xa6street\xaf100 Main Street\xa4city\xa8Riverton\xa5state\xa2UT\xa3zip\xce\x00\x01HZ'
    cbor = b'\xa6efirstcJimdlasteBlackfstreeto100 Main StreetdcityhRivertonestatebUTczip\x1a\x00\x01HZ'
    json = b'{"first": "Jim", "last": "Black", "street": "100 Main Street", "city": "Riverton", "state": "UT", "zip": 84058}'

    with dbing.openLMDB() as db:
        k = koming.Komer(db=db, schema=Record, subkey='records.')

        desrl = k._deserializer(Serials.mgpk)
        actual = helping.datify(Record, desrl(msgp))
        assert actual.first == "Jim"
        assert actual.last == "Black"
        assert actual.street == "100 Main Street"
        assert actual.city == "Riverton"
        assert actual.state == "UT"
        assert actual.zip == 84058

        desrl = k._deserializer(Serials.json)
        actual = helping.datify(Record, desrl(json))
        assert actual.first == "Jim"
        assert actual.last == "Black"
        assert actual.street == "100 Main Street"
        assert actual.city == "Riverton"
        assert actual.state == "UT"
        assert actual.zip == 84058

        desrl = k._deserializer(Serials.cbor)
        actual = helping.datify(Record, desrl(cbor))
        assert actual.first == "Jim"
        assert actual.last == "Black"
        assert actual.street == "100 Main Street"
        assert actual.city == "Riverton"
        assert actual.state == "UT"
        assert actual.zip == 84058
示例#9
0
    def __init__(self, server, doers=None, always=False, **kwa):
        self.server = server
        self.cants = dict()

        self.hab = habbing.Habitat(name='klid', temp=False)

        klid = koming.Komer(db=self.hab.db, schema=KLIDRecord, subkey='klid.')
        klid.put(
            (self.hab.pre, ),
            KLIDRecord(started=datetime.now().strftime('%Y-%m-%d %H:%M:%S')))

        doers = doers if doers is not None else []
        # self.excDoDoer = exchanging.Exchanger(hab=self.hab)

        doers.extend([self.serviceDo])

        logging.info('super')

        super(Serving, self).__init__(doers=doers, **kwa)
示例#10
0
def handle(args):
    print(args)

    hab = habbing.Habitat(name='kli', temp=False)
    tock = 0.03125
    host = '127.0.0.1'
    port = args.port

    klis = koming.Komer(db=hab.db, schema=KLIRecord, subkey='kli.')
    klis.put((hab.pre, ), KLIRecord(
        host=host,
        port=port,
    ))

    # doist = doing.Doist(tock=tock, real=True)
    # print("client", host, port)
    # client = clienting.Client(host=host, port=port, tymth=doist.tymen())
    # clientDoer = clienting.ClientDoer(client=client)
    # initDoer = InitDoer(client=client, tymth=doist.tymen())
    #
    # doist.doers = [clientDoer, initDoer]
    # doist.do()

    doist = doing.Doist(tock=tock, real=True)

    server = serving.Server(host='127.0.0.1', port=5678)
    serverDoer = serving.ServerDoer(server=server)

    servingDoDoer = Serving(server=server, doers=doist.doers)

    doist.extend([serverDoer, servingDoDoer])

    daemon = daemonocle.Daemon(
        worker=doist.do,
        # update to use pidPath serving.getPIDPath()
        pid_file='/tmp/klid.pid',
        # detach=detach,
    )
    daemon.do_action('start')
示例#11
0
def test_kom_happy_path():
    """
    Test Komer object class
    """
    @dataclass
    class Record:
        first: str  # first name
        last: str  # last name
        street: str  # street address
        city: str  # city name
        state: str  # state code
        zip: int  # zip code

        def __iter__(self):
            return iter(asdict(self))

    jim = Record(first="Jim",
                 last="Black",
                 street="100 Main Street",
                 city="Riverton",
                 state="UT",
                 zip=84058)

    jimser = json.dumps(asdict(jim)).encode("utf-8")
    jim = helping.datify(Record, json.loads(bytes(jimser).decode("utf-8")))
    assert isinstance(jim, Record)

    with dbing.openLMDB() as db:
        assert isinstance(db, dbing.LMDBer)
        assert db.name == "test"
        assert db.opened

        mydb = koming.Komer(db=db, schema=Record, subkey='records.')
        assert isinstance(mydb, koming.Komer)

        sue = Record(first="Susan",
                     last="Black",
                     street="100 Main Street",
                     city="Riverton",
                     state="UT",
                     zip=84058)

        keys = ("test_key", "0001")
        mydb.put(keys=keys, data=sue)
        actual = mydb.get(keys=keys)

        assert actual.first == "Susan"
        assert actual.last == "Black"
        assert actual.street == "100 Main Street"
        assert actual.city == "Riverton"
        assert actual.state == "UT"
        assert actual.zip == 84058

        mydb.rem(keys)

        actual = mydb.get(keys=keys)
        assert actual is None

        keys = ("test_key", "0001")
        mydb.put(keys=keys, data=sue)
        actual = mydb.get(keys=keys)
        assert actual == sue

        kip = Record(first="Kip",
                     last="Thorne",
                     street="200 Center Street",
                     city="Bluffdale",
                     state="UT",
                     zip=84043)
        result = mydb.put(keys=keys, data=kip)
        assert not result
        actual = mydb.get(keys=keys)
        assert actual == sue

        result = mydb.pin(keys=keys, data=kip)
        assert result
        actual = mydb.get(keys=keys)
        assert actual == kip

        # test with keys as string not tuple
        keys = "keystr"

        bob = Record(first="Bob",
                     last="Brown",
                     street="100 Center Street",
                     city="Bluffdale",
                     state="UT",
                     zip=84043)

        mydb.put(keys=keys, data=bob)
        actual = mydb.get(keys=keys)

        assert actual.first == "Bob"
        assert actual.last == "Brown"
        assert actual.street == "100 Center Street"
        assert actual.city == "Bluffdale"
        assert actual.state == "UT"
        assert actual.zip == 84043

        mydb.rem(keys)

        actual = mydb.get(keys=keys)
        assert actual is None

    assert not os.path.exists(db.path)
    assert not db.opened