Ejemplo n.º 1
0
 def _to_python(self, value, state):
     if isinstance(value, dict):
         value = value.get('id')
     entity = Entity.by_id(value)
     if entity is None:
         entity = Entity.by_name(state.dataset, value)
     if entity is None:
         raise Invalid('Entity does not exist: %s' % value, value, None)
     if entity == state.entity:
         return None
     if entity.dataset != state.dataset:
         raise Invalid('Entity belongs to a different dataset.', value,
                       None)
     return entity
Ejemplo n.º 2
0
def import_upload(upload_id, account_id, mapping):
    upload = Upload.all().filter_by(id=upload_id).first()
    account = Account.by_id(account_id)
    mapped = mapping['columns'].values()

    rows = [apply_mapping(r, mapping) for r in upload.tab.dict]
    # put aliases second.
    rows = sorted(rows, key=lambda r: 2 if r.get('canonical') else 1)

    for i, row in enumerate(rows):
        try:
            entity = None
            if row.get('id'):
                entity = Entity.by_id(row.get('id'))
            if entity is None:
                entity = Entity.by_name(upload.dataset, row.get('name'))
            if entity is None:
                entity = Entity.create(upload.dataset, row, account)

            # restore some defaults:
            if entity.canonical_id and 'canonical' not in mapped:
                row['canonical'] = entity.canonical_id
            if entity.invalid and 'invalid' not in mapped:
                row['invalid'] = entity.invalid

            if entity.attributes:
                attributes = entity.attributes.copy()
            else:
                attributes = {}
            attributes.update(row['attributes'])
            row['attributes'] = attributes

            entity.update(row, account)
            print(entity)
            if i % 100 == 0:
                db.session.commit()
                logging.debug('Commit')
        except Invalid as inv:
            logging.warning('Exception during import: {}'.format(str(inv)))
    db.session.commit()
    logging.info('Import Completed')
Ejemplo n.º 3
0
def import_upload(upload_id, account_id, mapping):
    upload = Upload.all().filter_by(id=upload_id).first()
    account = Account.by_id(account_id)
    mapped = mapping['columns'].values()

    rows = [apply_mapping(r, mapping) for r in upload.tab.dict]
    # put aliases second.
    rows = sorted(rows, key=lambda r: 2 if r.get('canonical') else 1)

    for i, row in enumerate(rows):
        try:
            entity = None
            if row.get('id'):
                entity = Entity.by_id(row.get('id'))
            if entity is None:
                entity = Entity.by_name(upload.dataset, row.get('name'))
            if entity is None:
                entity = Entity.create(upload.dataset, row, account)

            # restore some defaults: 
            if entity.canonical_id and 'canonical' not in mapped:
                row['canonical'] = entity.canonical_id
            if entity.invalid and 'invalid' not in mapped:
                row['invalid'] = entity.invalid 

            if entity.attributes:
                attributes = entity.attributes.copy()
            else:
                attributes = {}
            attributes.update(row['attributes'])
            row['attributes'] = attributes

            entity.update(row, account)
            print entity
            if i % 100 == 0:
                print 'COMMIT'
                db.session.commit()
        except Invalid, inv:
            # TODO: logging. 
            print inv
Ejemplo n.º 4
0
def update(id):
    entity = Entity.by_id(id)
    authz.require(authz.dataset_edit(entity.dataset))
    entity.update(request_data(), request.account)
    db.session.commit()
    return redirect(url_for('.view', id=entity.id))
Ejemplo n.º 5
0
def aliases(id):
    entity = Entity.by_id(id)
    return query_pager(entity.aliases, id=id)
Ejemplo n.º 6
0
def view(id):
    entity = object_or_404(Entity.by_id(id))
    return jsonify(entity)
Ejemplo n.º 7
0
def aliases(id):
    entity = Entity.by_id(id)
    pager = Pager(entity.aliases, id=id)
    return jsonify(pager.to_dict())
Ejemplo n.º 8
0
def update(id):
    entity = Entity.by_id(id)
    authz.require(authz.dataset_edit(entity.dataset))
    entity.update(request_data(), request.account)
    db.session.commit()
    return redirect(url_for('.view', id=entity.id))
Ejemplo n.º 9
0
def aliases(id):
    entity = Entity.by_id(id)
    return query_pager(entity.aliases, id=id)
Ejemplo n.º 10
0
def view(id):
    entity = object_or_404(Entity.by_id(id))
    return jsonify(entity)
Ejemplo n.º 11
0
def view(id):
    entity = Entity.by_id(id)
    return jsonify(entity)
Ejemplo n.º 12
0
def aliases(id):
    entity = Entity.by_id(id)
    pager = Pager(entity.aliases, id=id)
    return jsonify(pager.to_dict())