Fix UUID in events

This commit is contained in:
Xavier Bustamante Talavera 2018-06-15 15:31:03 +02:00
parent e3a887d9fa
commit 5538e5ac69
7 changed files with 25 additions and 29 deletions

View File

@ -68,15 +68,12 @@ class Client(TealClient):
def get_many(self, def get_many(self,
res: Union[Type[Union[models.Thing, schemas.Thing]], str], res: Union[Type[Union[models.Thing, schemas.Thing]], str],
resources: Iterable[dict], resources: Iterable[Union[dict, int]],
key: str = None, key: str = None,
headers: dict = None,
token: str = None,
accept: str = JSON,
**kw) -> Iterable[Union[Dict[str, Any], str]]: **kw) -> Iterable[Union[Dict[str, Any], str]]:
"""Like :meth:`.get` but with many resources.""" """Like :meth:`.get` but with many resources."""
return ( return (
self.get(res=res, item=r['key'] if key else r, headers=headers, token=token, **kw)[0] self.get(res=res, item=r[key] if key else r, **kw)[0]
for r in resources for r in resources
) )

View File

@ -37,10 +37,10 @@ class Device(Thing):
""" """
return sorted(chain(self.events_multiple, self.events_one), key=attrgetter('created')) return sorted(chain(self.events_multiple, self.events_one), key=attrgetter('created'))
def __init__(self, *args, **kw) -> None: def __init__(self, **kw) -> None:
super().__init__(*args, **kw) super().__init__(**kw)
with suppress(TypeError): with suppress(TypeError):
self.hid = Naming.hid(self.manufacturer, self.serial_number, self.model) # type: str self.hid = Naming.hid(self.manufacturer, self.serial_number, self.model)
@property @property
def physical_properties(self) -> Dict[str, object or None]: def physical_properties(self) -> Dict[str, object or None]:
@ -114,7 +114,7 @@ class Component(Device):
cascade=CASCADE, cascade=CASCADE,
order_by=lambda: Component.id, order_by=lambda: Component.id,
collection_class=OrderedSet), collection_class=OrderedSet),
primaryjoin=parent_id == Computer.id) # type: Device primaryjoin=parent_id == Computer.id)
def similar_one(self, parent: Computer, blacklist: Set[int]) -> 'Component': def similar_one(self, parent: Computer, blacklist: Set[int]) -> 'Component':
""" """
@ -137,7 +137,7 @@ class Component(Device):
@property @property
def events(self) -> list: def events(self) -> list:
return sorted(chain(super().events, self.events_components), key=attrgetter('id')) return sorted(chain(super().events, self.events_components), key=attrgetter('created'))
class JoinedComponentTableMixin: class JoinedComponentTableMixin:

View File

@ -12,7 +12,7 @@ class EventDef(Resource):
SCHEMA = Event SCHEMA = Event
VIEW = EventView VIEW = EventView
AUTH = True AUTH = True
ID_CONVERTER = Converters.int ID_CONVERTER = Converters.uuid
class AddDef(EventDef): class AddDef(EventDef):

View File

@ -17,7 +17,7 @@ from teal.resource import Schema
class Event(Thing): class Event(Thing):
id = Integer(dump_only=True) id = UUID(dump_only=True)
name = String(default='', validate=Length(STR_BIG_SIZE), description=m.Event.name.comment) name = String(default='', validate=Length(STR_BIG_SIZE), description=m.Event.name.comment)
date = DateTime('iso', description=m.Event.date.comment) date = DateTime('iso', description=m.Event.date.comment)
error = Boolean(default=False, description=m.Event.error.comment) error = Boolean(default=False, description=m.Event.error.comment)

View File

@ -1,4 +1,5 @@
from distutils.version import StrictVersion from distutils.version import StrictVersion
from uuid import UUID
from flask import request from flask import request
from sqlalchemy.util import OrderedSet from sqlalchemy.util import OrderedSet
@ -11,7 +12,7 @@ from teal.resource import View
class EventView(View): class EventView(View):
def one(self, id: int): def one(self, id: UUID):
"""Gets one event.""" """Gets one event."""
event = Event.query.filter_by(id=id).one() event = Event.query.filter_by(id=id).one()
return self.schema.jsonify(event) return self.schema.jsonify(event)

View File

@ -13,7 +13,7 @@ from teal.resource import Converters, Resource
class UserDef(Resource): class UserDef(Resource):
SCHEMA = UserS SCHEMA = UserS
VIEW = UserView VIEW = UserView
ID_CONVERTER = Converters.uid ID_CONVERTER = Converters.uuid
AUTH = True AUTH = True
def __init__(self, app: 'devicehub.Devicehub', import_name=__package__, static_folder=None, def __init__(self, app: 'devicehub.Devicehub', import_name=__package__, static_folder=None,
@ -40,7 +40,7 @@ class UserDef(Resource):
class OrganizationDef(Resource): class OrganizationDef(Resource):
__type__ = 'Organization' __type__ = 'Organization'
ID_CONVERTER = Converters.uid ID_CONVERTER = Converters.uuid
AUTH = True AUTH = True
def __init__(self, app, import_name=__package__, static_folder=None, static_url_path=None, def __init__(self, app, import_name=__package__, static_folder=None, static_url_path=None,

View File

@ -149,10 +149,8 @@ def test_snapshot_component_add_remove(user: UserClient):
def get_events_info(events: List[dict]) -> tuple: def get_events_info(events: List[dict]) -> tuple:
return tuple( return tuple(
( (
e['id'],
e['type'], e['type'],
[c['serialNumber'] for c in e['components']], [c['serialNumber'] for c in e['components']]
e.get('snapshot', {}).get('id', None)
) )
for e in user.get_many(res=Event, resources=events, key='id') for e in user.get_many(res=Event, resources=events, key='id')
) )
@ -209,11 +207,11 @@ def test_snapshot_component_add_remove(user: UserClient):
# PC1 # PC1
assert {c['serialNumber'] for c in pc1['components']} == {'p1c2s', 'p1c3s'} assert {c['serialNumber'] for c in pc1['components']} == {'p1c2s', 'p1c3s'}
assert all(c['parent'] == pc1_id for c in pc1['components']) assert all(c['parent'] == pc1_id for c in pc1['components'])
assert get_events_info(pc1['events']) == ( assert tuple(get_events_info(pc1['events'])) == (
# id, type, components, snapshot # id, type, components, snapshot
(1, 'Snapshot', ['p1c1s', 'p1c2s', 'p1c3s'], None), # first Snapshot1 ('Snapshot', ['p1c1s', 'p1c2s', 'p1c3s']), # first Snapshot1
(3, 'Remove', ['p1c2s'], 2), # Remove Processor in Snapshot2 ('Remove', ['p1c2s']), # Remove Processor in Snapshot2
(4, 'Snapshot', ['p1c2s', 'p1c3s'], None) # This Snapshot3 ('Snapshot', ['p1c2s', 'p1c3s']) # This Snapshot3
) )
# PC2 # PC2
assert tuple(c['serialNumber'] for c in pc2['components']) == ('p2c1s',) assert tuple(c['serialNumber'] for c in pc2['components']) == ('p2c1s',)
@ -224,12 +222,12 @@ def test_snapshot_component_add_remove(user: UserClient):
) )
# p1c2s has Snapshot, Remove and Add # p1c2s has Snapshot, Remove and Add
p1c2s, _ = user.get(res=Device, item=pc1['components'][0]['id']) p1c2s, _ = user.get(res=Device, item=pc1['components'][0]['id'])
assert get_events_info(p1c2s['events']) == ( assert tuple(get_events_info(p1c2s['events'])) == (
(1, 'Snapshot', ['p1c1s', 'p1c2s', 'p1c3s'], None), # First Snapshot to PC1 ('Snapshot', ['p1c1s', 'p1c2s', 'p1c3s']), # First Snapshot to PC1
(2, 'Snapshot', ['p1c2s', 'p2c1s'], None), # Second Snapshot to PC2 ('Snapshot', ['p1c2s', 'p2c1s']), # Second Snapshot to PC2
(3, 'Remove', ['p1c2s'], 2), # ...which caused p1c2s to be removed form PC1 ('Remove', ['p1c2s']), # ...which caused p1c2s to be removed form PC1
(4, 'Snapshot', ['p1c2s', 'p1c3s'], None), # The third Snapshot to PC1 ('Snapshot', ['p1c2s', 'p1c3s']), # The third Snapshot to PC1
(5, 'Remove', ['p1c2s'], 4) # ...which caused p1c2 to be removed from PC2 ('Remove', ['p1c2s']) # ...which caused p1c2 to be removed from PC2
) )
# We register the first device but without the processor, # We register the first device but without the processor,
@ -242,7 +240,7 @@ def test_snapshot_component_add_remove(user: UserClient):
assert {c['serialNumber'] for c in pc1['components']} == {'p1c3s', 'p1c4s'} assert {c['serialNumber'] for c in pc1['components']} == {'p1c3s', 'p1c4s'}
assert all(c['parent'] == pc1_id for c in pc1['components']) assert all(c['parent'] == pc1_id for c in pc1['components'])
# This last Snapshot only # This last Snapshot only
assert get_events_info(pc1['events'])[-1] == (6, 'Snapshot', ['p1c3s', 'p1c4s'], None) assert get_events_info(pc1['events'])[-1] == ('Snapshot', ['p1c3s', 'p1c4s'])
# PC2 # PC2
# We haven't changed PC2 # We haven't changed PC2
assert tuple(c['serialNumber'] for c in pc2['components']) == ('p2c1s',) assert tuple(c['serialNumber'] for c in pc2['components']) == ('p2c1s',)