Ejemplo n.º 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
Ejemplo n.º 2
0
def search(request):
    root = get_root()
    config = solr_config(root)
    result = list()
    term = '%s*~' % request.matchdict['term']
    query = Term('type', 'Media') \
          & Group(Term('title', term) \
                | Term('description', term) \
                | Term('creator', term))
    fl = 'uid,title,description,repository'
    for md in Metadata(config, SOLR_FIELDS).query(q=query, fl=fl):
        suid = str(base62(int(uuid.UUID(md.uid))))
        result.append({
            'suid': suid,
            'uid': md.uid,
            'title': md.title,
            'description': md.description,
            'repository': md.repository,
            'revisions': list(),
        })
        rev_query = Term('suid', suid) & Term('visibility', 'anonymous')
        fl = revision_info_fl
        for rev_md in Metadata(config, SOLR_FIELDS).query(q=rev_query, fl=fl):
            if not chk_publication(rev_md):
                continue
            result[-1]['revisions'].append(revision_info(rev_md))
    return result
Ejemplo n.º 3
0
 def __call__(self):
     if hasattr(self, '_todelete'):
         config = solr_config(self)
         for revision in self._todelete:
             unindex_doc(config, revision)
             del self.model[revision.__name__]
         del self._todelete
     self.model()
     self.metadata()
Ejemplo n.º 4
0
def index_media(media):
    body = ' '.join([
        media.metadata.get('title', ''),
        media.metadata.get('description', ''), 
        media.metadata.get('author', ''),
    ])
    index_doc(solr_config(media),
              media,
              path='/'.join(nodepath(media)),
              repository=media.__parent__.metadata.title,
              type='Media',
              body=body)
Ejemplo n.º 5
0
 def __call__(self):
     if not hasattr(self, '_todelete'):
         return
     config = solr_config(self)
     for repository in self._todelete:
         for media in repository.values():
             unindex_doc(config, media)
             for revision in media.values():
                 unindex_doc(config, revision)
         path = os.path.join(self.dbpath, repository.__name__)
         shutil.rmtree(path)
     del self._todelete
Ejemplo n.º 6
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)
Ejemplo n.º 7
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
Ejemplo n.º 8
0
 def __call__(self):
     if hasattr(self, '_todelete'):
         config = solr_config(self)
         for media in self._todelete:
             unindex_doc(config, media)
             for revision in media.values():
                 unindex_doc(config, revision)
             path = os.path.join(self.model.__name__,
                                 *media.model.mediapath + ['media.info'])
             os.remove(path)
             del self.model[media.__name__]
         del self._todelete
     self.model()
     self.metadata()
Ejemplo n.º 9
0
def index_revision(revision):
    path = '/'.join(nodepath(revision))
    physical_path = '/'.join(nodepath(revision.model))
    try:
        size = os.path.getsize('%s.binary' % physical_path)
    except OSError:
        size = 0
    body = ' '.join([
        revision.metadata.get('title', ''),
        revision.metadata.get('description', ''), 
        revision.metadata.get('author', ''),
        revision.metadata.get('alttag', ''),
        ', '.join(revision.metadata.get('keywords', [])),
    ])
    mimetype = revision.metadata.get('mimetype', '')
    index_doc(solr_config(revision),
              revision,
              type='Revision',
              mimetype=mimetype,
              revision=revision.model.__name__,
              path=path,
              physical_path=physical_path,
              size=size,
              body=body)