Creating 'documents/lots/' endpoint
This commit is contained in:
parent
b524ec7398
commit
c0fcfcfdbf
|
@ -2,6 +2,7 @@ import csv
|
||||||
import datetime
|
import datetime
|
||||||
import enum
|
import enum
|
||||||
import uuid
|
import uuid
|
||||||
|
from collections import OrderedDict
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from typing import Callable, Iterable, Tuple
|
from typing import Callable, Iterable, Tuple
|
||||||
|
|
||||||
|
@ -19,6 +20,8 @@ from ereuse_devicehub.resources.action import models as evs
|
||||||
from ereuse_devicehub.resources.device import models as devs
|
from ereuse_devicehub.resources.device import models as devs
|
||||||
from ereuse_devicehub.resources.device.views import DeviceView
|
from ereuse_devicehub.resources.device.views import DeviceView
|
||||||
from ereuse_devicehub.resources.documents.device_row import DeviceRow
|
from ereuse_devicehub.resources.documents.device_row import DeviceRow
|
||||||
|
from ereuse_devicehub.resources.lot import LotView
|
||||||
|
from ereuse_devicehub.resources.lot.models import Lot
|
||||||
|
|
||||||
|
|
||||||
class Format(enum.Enum):
|
class Format(enum.Enum):
|
||||||
|
@ -126,6 +129,41 @@ class DevicesDocumentView(DeviceView):
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
class LotsDocumentView(LotView):
|
||||||
|
def find(self, args: dict):
|
||||||
|
return self.generate_lots_csv(Lot.query)
|
||||||
|
|
||||||
|
def generate_lots_csv(self, query):
|
||||||
|
"""Get device query and put information in csv format."""
|
||||||
|
data = StringIO()
|
||||||
|
cw = csv.writer(data)
|
||||||
|
first = True
|
||||||
|
for lot in query:
|
||||||
|
l = LotRow(lot)
|
||||||
|
if first:
|
||||||
|
cw.writerow(l.keys())
|
||||||
|
first = False
|
||||||
|
cw.writerow(l.values())
|
||||||
|
output = make_response(data.getvalue())
|
||||||
|
output.headers['Content-Disposition'] = 'attachment; filename=lots-info.csv'
|
||||||
|
output.headers['Content-type'] = 'text/csv'
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
class LotRow(OrderedDict):
|
||||||
|
def __init__(self, lot: Lot) -> None:
|
||||||
|
super().__init__()
|
||||||
|
self.lot = lot
|
||||||
|
# General information about device
|
||||||
|
self['Id'] = lot.id.hex
|
||||||
|
self['Name'] = lot.name
|
||||||
|
self['Registered in'] = format(lot.created, '%c')
|
||||||
|
try:
|
||||||
|
self['Description'] = lot.description
|
||||||
|
except:
|
||||||
|
self['Description'] = ''
|
||||||
|
|
||||||
|
|
||||||
class DocumentDef(Resource):
|
class DocumentDef(Resource):
|
||||||
__type__ = 'Document'
|
__type__ = 'Document'
|
||||||
SCHEMA = None
|
SCHEMA = None
|
||||||
|
@ -156,6 +194,8 @@ class DocumentDef(Resource):
|
||||||
devices_view = DevicesDocumentView.as_view('devicesDocumentView',
|
devices_view = DevicesDocumentView.as_view('devicesDocumentView',
|
||||||
definition=self,
|
definition=self,
|
||||||
auth=app.auth)
|
auth=app.auth)
|
||||||
|
lots_view = LotsDocumentView.as_view('lotsDocumentView', definition=self)
|
||||||
if self.AUTH:
|
if self.AUTH:
|
||||||
devices_view = app.auth.requires_auth(devices_view)
|
devices_view = app.auth.requires_auth(devices_view)
|
||||||
self.add_url_rule('/devices/', defaults=d, view_func=devices_view, methods=get)
|
self.add_url_rule('/devices/', defaults=d, view_func=devices_view, methods=get)
|
||||||
|
self.add_url_rule('/lots/', defaults=d, view_func=lots_view, methods=get)
|
||||||
|
|
Reference in a new issue