def save(self): """ Save the relation to the database. Do this only once, after all properties have been set. """ # fetch existing: q = Relation.all() q = q.filter(Relation.project == self.loader.project) q = q.filter(Relation.source == self.source.entity) q = q.filter(Relation.target == self.target.entity) for name, only_active in self.update_criteria: value = self.properties.get(name).get('value') attr = self.loader.project.get_attribute('relation', name) q = Entity._filter_property(q, [attr], value, only_active=only_active) relation = q.first() try: data = { 'project': self.loader.project, 'author': self.loader.account, 'schema': self.schemata.pop(), 'properties': self.properties, 'source': self.source.entity, 'target': self.target.entity } self._relation = relations.save(data, relation=relation) except Invalid, inv: if not self.loader.ignore_errors: raise log.warning("Validation error: %r", inv.asdict())
def save(self): """ Save the relation to the database. Do this only once, after all properties have been set. """ # fetch existing: q = Relation.all() q = q.filter(Relation.project==self.loader.project) q = q.filter(Relation.source==self.source.entity) q = q.filter(Relation.target==self.target.entity) for name, only_active in self.update_criteria: value = self.properties.get(name).get('value') q = Entity._filter_property(q, name, value, only_active=only_active) relation = q.first() try: data = { 'project': self.loader.project, 'author': self.loader.account, 'schema': self.schemata.pop(), 'properties': self.properties, 'source': self.source.entity, 'target': self.target.entity } self._relation = relations.save(data, relation=relation) except Invalid, inv: log.warning("Validation error: %r", inv)
def rebuild(): """ Execute the change processing handlers for all entities and relations currently loaded. This can be used as a housekeeping function. """ for project in Project.all(): _project_changed(project.slug, 'delete') _project_changed(project.slug, 'create') for schema in project.schemata: _schema_changed(schema.project.slug, schema.name, 'delete') _schema_changed(schema.project.slug, schema.name, 'create') eq = Entity.all().filter_by(same_as=None) eq = eq.filter_by(project=project) for i, entity in enumerate(eq): if i > 0 and i % 1000 == 0: log.info("Rebuilt: %s entities", i) _entity_changed(entity.id, 'delete') _entity_changed(entity.id, 'create') rq = Relation.all().filter_by(project=project) for i, relation in enumerate(rq): if i > 0 and i % 1000 == 0: log.info("Rebuilt: %s relation", i) _relation_changed(relation.id, 'delete') _relation_changed(relation.id, 'create')
def update(id): relation = object_or_404(Relation.by_id(id)) authz.require(authz.project_edit(relation.project)) data = request_data({'author': request.account}) relation = relations.save(data, relation=relation) db.session.commit() return jsonify(relation)
def update(id): relation = object_or_404(Relation.by_id(id)) authz.require(authz.project_edit(relation.project)) data = request_data({'author': request.account}) relation = relations.save(data, relation=relation) db.session.commit() return jsonify(relations.to_rest(relation))
def save(data, relation=None): """ Save or update a relation with the given properties. """ data = validate(data, relation) operation = 'create' if relation is None else 'update' if relation is None: relation = Relation() relation.project = data.get('project') relation.author = data.get('author') db.session.add(relation) relation.source = data.get('source') relation.target = data.get('target') relation.schema = data.get('schema') prop_names = set() for name, prop in data.get('properties').items(): prop_names.add(name) prop['name'] = name prop['author'] = data.get('author') properties_logic.save(relation, prop) for prop in relation.properties: if prop.name not in prop_names: prop.active = False db.session.flush() _relation_changed.delay(relation.id, operation) return relation
def save(data, relation=None): """ Save or update a relation with the given properties. """ data = validate(data, relation) operation = "create" if relation is None else "update" if relation is None: relation = Relation() relation.project = data.get("project") relation.author = data.get("author") db.session.add(relation) relation.source = data.get("source") relation.target = data.get("target") relation.schema = data.get("schema") prop_names = set() for name, prop in data.get("properties").items(): prop_names.add(name) prop["name"] = name prop["author"] = data.get("author") properties_logic.save(relation, prop) for prop in relation.properties: if prop.name not in prop_names: prop.active = False db.session.flush() _relation_changed.delay(relation.id, operation) return relation
def rebuild(): """ Execute the change processing handlers for all entities and relations currently loaded. This can be used as a housekeeping function. """ for i, entity in enumerate(Entity.all().filter_by(same_as=None)): if i > 0 and i % 1000 == 0: log.info("Rebuilt: %s entities", i) _entity_changed(entity.id) for i, relation in enumerate(Relation.all()): if i > 0 and i % 1000 == 0: log.info("Rebuilt: %s relation", i) _relation_changed(relation.id)
def test_entity_manage__unmanageable(self): project, permission = _project_and_permission(admin=False) entity_source = \ Entity(project=project, status=authz.PUBLISHED_THRESHOLD) entity_target = \ Entity(project=project, status=authz.PUBLISHED_THRESHOLD) db.session.add(entity_source) db.session.add(entity_target) rel = Relation(source=entity_source, target=entity_target) db.session.add(rel) db.session.commit() with self.app.test_request_context(): flask.session['id'] = 1 self.app.preprocess_request() self.assertFalse(authz.relation_manage(rel))
def index(): query = filter_query(Relation, Relation.all(), request.args) if request.args.get('source'): query = query.filter(Relation.source_id==request.args.getlist('source')[0]) if request.args.get('target'): query = query.filter(Relation.target_id==request.args.getlist('target')[0]) if request.args.get('schema'): schemata = request.args.get('schema').split(',') query = query.join(Schema) query = query.filter(Schema.name.in_(schemata)) pager = Pager(query) validate_cache(keys=pager.cache_keys()) return jsonify(pager, index=True)
def index(): query = filter_query(Relation, Relation.all(), request.args) if request.args.get('source'): query = query.filter(Relation.source_id==request.args.getlist('source')[0]) if request.args.get('target'): query = query.filter(Relation.target_id==request.args.getlist('target')[0]) if request.args.get('schema'): schemata = request.args.get('schema').split(',') query = query.join(Schema) query = query.filter(Schema.name.in_(schemata)) pager = Pager(query) conv = lambda es: [relations.to_rest_index(e) for e in es] return jsonify(pager.to_dict(conv))
def index(): query = filter_query(Relation, Relation.all(), request.args) if request.args.get('source'): query = query.filter( Relation.source_id == request.args.getlist('source')[0]) if request.args.get('target'): query = query.filter( Relation.target_id == request.args.getlist('target')[0]) if request.args.get('schema'): schemata = request.args.get('schema').split(',') query = query.join(Schema) query = query.filter(Schema.name.in_(schemata)) pager = Pager(query) conv = lambda es: [relations.to_rest_index(e) for e in es] return jsonify(pager.to_dict(conv))
def save(data, relation=None): """ Save or update a relation with the given properties. """ data = validate(data) if relation is None: relation = Relation() relation.project = data.get('project') relation.author = data.get('author') db.session.add(relation) relation.source = data.get('source') relation.target = data.get('target') relation.schema = data.get('schema') properties_logic.set_many(relation, data.get('author'), data.get('properties')) db.session.flush() _relation_changed.delay(relation.id) return relation
def delete(id): relation = object_or_404(Relation.by_id(id)) authz.require(authz.project_edit(relation.project)) relations.delete(relation) db.session.commit() raise Gone()
def view(id): relation = object_or_404(Relation.by_id(id)) authz.require(authz.relation_read(relation)) return jsonify(relation)
def view(id): relation = object_or_404(Relation.by_id(id)) authz.require(authz.project_read(relation.project)) return jsonify(relation)
def view(id): relation = object_or_404(Relation.by_id(id)) return jsonify(relations.to_rest(relation))
def relations_index(obj_id): query = Property.all() query = query.filter(Property.relation_id != None) obj = Relation.by_id(obj_id) query = query.filter_by(relation_id=obj_id) return _index(query, obj)
def view(id): relation = Relation.by_id(id) if relation is None: raise NotFound() return render_template("relation.html", relation=relation)
def view(id): relation = Relation.by_id(id) if relation is None: raise NotFound() return render_template('relation.html', relation=relation)