diff --git a/ereuse_devicehub/dummy/dummy.py b/ereuse_devicehub/dummy/dummy.py index 5b6ab47a..a1d38854 100644 --- a/ereuse_devicehub/dummy/dummy.py +++ b/ereuse_devicehub/dummy/dummy.py @@ -1,40 +1,37 @@ import itertools import json -import jwt from pathlib import Path from typing import Set import click import click_spinner import ereuse_utils.cli +import jwt import yaml from ereuse_utils.test import ANY from ereuse_devicehub.client import UserClient from ereuse_devicehub.db import db +from ereuse_devicehub.parser.models import SnapshotsLog from ereuse_devicehub.resources.action import models as m from ereuse_devicehub.resources.agent.models import Person from ereuse_devicehub.resources.device.models import Device +from ereuse_devicehub.resources.enums import SessionType from ereuse_devicehub.resources.lot.models import Lot from ereuse_devicehub.resources.tag.model import Tag from ereuse_devicehub.resources.user import User from ereuse_devicehub.resources.user.models import Session -from ereuse_devicehub.resources.enums import SessionType class Dummy: - TAGS = ( - 'tag1', - 'tag2', - 'tag3' - ) + TAGS = ('tag1', 'tag2', 'tag3') """Tags to create.""" ET = ( ('DT-AAAAA', 'A0000000000001'), ('DT-BBBBB', 'A0000000000002'), ('DT-CCCCC', 'A0000000000003'), ('DT-BRRAB', '04970DA2A15984'), - ('DT-XXXXX', '04e4bc5af95980') + ('DT-XXXXX', '04e4bc5af95980'), ) """eTags to create.""" ORG = 'eReuse.org CAT', '-t', 'G-60437761', '-c', 'ES' @@ -43,28 +40,35 @@ class Dummy: def __init__(self, app) -> None: super().__init__() self.app = app - self.app.cli.command('dummy', short_help='Creates dummy devices and users.')(self.run) + self.app.cli.command('dummy', short_help='Creates dummy devices and users.')( + self.run + ) - @click.option('--tag-url', '-tu', - type=ereuse_utils.cli.URL(scheme=True, host=True, path=False), - default='http://localhost:8081', - help='The base url (scheme and host) of the tag provider.') - @click.option('--tag-token', '-tt', - type=click.UUID, - default='899c794e-1737-4cea-9232-fdc507ab7106', - help='The token provided by the tag provider. It is an UUID.') - @click.confirmation_option(prompt='This command (re)creates the DB from scratch.' - 'Do you want to continue?') + @click.option( + '--tag-url', + '-tu', + type=ereuse_utils.cli.URL(scheme=True, host=True, path=False), + default='http://localhost:8081', + help='The base url (scheme and host) of the tag provider.', + ) + @click.option( + '--tag-token', + '-tt', + type=click.UUID, + default='899c794e-1737-4cea-9232-fdc507ab7106', + help='The token provided by the tag provider. It is an UUID.', + ) + @click.confirmation_option( + prompt='This command (re)creates the DB from scratch.' + 'Do you want to continue?' + ) def run(self, tag_url, tag_token): runner = self.app.test_cli_runner() - self.app.init_db('Dummy', - 'ACME', - 'acme-id', - tag_url, - tag_token, - erase=True, - common=True) + self.app.init_db( + 'Dummy', 'ACME', 'acme-id', tag_url, tag_token, erase=True, common=True + ) print('Creating stuff...'.ljust(30), end='') + assert SnapshotsLog.query.filter().all() == [] with click_spinner.spinner(): out = runner.invoke('org', 'add', *self.ORG).output org_id = json.loads(out)['id'] @@ -77,16 +81,31 @@ class Dummy: for id in self.TAGS: user1.post({'id': id}, res=Tag) for id, sec in self.ET: - runner.invoke('tag', 'add', id, - '-p', 'https://t.devicetag.io', - '-s', sec, - '-u', user1.user["id"], - '-o', org_id) + runner.invoke( + 'tag', + 'add', + id, + '-p', + 'https://t.devicetag.io', + '-s', + sec, + '-u', + user1.user["id"], + '-o', + org_id, + ) # create tag for pc-laudem - runner.invoke('tag', 'add', 'tagA', - '-p', 'https://t.devicetag.io', - '-u', user1.user["id"], - '-s', 'tagA-secondary') + runner.invoke( + 'tag', + 'add', + 'tagA', + '-p', + 'https://t.devicetag.io', + '-u', + user1.user["id"], + '-s', + 'tagA-secondary', + ) files = tuple(Path(__file__).parent.joinpath('files').iterdir()) print('done.') sample_pc = None # We treat this one as a special sample for demonstrations @@ -101,31 +120,43 @@ class Dummy: sample_pc_devicehub_id = s['device']['devicehubID'] else: pcs.add(s['device']['id']) - if s.get('uuid', None) == 'de4f495e-c58b-40e1-a33e-46ab5e84767e': # oreo + if ( + s.get('uuid', None) == 'de4f495e-c58b-40e1-a33e-46ab5e84767e' + ): # oreo # Make one hdd ErasePhysical - hdd = next(hdd for hdd in s['components'] if hdd['type'] == 'HardDrive') - user1.post({'type': 'ErasePhysical', 'method': 'Shred', 'device': hdd['id']}, - res=m.Action) + hdd = next( + hdd for hdd in s['components'] if hdd['type'] == 'HardDrive' + ) + user1.post( + { + 'type': 'ErasePhysical', + 'method': 'Shred', + 'device': hdd['id'], + }, + res=m.Action, + ) assert sample_pc print('PC sample is', sample_pc) # Link tags and eTags - for tag, pc in zip((self.TAGS[1], self.TAGS[2], self.ET[0][0], self.ET[1][1]), pcs): + for tag, pc in zip( + (self.TAGS[1], self.TAGS[2], self.ET[0][0], self.ET[1][1]), pcs + ): user1.put({}, res=Tag, item='{}/device/{}'.format(tag, pc), status=204) # Perform generic actions - for pc, model in zip(pcs, - {m.ToRepair, m.Repair, m.ToPrepare, m.Ready, m.ToPrepare, - m.Prepare}): + for pc, model in zip( + pcs, {m.ToRepair, m.Repair, m.ToPrepare, m.Ready, m.ToPrepare, m.Prepare} + ): user1.post({'type': model.t, 'devices': [pc]}, res=m.Action) # Perform a Sell to several devices # user1.post( - # { - # 'type': m.Sell.t, - # 'to': user1.user['individuals'][0]['id'], - # 'devices': list(itertools.islice(pcs, len(pcs) // 2)) - # }, - # res=m.Action) + # { + # 'type': m.Sell.t, + # 'to': user1.user['individuals'][0]['id'], + # 'devices': list(itertools.islice(pcs, len(pcs) // 2)) + # }, + # res=m.Action) lot_user, _ = user1.post({'name': 'LoteStephan'}, res=Lot) @@ -135,26 +166,34 @@ class Dummy: lot_user4, _ = user4.post({'name': 'LoteJordi'}, res=Lot) - lot, _ = user1.post({}, - res=Lot, - item='{}/devices'.format(lot_user['id']), - query=[('id', pc) for pc in itertools.islice(pcs, 1, 4)]) + lot, _ = user1.post( + {}, + res=Lot, + item='{}/devices'.format(lot_user['id']), + query=[('id', pc) for pc in itertools.islice(pcs, 1, 4)], + ) # assert len(lot['devices']) - lot2, _ = user2.post({}, - res=Lot, - item='{}/devices'.format(lot_user2['id']), - query=[('id', pc) for pc in itertools.islice(pcs, 4, 6)]) + lot2, _ = user2.post( + {}, + res=Lot, + item='{}/devices'.format(lot_user2['id']), + query=[('id', pc) for pc in itertools.islice(pcs, 4, 6)], + ) - lot3, _ = user3.post({}, - res=Lot, - item='{}/devices'.format(lot_user3['id']), - query=[('id', pc) for pc in itertools.islice(pcs, 11, 14)]) + lot3, _ = user3.post( + {}, + res=Lot, + item='{}/devices'.format(lot_user3['id']), + query=[('id', pc) for pc in itertools.islice(pcs, 11, 14)], + ) - lot4, _ = user4.post({}, - res=Lot, - item='{}/devices'.format(lot_user4['id']), - query=[('id', pc) for pc in itertools.islice(pcs, 14, 16)]) + lot4, _ = user4.post( + {}, + res=Lot, + item='{}/devices'.format(lot_user4['id']), + query=[('id', pc) for pc in itertools.islice(pcs, 14, 16)], + ) # Keep this at the bottom inventory, _ = user1.get(res=Device) @@ -171,17 +210,19 @@ class Dummy: user1.post({'type': m.ToPrepare.t, 'devices': [sample_pc]}, res=m.Action) user1.post({'type': m.Prepare.t, 'devices': [sample_pc]}, res=m.Action) user1.post({'type': m.Ready.t, 'devices': [sample_pc]}, res=m.Action) - user1.post({'type': m.Price.t, 'device': sample_pc, 'currency': 'EUR', 'price': 85}, - res=m.Action) + user1.post( + {'type': m.Price.t, 'device': sample_pc, 'currency': 'EUR', 'price': 85}, + res=m.Action, + ) # todo test reserve # user1.post( # Sell device - # { - # 'type': m.Sell.t, - # 'to': user1.user['individuals'][0]['id'], - # 'devices': [sample_pc] - # }, - # res=m.Action) + # { + # 'type': m.Sell.t, + # 'to': user1.user['individuals'][0]['id'], + # 'devices': [sample_pc] + # }, + # res=m.Action) # todo Receive user1.get(res=Device, item=sample_pc_devicehub_id) # Test @@ -203,19 +244,20 @@ class Dummy: db.session.add(session_external) db.session.commit() - client = UserClient(self.app, user.email, password, - response_wrapper=self.app.response_class) + client = UserClient( + self.app, user.email, password, response_wrapper=self.app.response_class + ) client.login() return client def json_encode(self, dev: str) -> dict: """Encode json.""" data = {"type": "Snapshot"} - data['data'] = jwt.encode(dev, - self.app.config['JWT_PASS'], - algorithm="HS256", - json_encoder=ereuse_utils.JSONEncoder + data['data'] = jwt.encode( + dev, + self.app.config['JWT_PASS'], + algorithm="HS256", + json_encoder=ereuse_utils.JSONEncoder, ) return data - diff --git a/ereuse_devicehub/migrations/versions/b4bd1538bad5_update_live.py b/ereuse_devicehub/migrations/versions/b4bd1538bad5_update_live.py index ffaa57ea..f340df6a 100644 --- a/ereuse_devicehub/migrations/versions/b4bd1538bad5_update_live.py +++ b/ereuse_devicehub/migrations/versions/b4bd1538bad5_update_live.py @@ -27,7 +27,7 @@ def get_inv(): def upgrade(): # op.execute("COMMIT") op.execute("ALTER TYPE snapshotsoftware ADD VALUE 'WorkbenchDesktop'") - SOFTWARE = sa.Enum( + SOFTWARE = sa.dialects.postgresql.ENUM( 'Workbench', 'WorkbenchAndroid', 'AndroidApp', diff --git a/ereuse_devicehub/templates/inventory/snapshots_list.html b/ereuse_devicehub/templates/inventory/snapshots_list.html index a52f76c2..43253d1b 100644 --- a/ereuse_devicehub/templates/inventory/snapshots_list.html +++ b/ereuse_devicehub/templates/inventory/snapshots_list.html @@ -37,16 +37,18 @@ {% for snap in snapshots_log %}