Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
 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))
Ejemplo n.º 3
0
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