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 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 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 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 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))