def make_model(self, scope, hashkey, **kwargs): from app import db for arg in self.required_fields: if arg not in kwargs: raise InvalidArgumentsException() parent = kwargs.pop("parent", None) if "settings" in kwargs: try: kwargs["settings"] = json.loads(kwargs["settings"]) except Exception: pass context, mod = get_context_for_scope(scope, hashkey) manager = ResourceManager(context) model = manager.create_resource(**kwargs) # If the resource specifies its parent, then automatically setup the link. if parent: parent_model = self.get_resource(parent) if parent_model: parent_model.related.append(model) db.session.commit() return model
def make_model(self, scope, hashkey, **kwargs): from app import db for arg in self.required_fields: if arg not in kwargs: raise InvalidArgumentsException() parent = kwargs.pop('parent', None) if 'settings' in kwargs: try: kwargs['settings'] = json.loads(kwargs['settings']) except Exception: pass context, mod = get_context_for_scope(scope, hashkey) manager = ResourceManager(context) model = manager.create_resource(**kwargs) # If the resource specifies its parent, then automatically setup the link. if parent: parent_model = self.get_resource(parent) if parent_model: parent_model.related.append(model) db.session.commit() return model
def delete(self, scope, hashkey, resource_hashkey): from app import db parent = request.args.get('parent', None) context, mod = get_context_for_scope(scope, hashkey) manager = ResourceManager(context) manager.delete_resource(resource_hashkey) if parent: parent_model = self.get_resource(parent) if parent_model: parent_model.related.remove() db.session.commit() return {}
def delete(self, scope, hashkey, resource_hashkey): from app import db parent = request.args.get("parent", None) context, mod = get_context_for_scope(scope, hashkey) manager = ResourceManager(context) manager.delete_resource(resource_hashkey) if parent: parent_model = self.get_resource(parent) if parent_model: parent_model.related.remove() db.session.commit() return {}
def post(self, scope, hashkey): data = get_data() positions = data.pop("positions", None) if positions is None: return {}, 400 context, mod = get_context_for_scope(scope, hashkey) row = 0 for (i, pos) in enumerate(positions): manager = ResourceManager(context) manager.update_model(pos["hashkey"], dict(layout=pos["layout"])) row += self.get_resource(pos["hashkey"]).layout.sizeX return {}, 200
def post(self, scope, hashkey): data = get_data() positions = data.pop('positions', None) if positions is None: return {}, 400 context, mod = get_context_for_scope(scope, hashkey) row = 0 for (i, pos) in enumerate(positions): manager = ResourceManager(context) manager.update_model(pos['hashkey'], dict(layout=pos['layout'])) row += self.get_resource(pos['hashkey']).layout.sizeX return {}, 200
def convert(self, scope, hashkey, resource, find_related=False): if resource.user is not None: owner_key = resource.user.hashkey res_scope = "user" elif resource.group is not None: owner_key = resource.group.hashkey res_scope = "group" else: raise InvalidScopeException() permissions = [] for p in resource.permissions: if p.user is not None: key = p.user.hashkey elif p.group is not None: key = p.group.hashkey else: key = None permissions.append(dict( public=p.public, hashkey=key, scope=p.scope )) layout = dict( row=resource.layout.row, col=resource.layout.col, sizeX=resource.layout.sizeX, sizeY=resource.layout.sizeY ) vals = dict( hashkey=resource.hashkey, name=resource.name, type=resource.type, settings=resource.settings, owner_scope=res_scope, owner_hashkey=owner_key, views=[v.hashkey for v in resource.views], permissions=permissions, current_view=resource.current_view, parents=[r.hashkey for r in resource.parents], layout=layout ) if find_related: related = [] context, mod = get_context_for_scope(scope, hashkey) manager = ResourceManager(context) for r in resource.related: if manager.check_permissions(r, "view"): related.append(r) vals['related'] = [self.convert(scope, hashkey, r, find_related=find_related) for r in related] return vals
def convert(self, scope, hashkey, resource, find_related=False): if resource.user is not None: owner_key = resource.user.hashkey res_scope = "user" elif resource.group is not None: owner_key = resource.group.hashkey res_scope = "group" else: raise InvalidScopeException() permissions = [] for p in resource.permissions: if p.user is not None: key = p.user.hashkey elif p.group is not None: key = p.group.hashkey else: key = None permissions.append(dict(public=p.public, hashkey=key, scope=p.scope)) layout = dict( row=resource.layout.row, col=resource.layout.col, sizeX=resource.layout.sizeX, sizeY=resource.layout.sizeY ) vals = dict( hashkey=resource.hashkey, name=resource.name, type=resource.type, settings=resource.settings, owner_scope=res_scope, owner_hashkey=owner_key, views=[v.hashkey for v in resource.views], permissions=permissions, current_view=resource.current_view, parents=[r.hashkey for r in resource.parents], layout=layout, ) if find_related: related = [] context, mod = get_context_for_scope(scope, hashkey) manager = ResourceManager(context) for r in resource.related: if manager.check_permissions(r, "view"): related.append(r) vals["related"] = [self.convert(scope, hashkey, r, find_related=find_related) for r in related] return vals
def get(self, scope, hashkey, resource_hashkey): context, mod = get_context_for_scope(scope, hashkey) manager = ResourceManager(context) model, model_settings = manager.get_resource(resource_hashkey) return self.convert(scope, hashkey, model, find_related=True)
def patch(self, scope, hashkey, resource_hashkey): settings = get_data() context, mod = get_context_for_scope(scope, hashkey) manager = ResourceManager(context) model = manager.update_resource(resource_hashkey, settings) return self.convert(scope, hashkey, model)