Publish first version

This commit is contained in:
Finn Christiansen 2021-01-24 13:58:29 +01:00
parent e167769041
commit bac59704db
18 changed files with 564 additions and 1 deletions

14
app/resources/__init__.py Normal file
View file

@ -0,0 +1,14 @@
def register_blueprints(api):
from . import impulses, consumption
resources = (impulses, consumption, )
for resource_blp in (res.bp for res in resources):
# Here we can register common handlers to all resources
#
# resource_blp.before_request(before_request_handler)
# resource_blp.after_request(after_request_handler)
api.register_blueprint(resource_blp,
url_prefix=f'/{resource_blp.url_prefix}')

View file

@ -0,0 +1,24 @@
from .. import db
import datetime
from flask.views import MethodView
from flask_smorest import Blueprint
from ..schemas.consumption import ConsumptionSchema, ConsumptionQuerySchema
from ..models.impulse import Impulse
from sqlalchemy.sql import func
bp = Blueprint('consumption', 'consumptions', url_prefix='consumption',
description='Operations on consumptions')
@bp.route('/')
class Consumptions(MethodView):
@bp.arguments(ConsumptionQuerySchema, location="query")
@bp.response(ConsumptionSchema(many=False))
def get(self, args):
if "timeperiod" in args:
timeperiod = int(args['timeperiod'])
filterdate = datetime.datetime.now() - datetime.timedelta(seconds=timeperiod)
consumption = db.session.query(func.sum(Impulse.power)).filter(Impulse.created_at >= filterdate).first()[0]
else:
consumption = db.session.query(func.sum(Impulse.power)).first()[0]
return {'consumption': consumption}

35
app/resources/impulses.py Normal file
View file

@ -0,0 +1,35 @@
from .. import db
from flask.views import MethodView
from flask_smorest import Blueprint
from ..schemas.impulse import ImpulseSchema, ImpulseQuerySchema
from ..models.impulse import Impulse
bp = Blueprint('impulse', 'impulses', url_prefix='impulses',
description='Operations on impulses')
@bp.route('/')
class Impulses(MethodView):
@bp.arguments(ImpulseQuerySchema, location="query")
@bp.response(ImpulseSchema(many=True))
def get(self, args):
impulses = Impulse.query.all()
return impulses
@bp.arguments(ImpulseSchema)
@bp.response(ImpulseSchema, code=201)
def post(self, new_impulse):
db.session.add(new_impulse)
db.session.commit()
return new_impulse
@bp.route('/<impulse_id>')
class ImpulseById(MethodView):
@bp.response(code=204)
def delete(self, impulse_id):
impulse = Impulse.query.filter_by(id=impulse_id).first()
db.session.delete(impulse)
db.session.commit()