change the endpoints for allocate and deallocate
This commit is contained in:
parent
23e124721c
commit
4172711c93
|
@ -14,7 +14,6 @@ from ereuse_devicehub.resources.device import definitions
|
||||||
from ereuse_devicehub.resources.documents import documents
|
from ereuse_devicehub.resources.documents import documents
|
||||||
from ereuse_devicehub.resources.enums import PriceSoftware
|
from ereuse_devicehub.resources.enums import PriceSoftware
|
||||||
from ereuse_devicehub.resources.versions import versions
|
from ereuse_devicehub.resources.versions import versions
|
||||||
from ereuse_devicehub.resources.allocate import definitions as allocate_def
|
|
||||||
from ereuse_devicehub.resources.metric import definitions as metric_def
|
from ereuse_devicehub.resources.metric import definitions as metric_def
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,7 +29,6 @@ class DevicehubConfig(Config):
|
||||||
import_resource(documents),
|
import_resource(documents),
|
||||||
import_resource(inventory),
|
import_resource(inventory),
|
||||||
import_resource(versions),
|
import_resource(versions),
|
||||||
import_resource(allocate_def),
|
|
||||||
import_resource(metric_def),
|
import_resource(metric_def),
|
||||||
),)
|
),)
|
||||||
PASSWORD_SCHEMES = {'pbkdf2_sha256'} # type: Set[str]
|
PASSWORD_SCHEMES = {'pbkdf2_sha256'} # type: Set[str]
|
||||||
|
|
|
@ -3,7 +3,7 @@ from typing import Callable, Iterable, Tuple
|
||||||
from teal.resource import Converters, Resource
|
from teal.resource import Converters, Resource
|
||||||
|
|
||||||
from ereuse_devicehub.resources.action import schemas
|
from ereuse_devicehub.resources.action import schemas
|
||||||
from ereuse_devicehub.resources.action.views import ActionView
|
from ereuse_devicehub.resources.action.views import ActionView, AllocateView, DeallocateView
|
||||||
from ereuse_devicehub.resources.device.sync import Sync
|
from ereuse_devicehub.resources.device.sync import Sync
|
||||||
|
|
||||||
|
|
||||||
|
@ -198,6 +198,16 @@ class ToPrepareDef(ActionDef):
|
||||||
SCHEMA = schemas.ToPrepare
|
SCHEMA = schemas.ToPrepare
|
||||||
|
|
||||||
|
|
||||||
|
class AllocateDef(ActionDef):
|
||||||
|
VIEW = AllocateView
|
||||||
|
SCHEMA = schemas.Allocate
|
||||||
|
|
||||||
|
|
||||||
|
class DeallocateDef(ActionDef):
|
||||||
|
VIEW = DeallocateView
|
||||||
|
SCHEMA = schemas.Deallocate
|
||||||
|
|
||||||
|
|
||||||
class PrepareDef(ActionDef):
|
class PrepareDef(ActionDef):
|
||||||
VIEW = None
|
VIEW = None
|
||||||
SCHEMA = schemas.Prepare
|
SCHEMA = schemas.Prepare
|
||||||
|
|
|
@ -323,7 +323,6 @@ class Deallocate(JoinedTableMixin, ActionWithMultipleDevices):
|
||||||
"""
|
"""
|
||||||
code = Column(CIText(), default='', nullable=True)
|
code = Column(CIText(), default='', nullable=True)
|
||||||
code.comment = """ This is a internal code for mainteing the secrets of the personal datas of the new holder """
|
code.comment = """ This is a internal code for mainteing the secrets of the personal datas of the new holder """
|
||||||
end_users = Column(Numeric(precision=4), check_range('end_users', 0), nullable=True)
|
|
||||||
|
|
||||||
|
|
||||||
class EraseBasic(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
class EraseBasic(JoinedWithOneDeviceMixin, ActionWithOneDevice):
|
||||||
|
|
|
@ -67,14 +67,14 @@ class Remove(ActionWithOneDevice):
|
||||||
|
|
||||||
class Allocate(ActionWithMultipleDevices):
|
class Allocate(ActionWithMultipleDevices):
|
||||||
__doc__ = m.Allocate.__doc__
|
__doc__ = m.Allocate.__doc__
|
||||||
start_time = DateTime(data_key='start_time', required=True,
|
start_time = DateTime(data_key='startTime', required=True,
|
||||||
description=m.Action.start_time.comment)
|
description=m.Action.start_time.comment)
|
||||||
end_time = DateTime(data_key='end_time', required=False,
|
end_time = DateTime(data_key='endTime', required=False,
|
||||||
description=m.Action.end_time.comment)
|
description=m.Action.end_time.comment)
|
||||||
code = SanitizedStr(data_key='transaction', validate=Length(min=1, max=STR_BIG_SIZE),
|
code = SanitizedStr(data_key='transaction', validate=Length(min=1, max=STR_BIG_SIZE),
|
||||||
required=False,
|
required=False,
|
||||||
description='The code of the agent to assigned.')
|
description='The code of the agent to assigned.')
|
||||||
end_users = Integer(validate=[Range(min=1, error="Value must be greater than 0")])
|
end_users = Integer(data_key='endUsers', validate=[Range(min=1, error="Value must be greater than 0")])
|
||||||
|
|
||||||
@validates_schema
|
@validates_schema
|
||||||
def validate_allocate(self, data: dict):
|
def validate_allocate(self, data: dict):
|
||||||
|
@ -95,7 +95,7 @@ class Allocate(ActionWithMultipleDevices):
|
||||||
|
|
||||||
class Deallocate(ActionWithMultipleDevices):
|
class Deallocate(ActionWithMultipleDevices):
|
||||||
__doc__ = m.Deallocate.__doc__
|
__doc__ = m.Deallocate.__doc__
|
||||||
start_time = DateTime(data_key='start_time', required=True,
|
start_time = DateTime(data_key='startTime', required=True,
|
||||||
description=m.Action.start_time.comment)
|
description=m.Action.start_time.comment)
|
||||||
code = SanitizedStr(data_key='transaction', validate=Length(min=1, max=STR_BIG_SIZE),
|
code = SanitizedStr(data_key='transaction', validate=Length(min=1, max=STR_BIG_SIZE),
|
||||||
required=False,
|
required=False,
|
||||||
|
|
|
@ -8,7 +8,7 @@ from distutils.version import StrictVersion
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
from flask.json import jsonify
|
from flask.json import jsonify
|
||||||
|
|
||||||
from flask import current_app as app, request, g
|
from flask import current_app as app, request, g, redirect
|
||||||
from sqlalchemy.util import OrderedSet
|
from sqlalchemy.util import OrderedSet
|
||||||
from teal.marshmallow import ValidationError
|
from teal.marshmallow import ValidationError
|
||||||
from teal.resource import View
|
from teal.resource import View
|
||||||
|
@ -16,7 +16,7 @@ from teal.resource import View
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.query import things_response
|
from ereuse_devicehub.query import things_response
|
||||||
from ereuse_devicehub.resources.action.models import (Action, RateComputer, Snapshot, VisualTest,
|
from ereuse_devicehub.resources.action.models import (Action, RateComputer, Snapshot, VisualTest,
|
||||||
InitTransfer, Live)
|
InitTransfer, Live, Allocate, Deallocate)
|
||||||
from ereuse_devicehub.resources.action.rate.v1_0 import CannotRate
|
from ereuse_devicehub.resources.action.rate.v1_0 import CannotRate
|
||||||
from ereuse_devicehub.resources.enums import SnapshotSoftware, Severity
|
from ereuse_devicehub.resources.enums import SnapshotSoftware, Severity
|
||||||
from ereuse_devicehub.resources.user.exceptions import InsufficientPermission
|
from ereuse_devicehub.resources.user.exceptions import InsufficientPermission
|
||||||
|
@ -63,6 +63,38 @@ def move_json(tmp_snapshots, path_name, user):
|
||||||
os.remove(path_name)
|
os.remove(path_name)
|
||||||
|
|
||||||
|
|
||||||
|
class AllocateMix():
|
||||||
|
model = None
|
||||||
|
|
||||||
|
def post(self):
|
||||||
|
""" Create one res_obj """
|
||||||
|
res_json = request.get_json()
|
||||||
|
res_obj = self.model(**res_json)
|
||||||
|
db.session.add(res_obj)
|
||||||
|
db.session().final_flush()
|
||||||
|
ret = self.schema.jsonify(res_obj)
|
||||||
|
ret.status_code = 201
|
||||||
|
db.session.commit()
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def find(self, args: dict):
|
||||||
|
res_objs = self.model.query.filter_by(author=g.user) \
|
||||||
|
.order_by(self.model.created.desc()) \
|
||||||
|
.paginate(per_page=200)
|
||||||
|
return things_response(
|
||||||
|
self.schema.dump(res_objs.items, many=True, nested=0),
|
||||||
|
res_objs.page, res_objs.per_page, res_objs.total,
|
||||||
|
res_objs.prev_num, res_objs.next_num
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class AllocateView(AllocateMix, View):
|
||||||
|
model = Allocate
|
||||||
|
|
||||||
|
class DeallocateView(AllocateMix, View):
|
||||||
|
model = Deallocate
|
||||||
|
|
||||||
|
|
||||||
class ActionView(View):
|
class ActionView(View):
|
||||||
def post(self):
|
def post(self):
|
||||||
"""Posts an action."""
|
"""Posts an action."""
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
from ereuse_devicehub.resources.action import schemas
|
|
||||||
from teal.resource import Resource
|
|
||||||
from ereuse_devicehub.resources.allocate.views import AllocateView, DeallocateView
|
|
||||||
|
|
||||||
|
|
||||||
class AllocateDef(Resource):
|
|
||||||
VIEW = AllocateView
|
|
||||||
SCHEMA = schemas.Allocate
|
|
||||||
AUTH = True
|
|
||||||
|
|
||||||
class DeallocateDef(Resource):
|
|
||||||
VIEW = DeallocateView
|
|
||||||
SCHEMA = schemas.Deallocate
|
|
||||||
AUTH = True
|
|
|
@ -1,39 +0,0 @@
|
||||||
from flask import g, request
|
|
||||||
from teal.resource import View
|
|
||||||
|
|
||||||
from ereuse_devicehub.db import db
|
|
||||||
from ereuse_devicehub.query import things_response
|
|
||||||
from ereuse_devicehub.resources.action.models import Allocate, Deallocate
|
|
||||||
|
|
||||||
|
|
||||||
class AllocateMix():
|
|
||||||
model = None
|
|
||||||
|
|
||||||
def post(self):
|
|
||||||
""" Create one res_obj """
|
|
||||||
res_json = request.get_json()
|
|
||||||
res_obj = self.model(**res_json)
|
|
||||||
db.session.add(res_obj)
|
|
||||||
db.session().final_flush()
|
|
||||||
ret = self.schema.jsonify(res_obj)
|
|
||||||
ret.status_code = 201
|
|
||||||
db.session.commit()
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def find(self, args: dict):
|
|
||||||
res_objs = self.model.query.filter_by(author=g.user) \
|
|
||||||
.order_by(self.model.created.desc()) \
|
|
||||||
.paginate(per_page=200)
|
|
||||||
return things_response(
|
|
||||||
self.schema.dump(res_objs.items, many=True, nested=0),
|
|
||||||
res_objs.page, res_objs.per_page, res_objs.total,
|
|
||||||
res_objs.prev_num, res_objs.next_num
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class AllocateView(AllocateMix, View):
|
|
||||||
model = Allocate
|
|
||||||
|
|
||||||
|
|
||||||
class DeallocateView(AllocateMix, View):
|
|
||||||
model = Deallocate
|
|
|
@ -152,7 +152,7 @@ class Device(Thing):
|
||||||
|
|
||||||
Actions are returned by descending ``created`` time.
|
Actions are returned by descending ``created`` time.
|
||||||
"""
|
"""
|
||||||
return sorted(chain(self.actions_multiple, self.actions_one))
|
return sorted(chain(self.actions_multiple, self.actions_one), key=lambda x: x.created)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def problems(self):
|
def problems(self):
|
||||||
|
@ -298,7 +298,9 @@ class Device(Thing):
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# noinspection PyTypeHints
|
# noinspection PyTypeHints
|
||||||
return next(e for e in reversed(self.actions) if isinstance(e, types))
|
actions = self.actions
|
||||||
|
actions.sort(key=lambda x: x.created)
|
||||||
|
return next(e for e in reversed(actions) if isinstance(e, types))
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
raise LookupError('{!r} does not contain actions of types {}.'.format(self, types))
|
raise LookupError('{!r} does not contain actions of types {}.'.format(self, types))
|
||||||
|
|
||||||
|
|
Reference in New Issue