external document erase

This commit is contained in:
Cayo Puigdefabregas 2021-07-26 11:33:11 +02:00
parent c5e62914b6
commit 833b55aefc
6 changed files with 41 additions and 69 deletions

View File

@ -59,7 +59,7 @@ def upgrade():
# ToErased table # ToErased table
op.create_table('to_erased', op.create_table('to_erased',
sa.Column('document_id', sa.BigInteger(), nullable=False), sa.Column('document_id', sa.BigInteger(), nullable=True),
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False), sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
sa.ForeignKeyConstraint(['document_id'], [f'{get_inv()}.document.id'], ), sa.ForeignKeyConstraint(['document_id'], [f'{get_inv()}.document.id'], ),
sa.ForeignKeyConstraint(['id'], [f'{get_inv()}.action.id'], ), sa.ForeignKeyConstraint(['id'], [f'{get_inv()}.action.id'], ),

View File

@ -1327,26 +1327,15 @@ class ToPrepare(ActionWithMultipleDevices):
pass pass
class ToErased(ActionWithMultipleDevices): class ToErased(JoinedTableMixin, ActionWithMultipleDevices):
"""The device has been selected for insert one proof of erease disk. """The device has been selected for insert one proof of erease disk.
""" """
document_comment = """The user that gets the device due this deal.""" document_comment = """The user that gets the device due this deal."""
# document_id = db.Column(BigInteger, document_id = db.Column(BigInteger,
# db.ForeignKey('document.id'), db.ForeignKey('document.id'),
# nullable=False) nullable=False)
# document = db.relationship('EraseDocument', document = db.relationship('Document',
# backref=backref('actions', backref=backref('actions',
# # lazy=True,
# # uselist=False,
# # cascade=CASCADE_OWN),
# uselist=True,
# lazy=True,
# order_by=lambda: Action.end_time,
# collection_class=list),
# primaryjoin='ToErased.document_id == EraseDocument.id')
document_id = Column(BigInteger, ForeignKey('document.id'), nullable=False)
document = relationship('Document',
backref=backref('document_one',
lazy=True, lazy=True,
cascade=CASCADE_OWN), cascade=CASCADE_OWN),
primaryjoin='ToErased.document_id == Document.id') primaryjoin='ToErased.document_id == Document.id')

View File

@ -17,6 +17,7 @@ from ereuse_devicehub.resources.action import models as m
from ereuse_devicehub.resources.agent import schemas as s_agent from ereuse_devicehub.resources.agent import schemas as s_agent
from ereuse_devicehub.resources.device import schemas as s_device from ereuse_devicehub.resources.device import schemas as s_device
from ereuse_devicehub.resources.tradedocument import schemas as s_document from ereuse_devicehub.resources.tradedocument import schemas as s_document
from ereuse_devicehub.resources.documents import schemas as s_generic_document
from ereuse_devicehub.resources.enums import AppearanceRange, BiosAccessRange, FunctionalityRange, \ from ereuse_devicehub.resources.enums import AppearanceRange, BiosAccessRange, FunctionalityRange, \
PhysicalErasureMethod, R_POSITIVE, RatingRange, \ PhysicalErasureMethod, R_POSITIVE, RatingRange, \
Severity, SnapshotSoftware, TestDataStorageLength Severity, SnapshotSoftware, TestDataStorageLength
@ -432,7 +433,8 @@ class Prepare(ActionWithMultipleDevices):
class ToErased(ActionWithMultipleDevices): class ToErased(ActionWithMultipleDevices):
__doc__ = m.ToErased.__doc__ __doc__ = m.ToErased.__doc__
document = NestedOn('Document', only_query='id') document = NestedOn(s_generic_document.Document, only_query='id')
# document = NestedOn('EraseDocument')
# device = NestedOn(s_device.Device, only_query='id') # device = NestedOn(s_device.Device, only_query='id')

View File

@ -10,25 +10,13 @@ from ereuse_devicehub.resources.action.models import (Trade, Confirm, ConfirmRev
ConfirmRevokeDocument) ConfirmRevokeDocument)
from ereuse_devicehub.resources.user.models import User from ereuse_devicehub.resources.user.models import User
from ereuse_devicehub.resources.action.models import ToErased from ereuse_devicehub.resources.action.models import ToErased
from ereuse_devicehub.resources.documents.models import EraseDocument from ereuse_devicehub.resources.documents.models import Document
from ereuse_devicehub.resources.documents.schemas import EraseDocument as sh_document from ereuse_devicehub.resources.device.models import DataStorage
from ereuse_devicehub.resources.documents.schemas import Document as sh_document
class ErasedView(): class ErasedView():
"""Handler for manager the trade action register from post """Handler for manager the action register for add to a device one proof of erase
request_post = {
'type': 'Trade',
'devices': [device_id],
'documents': [document_id],
'userFrom': user2.email,
'userTo': user.email,
'price': 10,
'date': "2020-12-01T02:00:00+00:00",
'lot': lot['id'],
'confirm': True,
}
""" """
def __init__(self, data, schema): def __init__(self, data, schema):
@ -37,30 +25,33 @@ class ErasedView():
self.insert_action(copy.copy(data)) self.insert_action(copy.copy(data))
def post(self): def post(self):
# import pdb; pdb.set_trace()
db.session().final_flush() db.session().final_flush()
ret = self.schema.jsonify(self.erased) from flask import jsonify
ret = jsonify(self.erased)
ret.status_code = 201 ret.status_code = 201
db.session.commit() db.session.commit()
return ret return ret
def insert_document(self, data): def insert_document(self, data):
# import pdb; pdb.set_trace()
schema = sh_document() schema = sh_document()
[data.pop(x) for x in ['severity', 'devices', 'name', 'description']] [data.pop(x, None) for x in ['severity', 'devices', 'name', 'description']]
doc_data = schema.load(data) doc_data = schema.load(data)
doc_data['type'] = 'ToErased' doc_data['type'] = 'ToErased'
self.document = EraseDocument(**doc_data) self.document = Document(**doc_data)
db.session.add(self.document) db.session.add(self.document)
# db.session.commit()
def insert_action(self, data): def insert_action(self, data):
import pdb; pdb.set_trace()
[data.pop(x, None) for x in ['url', 'documentId', 'filename', 'hash']] [data.pop(x, None) for x in ['url', 'documentId', 'filename', 'hash']]
# self.data = self.schema.load(data) self.data = self.schema.load(data)
# self.data['document_id'] = self.document.id
# self.data['document'] = self.document for dev in self.data['devices']:
# data['document_id'] = self.document.id if not hasattr(dev, 'components'):
data['document'] = self.document continue
self.erased = ToErased(**data)
for component in dev.components:
if isinstance(component, DataStorage):
self.data['devices'].add(component)
self.data['document'] = self.document
self.erased = ToErased(**self.data)
db.session.add(self.erased) db.session.add(self.erased)

View File

@ -1,14 +1,12 @@
from citext import CIText from citext import CIText
from flask import g from flask import g
from sqlalchemy import BigInteger, Column, Sequence, Unicode
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from teal.db import URL
from ereuse_devicehub.db import db from ereuse_devicehub.db import db
from ereuse_devicehub.resources.user.models import User from ereuse_devicehub.resources.user.models import User
from ereuse_devicehub.resources.models import Thing, STR_SM_SIZE from ereuse_devicehub.resources.models import Thing, STR_SM_SIZE
from sqlalchemy import BigInteger, Column, Sequence, Unicode
from teal.db import URL
class Document(Thing): class Document(Thing):
"""This represent a generic document.""" """This represent a generic document."""
@ -37,11 +35,3 @@ class Document(Thing):
def __str__(self) -> str: def __str__(self) -> str:
return '{0.file_name}'.format(self) return '{0.file_name}'.format(self)
class EraseDocument(Document):
"""This represent a document involved in a erase manual action.
This represent the proof.
"""
pass

View File

@ -5,22 +5,22 @@ from ereuse_devicehub.resources.documents import models as m
# from marshmallow import ValidationError, validates_schema # from marshmallow import ValidationError, validates_schema
class EraseDocument(Thing): class Document(Thing):
__doc__ = m.EraseDocument.__doc__ __doc__ = m.Document.__doc__
id = Integer(description=m.EraseDocument.id.comment, dump_only=True) id = Integer(description=m.Document.id.comment, dump_only=True)
type = SanitizedStr(default='EraseDocument') type = SanitizedStr(default='Document')
date = DateTime(data_key='endTime', date = DateTime(data_key='endTime',
required=False, required=False,
description=m.EraseDocument.date.comment) description=m.Document.date.comment)
id_document = SanitizedStr(data_key='documentId', id_document = SanitizedStr(data_key='documentId',
default='', default='',
description=m.EraseDocument.id_document.comment) description=m.Document.id_document.comment)
file_name = SanitizedStr(data_key='filename', file_name = SanitizedStr(data_key='filename',
default='', default='',
description=m.EraseDocument.file_name.comment, description=m.Document.file_name.comment,
validate=validate.Length(max=100)) validate=validate.Length(max=100))
file_hash = SanitizedStr(data_key='hash', file_hash = SanitizedStr(data_key='hash',
default='', default='',
description=m.EraseDocument.file_hash.comment, description=m.Document.file_hash.comment,
validate=validate.Length(max=64)) validate=validate.Length(max=64))
url = URL(description=m.EraseDocument.url.comment) url = URL(description=m.Document.url.comment)