Rename id parameters, improve doc for some resources.
This commit is contained in:
parent
bbe4fd7f39
commit
a27f33aabf
@ -165,11 +165,11 @@ class AccountListResource(Resource):
|
|||||||
return account, 201
|
return account, 201
|
||||||
|
|
||||||
|
|
||||||
@ns.route('/<int:id>')
|
@ns.route('/<int:account_id>')
|
||||||
@ns.doc(
|
@ns.doc(
|
||||||
security='apikey',
|
security='apikey',
|
||||||
params={
|
params={
|
||||||
'id': 'Id of the account to manage'
|
'account_id': 'Id of the account to manage'
|
||||||
},
|
},
|
||||||
responses={
|
responses={
|
||||||
401: 'Unauthorized',
|
401: 'Unauthorized',
|
||||||
@ -181,15 +181,15 @@ class AccountResource(Resource):
|
|||||||
@ns.response(200, 'OK', account_model)
|
@ns.response(200, 'OK', account_model)
|
||||||
@ns.marshal_with(account_model)
|
@ns.marshal_with(account_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def get(self, id):
|
def get(self, account_id):
|
||||||
"""Get an account."""
|
"""Get an account."""
|
||||||
|
|
||||||
account = Account.query().get(id)
|
account = Account.query().get(account_id)
|
||||||
|
|
||||||
if not account:
|
if not account:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Account with id %d not found.' % id
|
error_message='Account with id %d not found.' % account_id
|
||||||
)
|
)
|
||||||
|
|
||||||
# Note: if we don't pass the code, the result is seen as a tuple and
|
# Note: if we don't pass the code, the result is seen as a tuple and
|
||||||
@ -201,25 +201,25 @@ class AccountResource(Resource):
|
|||||||
@ns.response(406, 'Invalid account data')
|
@ns.response(406, 'Invalid account data')
|
||||||
@ns.marshal_with(account_model)
|
@ns.marshal_with(account_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def post(self, id):
|
def post(self, account_id):
|
||||||
"""Update an account."""
|
"""Update an account."""
|
||||||
|
|
||||||
data = self.api.payload
|
data = self.api.payload
|
||||||
|
|
||||||
# Check ID consistency.
|
# Check ID consistency.
|
||||||
if 'id' in data and data['id'] and data['id'] != id:
|
if 'id' in data and data['id'] and data['id'] != account_id:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
406,
|
406,
|
||||||
error_message='Id must not be provided or changed on update.'
|
error_message='Id must not be provided or changed on update.'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Need to get the object to update it.
|
# Need to get the object to update it.
|
||||||
account = Account.query().get(id)
|
account = Account.query().get(account_id)
|
||||||
|
|
||||||
if not account:
|
if not account:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Account with id %d not found.' % id
|
error_message='Account with id %d not found.' % account_id
|
||||||
)
|
)
|
||||||
|
|
||||||
# SQLAlchemy objects ignore __dict__.update() with merge.
|
# SQLAlchemy objects ignore __dict__.update() with merge.
|
||||||
@ -234,16 +234,16 @@ class AccountResource(Resource):
|
|||||||
@ns.response(204, 'Account deleted', account_model)
|
@ns.response(204, 'Account deleted', account_model)
|
||||||
@ns.marshal_with(account_model)
|
@ns.marshal_with(account_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def delete(self, id):
|
def delete(self, account_id):
|
||||||
"""Delete an account."""
|
"""Delete an account."""
|
||||||
|
|
||||||
# Need to get the object to update it.
|
# Need to get the object to update it.
|
||||||
account = Account.query().get(id)
|
account = Account.query().get(account_id)
|
||||||
|
|
||||||
if not account:
|
if not account:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Account with id %d not found.' % id
|
error_message='Account with id %d not found.' % account_id
|
||||||
)
|
)
|
||||||
|
|
||||||
db.session.delete(account)
|
db.session.delete(account)
|
||||||
@ -251,28 +251,31 @@ class AccountResource(Resource):
|
|||||||
return None, 204
|
return None, 204
|
||||||
|
|
||||||
|
|
||||||
@ns.route('/<int:id>/solds')
|
@ns.route('/<int:account_id>/solds')
|
||||||
class SoldsResource(Resource):
|
@ns.doc(
|
||||||
"""Resource to expose solds."""
|
|
||||||
|
|
||||||
@ns.doc(
|
|
||||||
security='apikey',
|
security='apikey',
|
||||||
|
params={
|
||||||
|
'account_id': 'Id of the account to manage'
|
||||||
|
},
|
||||||
responses={
|
responses={
|
||||||
200: ('OK', solds_model),
|
200: ('OK', solds_model),
|
||||||
401: 'Unauthorized',
|
401: 'Unauthorized',
|
||||||
404: 'Account not found'
|
404: 'Account not found'
|
||||||
})
|
})
|
||||||
|
class SoldsResource(Resource):
|
||||||
|
"""Resource to expose solds."""
|
||||||
|
|
||||||
@ns.marshal_with(solds_model)
|
@ns.marshal_with(solds_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def get(self, id):
|
def get(self, account_id):
|
||||||
"""Get solds for a specific account and date range."""
|
"""Get solds for a specific account and date range."""
|
||||||
|
|
||||||
account = Account.query().get(id)
|
account = Account.query().get(account_id)
|
||||||
|
|
||||||
if not account:
|
if not account:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Account with id %d not found.' % id
|
error_message='Account with id %d not found.' % account_id
|
||||||
)
|
)
|
||||||
|
|
||||||
# Note: if we don't pass the code, the result is seen as a tuple and
|
# Note: if we don't pass the code, the result is seen as a tuple and
|
||||||
@ -280,29 +283,32 @@ class SoldsResource(Resource):
|
|||||||
return account.solds(), 200
|
return account.solds(), 200
|
||||||
|
|
||||||
|
|
||||||
@ns.route('/<int:id>/balance')
|
@ns.route('/<int:account_id>/balance')
|
||||||
class BalanceResource(Resource):
|
@ns.doc(
|
||||||
"""Resource to expose balances."""
|
|
||||||
|
|
||||||
@ns.doc(
|
|
||||||
security='apikey',
|
security='apikey',
|
||||||
|
params={
|
||||||
|
'account_id': 'Id of the account to manage'
|
||||||
|
},
|
||||||
responses={
|
responses={
|
||||||
200: ('OK', balance_model),
|
200: ('OK', balance_model),
|
||||||
401: 'Unauthorized',
|
401: 'Unauthorized',
|
||||||
404: 'Account not found'
|
404: 'Account not found'
|
||||||
})
|
})
|
||||||
|
class BalanceResource(Resource):
|
||||||
|
"""Resource to expose balances."""
|
||||||
|
|
||||||
@ns.expect(range_parser)
|
@ns.expect(range_parser)
|
||||||
@ns.marshal_with(balance_model)
|
@ns.marshal_with(balance_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def get(self, id):
|
def get(self, account_id):
|
||||||
"""Get account balance for a specific date range."""
|
"""Get account balance for a specific date range."""
|
||||||
|
|
||||||
account = Account.query().get(id)
|
account = Account.query().get(account_id)
|
||||||
|
|
||||||
if not account:
|
if not account:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Account with id %d not found.' % id
|
error_message='Account with id %d not found.' % account_id
|
||||||
)
|
)
|
||||||
|
|
||||||
data = range_parser.parse_args()
|
data = range_parser.parse_args()
|
||||||
@ -312,45 +318,51 @@ class BalanceResource(Resource):
|
|||||||
return account.balance(**data), 200
|
return account.balance(**data), 200
|
||||||
|
|
||||||
|
|
||||||
@ns.route("/<int:id>/category")
|
@ns.route("/<int:account_id>/category")
|
||||||
class CategoryResource(Resource):
|
@ns.doc(
|
||||||
"""Resource to expose categories."""
|
|
||||||
|
|
||||||
@ns.doc(
|
|
||||||
security='apikey',
|
security='apikey',
|
||||||
|
params={
|
||||||
|
'account_id': 'Id of the account to manage'
|
||||||
|
},
|
||||||
responses={
|
responses={
|
||||||
200: ('OK', [category_model]),
|
200: ('OK', [category_model]),
|
||||||
401: 'Unauthorized',
|
401: 'Unauthorized',
|
||||||
404: 'Account not found'
|
404: 'Account not found'
|
||||||
})
|
})
|
||||||
|
class CategoryResource(Resource):
|
||||||
|
"""Resource to expose categories."""
|
||||||
|
|
||||||
@ns.expect(range_parser)
|
@ns.expect(range_parser)
|
||||||
@ns.marshal_list_with(category_model)
|
@ns.marshal_list_with(category_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def get(self, id):
|
def get(self, account_id):
|
||||||
"""Get account category balances for a specific date range."""
|
"""Get account category balances for a specific date range."""
|
||||||
|
|
||||||
data = range_parser.parse_args()
|
data = range_parser.parse_args()
|
||||||
|
|
||||||
return Operation.get_categories_for_range(id, **data).all()
|
return Operation.get_categories_for_range(account_id, **data).all()
|
||||||
|
|
||||||
|
|
||||||
@ns.route('/<int:id>/ohlc')
|
@ns.route('/<int:account_id>/ohlc')
|
||||||
class OHLCResource(Resource):
|
@ns.doc(
|
||||||
"""Resource to expose OHLC."""
|
|
||||||
|
|
||||||
@ns.doc(
|
|
||||||
security='apikey',
|
security='apikey',
|
||||||
|
params={
|
||||||
|
'account_id': 'Id of the account to manage'
|
||||||
|
},
|
||||||
responses={
|
responses={
|
||||||
200: ('OK', [ohlc_model]),
|
200: ('OK', [ohlc_model]),
|
||||||
401: 'Unauthorized',
|
401: 'Unauthorized',
|
||||||
404: 'Account not found'
|
404: 'Account not found'
|
||||||
})
|
})
|
||||||
|
class OHLCResource(Resource):
|
||||||
|
"""Resource to expose OHLC."""
|
||||||
|
|
||||||
@ns.expect(range_parser)
|
@ns.expect(range_parser)
|
||||||
@ns.marshal_list_with(ohlc_model)
|
@ns.marshal_list_with(ohlc_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def get(self, id):
|
def get(self, account_id):
|
||||||
"""Get OHLC data for a specific date range and account."""
|
"""Get OHLC data for a specific date range and account."""
|
||||||
|
|
||||||
data = range_parser.parse_args()
|
data = range_parser.parse_args()
|
||||||
|
|
||||||
return Operation.get_ohlc_per_day_for_range(id, **data).all()
|
return Operation.get_ohlc_per_day_for_range(account_id, **data).all()
|
||||||
|
@ -146,11 +146,11 @@ class OperationListResource(Resource):
|
|||||||
return operation, 201
|
return operation, 201
|
||||||
|
|
||||||
|
|
||||||
@ns.route('/<int:id>')
|
@ns.route('/<int:operation_id>')
|
||||||
@ns.doc(
|
@ns.doc(
|
||||||
security='apikey',
|
security='apikey',
|
||||||
params={
|
params={
|
||||||
'id': 'Id of the operation to manage'
|
'operation_id': 'Id of the operation to manage'
|
||||||
},
|
},
|
||||||
responses={
|
responses={
|
||||||
401: 'Unauthorized',
|
401: 'Unauthorized',
|
||||||
@ -162,15 +162,15 @@ class OperationResource(Resource):
|
|||||||
@ns.response(200, 'OK', operation_model)
|
@ns.response(200, 'OK', operation_model)
|
||||||
@ns.marshal_with(operation_model)
|
@ns.marshal_with(operation_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def get(self, id):
|
def get(self, operation_id):
|
||||||
"""Get operation."""
|
"""Get operation."""
|
||||||
|
|
||||||
operation = db.session.query(Operation).get(id)
|
operation = db.session.query(Operation).get(operation_id)
|
||||||
|
|
||||||
if not operation:
|
if not operation:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Operation with id %d not found.' % id
|
error_message='Operation with id %d not found.' % operation_id
|
||||||
)
|
)
|
||||||
|
|
||||||
return operation, 200
|
return operation, 200
|
||||||
@ -180,24 +180,24 @@ class OperationResource(Resource):
|
|||||||
@ns.response(406, 'Invalid operation data')
|
@ns.response(406, 'Invalid operation data')
|
||||||
@ns.marshal_with(operation_model)
|
@ns.marshal_with(operation_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def post(self, id):
|
def post(self, operation_id):
|
||||||
"""Update an operation."""
|
"""Update an operation."""
|
||||||
|
|
||||||
data = self.api.payload
|
data = self.api.payload
|
||||||
|
|
||||||
# Check ID consistency.
|
# Check ID consistency.
|
||||||
if 'id' in data and data['id'] and data['id'] != id:
|
if 'id' in data and data['id'] and data['id'] != operation_id:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
406,
|
406,
|
||||||
error_message='Id must not be provided or changed on update.'
|
error_message='Id must not be provided or changed on update.'
|
||||||
)
|
)
|
||||||
|
|
||||||
operation = db.session.query(Operation).get(id)
|
operation = db.session.query(Operation).get(operation_id)
|
||||||
|
|
||||||
if not operation:
|
if not operation:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Operation with id %d not found.' % id
|
error_message='Operation with id %d not found.' % operation_id
|
||||||
)
|
)
|
||||||
|
|
||||||
# FIXME check account_id consistency.
|
# FIXME check account_id consistency.
|
||||||
@ -213,15 +213,15 @@ class OperationResource(Resource):
|
|||||||
@ns.response(204, 'Operation deleted', operation_model)
|
@ns.response(204, 'Operation deleted', operation_model)
|
||||||
@ns.marshal_with(operation_model)
|
@ns.marshal_with(operation_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def delete(self, id):
|
def delete(self, operation_id):
|
||||||
"""Delete an operation."""
|
"""Delete an operation."""
|
||||||
|
|
||||||
operation = db.session.query(Operation).get(id)
|
operation = db.session.query(Operation).get(operation_id)
|
||||||
|
|
||||||
if not operation:
|
if not operation:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Operation with id %d not found.' % id
|
error_message='Operation with id %d not found.' % operation_id
|
||||||
)
|
)
|
||||||
|
|
||||||
db.session.delete(operation)
|
db.session.delete(operation)
|
||||||
|
@ -124,11 +124,11 @@ class ScheduledOperationListResource(Resource):
|
|||||||
return scheduled_operation, 201
|
return scheduled_operation, 201
|
||||||
|
|
||||||
|
|
||||||
@ns.route('/<int:id>')
|
@ns.route('/<int:scheduled_operation_id>')
|
||||||
@ns.doc(
|
@ns.doc(
|
||||||
security='apikey',
|
security='apikey',
|
||||||
params={
|
params={
|
||||||
'id': 'Id of the scheduled operation to manage'
|
'scheduled_operation_id': 'Id of the scheduled operation to manage'
|
||||||
},
|
},
|
||||||
responses={
|
responses={
|
||||||
401: 'Unauthorized',
|
401: 'Unauthorized',
|
||||||
@ -140,15 +140,17 @@ class ScheduledOperationResource(Resource):
|
|||||||
@ns.response(200, 'OK', scheduled_operation_model)
|
@ns.response(200, 'OK', scheduled_operation_model)
|
||||||
@ns.marshal_with(scheduled_operation_model)
|
@ns.marshal_with(scheduled_operation_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def get(self, id):
|
def get(self, scheduled_operation_id):
|
||||||
"""Get scheduled operation."""
|
"""Get scheduled operation."""
|
||||||
|
|
||||||
scheduled_operation = ScheduledOperation.query().get(id)
|
so_id = scheduled_operation_id
|
||||||
|
|
||||||
|
scheduled_operation = ScheduledOperation.query().get(so_id)
|
||||||
|
|
||||||
if not scheduled_operation:
|
if not scheduled_operation:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Scheduled operation with id %d not found.' % id
|
error_message='Scheduled operation with id %d not found.' % so_id
|
||||||
)
|
)
|
||||||
|
|
||||||
return scheduled_operation, 200
|
return scheduled_operation, 200
|
||||||
@ -158,24 +160,25 @@ class ScheduledOperationResource(Resource):
|
|||||||
@ns.expect(scheduled_operation_model)
|
@ns.expect(scheduled_operation_model)
|
||||||
@ns.marshal_with(scheduled_operation_model)
|
@ns.marshal_with(scheduled_operation_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def post(self, id):
|
def post(self, scheduled_operation_id):
|
||||||
"""Update a scheduled operation."""
|
"""Update a scheduled operation."""
|
||||||
|
|
||||||
data = self.api.payload
|
data = self.api.payload
|
||||||
|
so_id = scheduled_operation_id
|
||||||
|
|
||||||
# Check ID consistency.
|
# Check ID consistency.
|
||||||
if 'id' in data and data['id'] and data['id'] != id:
|
if 'id' in data and data['id'] and data['id'] != so_id:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
406,
|
406,
|
||||||
error_message='Id must not be provided or changed on update.'
|
error_message='Id must not be provided or changed on update.'
|
||||||
)
|
)
|
||||||
|
|
||||||
scheduled_operation = ScheduledOperation.query().get(id)
|
scheduled_operation = ScheduledOperation.query().get(so_id)
|
||||||
|
|
||||||
if not scheduled_operation:
|
if not scheduled_operation:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Scheduled operation with id %d not found.' % id
|
error_message='Scheduled operation with id %d not found.' % so_id
|
||||||
)
|
)
|
||||||
|
|
||||||
# FIXME check account_id consistency.
|
# FIXME check account_id consistency.
|
||||||
@ -196,15 +199,17 @@ class ScheduledOperationResource(Resource):
|
|||||||
@ns.response(409, 'Cannot be deleted')
|
@ns.response(409, 'Cannot be deleted')
|
||||||
@ns.marshal_with(scheduled_operation_model)
|
@ns.marshal_with(scheduled_operation_model)
|
||||||
@jwt_required
|
@jwt_required
|
||||||
def delete(self, id):
|
def delete(self, scheduled_operation_id):
|
||||||
"""Delete a scheduled operation."""
|
"""Delete a scheduled operation."""
|
||||||
|
|
||||||
scheduled_operation = ScheduledOperation.query().get(id)
|
so_id = scheduled_operation_id
|
||||||
|
|
||||||
|
scheduled_operation = ScheduledOperation.query().get(so_id)
|
||||||
|
|
||||||
if not scheduled_operation:
|
if not scheduled_operation:
|
||||||
ns.abort(
|
ns.abort(
|
||||||
404,
|
404,
|
||||||
error_message='Scheduled operation with id %d not found.' % id
|
error_message='Scheduled operation with id %d not found.' % so_id
|
||||||
)
|
)
|
||||||
|
|
||||||
operations = scheduled_operation.operations.filter(
|
operations = scheduled_operation.operations.filter(
|
||||||
|
Loading…
Reference in New Issue
Block a user