From 40afcaf0cb2f282465992cb06eb024687eb83234 Mon Sep 17 00:00:00 2001 From: Alessandro DiMarco Date: Thu, 19 Oct 2017 14:39:49 -0400 Subject: [PATCH 1/6] Add BuildingBGroup model --- app/models/bgroup.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/models/bgroup.py b/app/models/bgroup.py index d1bf0b9..2e5cb22 100644 --- a/app/models/bgroup.py +++ b/app/models/bgroup.py @@ -10,3 +10,11 @@ class BGroup(User, Model, db.Model): priority = db.Column(db.Integer) # FIXME: Foregin key to group_priority time_created = db.Column(db.DateTime, server_default=db.text("timezone('utc'::text, now())")) time_modified = db.Column(db.DateTime) + + +class BuildingBGroup(Model, db.Model): + __tablename__ = 'building_bgroup' + + building_id = db.Column(db.Integer) # FIXME: Foregin key to building + bgroup_id = db.Column(db.Integer) # FIXME: Foregin key to bgroup + time_created = db.Column(db.DateTime, server_default=db.text("timezone('utc'::text, now())")) -- GitLab From 720edb3ba273b060ad5598270773f8c4d334f352 Mon Sep 17 00:00:00 2001 From: Alessandro DiMarco Date: Thu, 19 Oct 2017 14:40:59 -0400 Subject: [PATCH 2/6] Add BuildingBGroup view, controller and form --- app/controllers/bgroup.py | 33 +++++++++++++++++++++++++++++++-- app/forms/bgroup.py | 4 ++++ app/views/__init__.py | 1 + app/views/bgroup.py | 18 +++++++++++++++++- 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/app/controllers/bgroup.py b/app/controllers/bgroup.py index 8bcfd81..86df02a 100644 --- a/app/controllers/bgroup.py +++ b/app/controllers/bgroup.py @@ -1,7 +1,9 @@ """Building groups controller""" +from flask import g +from werkzeug.exceptions import BadRequest from .base import RestController -from ..forms.bgroup import BGroupForm -from ..models.bgroup import BGroup +from ..forms.bgroup import BGroupForm, BuildingBGroupForm +from ..models.bgroup import BGroup, BuildingBGroup class BGroupController(RestController): @@ -13,3 +15,30 @@ class BGroupController(RestController): Get the WTForms form for the model. """ return BGroupForm + + +class BuildingBGroupController(RestController): + """BuildingBGroup Controller""" + Model = BuildingBGroup + + def get_form(self, filter_data): + return BuildingBGroupForm + + def create(self, bgroup_id, data, filter_data): + """Creates all BuildingBGroup models to be added to db""" + if 'building_ids' not in data: + raise BadRequest(['Incorrect body']) + + return [self.Model(building_id=i, bgroup_id=bgroup_id) for i in data['building_ids']] + + def post(self, bgroup_id, data, filter_data): + """Post a list of building_ids to add to a group""" + models = self.create(bgroup_id, data, filter_data) + self.db.session.add_all(models) + + # update user_modified field in bgroup + bgroup = self.db.session.query(BGroup).get(bgroup_id) + bgroup.user_modified = g.get('sub', None) + self.commit() + + return [model.get_dictionary() for model in models] diff --git a/app/forms/bgroup.py b/app/forms/bgroup.py index 44e04f7..92d2469 100644 --- a/app/forms/bgroup.py +++ b/app/forms/bgroup.py @@ -8,3 +8,7 @@ class BGroupForm(UserForm, Form): validators=[wtf.validators.Required(), wtf.validators.Length(max=64)]) priority = wtf.IntegerField(validators=[wtf.validators.NumberRange(1, 3)]) + + +class BuildingBGroupForm(Form): # pylint: disable=too-few-public-methods + pass diff --git a/app/views/__init__.py b/app/views/__init__.py index 6d0df26..db62517 100644 --- a/app/views/__init__.py +++ b/app/views/__init__.py @@ -15,6 +15,7 @@ def register(app): """ building.BuildingView.register(app) bgroup.BGroupView.register(app) + bgroup.BuildingBGroupView.register(app) turk_hit.TurkHitView.register(app) unapproved_point.UnapprovedPointView.register(app) unapproved_window_door.UnapprovedWindowDoorView.register(app) diff --git a/app/views/bgroup.py b/app/views/bgroup.py index a9174a8..3b6991d 100644 --- a/app/views/bgroup.py +++ b/app/views/bgroup.py @@ -1,9 +1,25 @@ """Building group view""" +from flask import jsonify, request +from flask.ext.classy import route, FlaskView from ..views.base import RestView -from ..controllers.bgroup import BGroupController +from ..controllers.bgroup import BGroupController, BuildingBGroupController class BGroupView(RestView): def get_controller(self): return BGroupController() + + +class BuildingBGroupView(RestView): + route_prefix = '/bgroup//' + route_base = '/buildings/' + + def get_controller(self): + return BuildingBGroupController() + + @route('/', methods=['POST']) + def add_buildings(self, bgroup_id): + """Add buildings to a group""" + return self.json(self.get_controller().post( + bgroup_id, self.request_json(), request.args), 201) -- GitLab From 2802ab70dffecabbb1b2faca5e35a79f7f4bb139 Mon Sep 17 00:00:00 2001 From: Alessandro DiMarco Date: Thu, 19 Oct 2017 16:54:58 -0400 Subject: [PATCH 3/6] Add delete and get methods to BuildingBGroupView --- app/controllers/bgroup.py | 5 +++++ app/views/bgroup.py | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/app/controllers/bgroup.py b/app/controllers/bgroup.py index 86df02a..0e918cd 100644 --- a/app/controllers/bgroup.py +++ b/app/controllers/bgroup.py @@ -42,3 +42,8 @@ class BuildingBGroupController(RestController): self.commit() return [model.get_dictionary() for model in models] + + def get(self, bgroup_id, filter_data): + """Get all buildings in a group""" + q = self.query(filter_data).filter(self.Model.bgroup_id == bgroup_id).all() + return [model.get_dictionary() for model in q] diff --git a/app/views/bgroup.py b/app/views/bgroup.py index 3b6991d..b457b59 100644 --- a/app/views/bgroup.py +++ b/app/views/bgroup.py @@ -23,3 +23,12 @@ class BuildingBGroupView(RestView): """Add buildings to a group""" return self.json(self.get_controller().post( bgroup_id, self.request_json(), request.args), 201) + + @route('/', methods=['GET']) + def get(self, bgroup_id): + """Get buildings within a bgroup""" + return self.json(self.get_controller().get(bgroup_id, request.args)) + + @route('/', methods=['DELETE']) + def delete(self, bgroup_id, id_): + return self.json(self.get_controller().delete(id_, request.args), 204) -- GitLab From 651244d413548790325a63ac94a1c2a4bfbad0f0 Mon Sep 17 00:00:00 2001 From: Alessandro DiMarco Date: Thu, 19 Oct 2017 17:13:12 -0400 Subject: [PATCH 4/6] Update bvalve version --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 56b3e1c..94affa1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ beautifulsoup4==4.4.1 blessed==1.9.5 boto3==1.4.4 botocore==1.5.48 -git+ssh://git@github.com/Blocp/bpvalve.git@v1.1.0 +git+ssh://git@github.com/Blocp/bpvalve.git@v1.1.1 cement==2.4.0 colorama==0.3.3 docker-py==1.1.0 -- GitLab From 606114a032a8590f315acff3c0b8be1c5fbd541a Mon Sep 17 00:00:00 2001 From: Alessandro DiMarco Date: Thu, 19 Oct 2017 17:16:13 -0400 Subject: [PATCH 5/6] Remove unused imports and add comment for delete --- app/views/bgroup.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/bgroup.py b/app/views/bgroup.py index b457b59..269db5d 100644 --- a/app/views/bgroup.py +++ b/app/views/bgroup.py @@ -1,6 +1,6 @@ """Building group view""" -from flask import jsonify, request -from flask.ext.classy import route, FlaskView +from flask import request +from flask.ext.classy import route from ..views.base import RestView from ..controllers.bgroup import BGroupController, BuildingBGroupController @@ -31,4 +31,5 @@ class BuildingBGroupView(RestView): @route('/', methods=['DELETE']) def delete(self, bgroup_id, id_): + """Delete a building in a group""" return self.json(self.get_controller().delete(id_, request.args), 204) -- GitLab From 0fa7fde4f6aa82adc820c970bbb556d2ddb34f09 Mon Sep 17 00:00:00 2001 From: Alessandro DiMarco Date: Mon, 23 Oct 2017 11:08:52 -0400 Subject: [PATCH 6/6] Update turk hit for new flask boilerplate changes --- app/controllers/turk_hit.py | 8 +++----- app/views/turk_hit.py | 5 +++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/controllers/turk_hit.py b/app/controllers/turk_hit.py index e9e8ca6..d520c4e 100644 --- a/app/controllers/turk_hit.py +++ b/app/controllers/turk_hit.py @@ -218,13 +218,11 @@ class TurkHitController(RestController): building_dimensions = UnapprovedBuildingDimensionsController().index(args) dimensions = {} - dimensions["windows_doors"] = [model.get_dictionary() - for model in windows_doors] - dimensions["points"] = [model.get_dictionary() - for model in points] + dimensions["windows_doors"] = windows_doors + dimensions["points"] = points dimensions["building_dimensions"] = {} if building_dimensions: - dimensions["building_dimensions"] = building_dimensions[0].get_dictionary() + dimensions["building_dimensions"] = building_dimensions[0] return dimensions def post(self, data, filter_data): diff --git a/app/views/turk_hit.py b/app/views/turk_hit.py index d2e9094..49b1171 100644 --- a/app/views/turk_hit.py +++ b/app/views/turk_hit.py @@ -12,6 +12,11 @@ class TurkHitView(RestView): """Return an instance of the turk hit controller.""" return TurkHitController() + # FIXME: Legacy method, update REST funcs + def parse(self, model): + """Parse the model into a dictionary.""" + return model.get_dictionary() + def index(self): raise MethodNotAllowed() -- GitLab