Beispiel #1
0
def download(request):
    suid = request.matchdict['suid']
    rev = request.matchdict.get('rev')
    root = get_root()
    config = solr_config(root)
    query = Term('suid', suid)
    if rev:
        query = query & Term('revision', rev)
    else:
        query = query & Term('state', 'active')
    query = query & Term('visibility', 'anonymous')
    md = Metadata(config, SOLR_FIELDS)
    fl = 'effective,expires,physical_path,mimetype,filename'
    result = md.query(q=query, fl=fl)
    if len(result) != 1:
        raise MDBError(u'Dataset not found in SOLR. Query: %s' % query)
    md = result[0]
    if not chk_publication(md):
        raise MDBError(u'Item not effective or already expired')
    physical_path = u'/xsendfile%s.binary' % md['physical_path']
    response = Response()
    response.content_type = md['mimetype']
    response.content_disposition = \
        'attachment; filename=%s' % md['filename']
    response.headers.add('X-Accel-Redirect', physical_path)
    return response
Beispiel #2
0
def info(request):
    root = get_root()
    config = solr_config(root)
    uid = request.matchdict['uid']
    query = Term('uid', uid) & Term('visibility', 'anonymous')
    md = Metadata(config, SOLR_FIELDS)
    result = md.query(q=query, fl=revision_info_fl)
    if len(result) != 1:
        return {}
    md = result[0]
    if not chk_publication(md):
        return {}
    return revision_info(md)
Beispiel #3
0
def access(request):
    root = get_root()
    config = solr_config(root)
    uid = request.matchdict['uid']
    query = Term('uid', uid) & Term('visibility', 'anonymous')
    md = Metadata(config, SOLR_FIELDS)
    fl = 'effective,expires'
    result = md.query(q=query, fl=fl)
    if len(result) != 1:
        return False
    md = result[0]
    if not chk_publication(md):
        return False
    return True
Beispiel #4
0
 def relations_vocab(self):
     """XXX: move relations lookup
     """
     vocab = list()
     relations = self.model.metadata.relations
     if not relations:
         return vocab
     md = SolrMetadata(solr_config(self.model), SOLR_FIELDS)
     for relation in relations:
         rel = md.query(q='uid:%s' % relation, fl='title')
         if rel and rel[0].get('title'):
             title = rel[0].title
         else:
             # happens if relation is not found in solr
             title = relation
         vocab.append((relation, title))
     return vocab
Beispiel #5
0
 def relations(self):
     """XXX: move relations lookup
     """
     relations = self.model.metadata.relations
     ret = list()
     if not relations:
         return ret
     query = Term('uid', relations[0])
     for rel in relations[1:]:
         query = query | Term('uid', rel)
     md = SolrMetadata(solr_config(self.model), SOLR_FIELDS)
     for relmd in md.query(q=query, fl='title,path'):
         ret.append({
             'target': '%s/%s' % (self.request.application_url, relmd.path),
             'title': relmd.title,
         })
     return ret