Ejemplo n.º 1
0
def load_submission(submission_id: Optional[int]) \
        -> Tuple[events.domain.Submission, List[events.domain.Event]]:
    """
    Load a submission by ID.

    Parameters
    ----------
    submission_id : int

    Returns
    -------
    :class:`events.domain.Submission`

    Raises
    ------
    :class:`werkzeug.exceptions.NotFound`
        Raised when there is no submission with the specified ID.

    """
    if submission_id is None:
        logger.debug('No submission ID')
        raise NotFound('No such submission.')

    g = get_application_global()
    if g is None or f'submission_{submission_id}' not in g:
        try:
            submission, submission_events = events.load(submission_id)
        except events.exceptions.NoSuchSubmission as e:
            raise NotFound('No such submission.') from e
        if g is not None:
            setattr(g, f'submission_{submission_id}',
                    (submission, submission_events))
    if g is not None:
        return getattr(g, f'submission_{submission_id}')
    return submission, submission_events
Ejemplo n.º 2
0
 def current_session(cls) -> 'StreamPublisher':
     """Get/create :class:`.StreamPublisher` for this context."""
     g = get_application_global()
     if not g:
         return cls.get_session()
     elif 'stream' not in g:
         g.stream = cls.get_session()  # type: ignore
     return g.stream  # type: ignore
Ejemplo n.º 3
0
 def current_session(cls) -> 'SessionStore':
     """Get/create :class:`.SearchSession` for this context."""
     g = get_application_global()
     if not g:
         return cls.get_session()
     if 'redis' not in g:
         g.redis = cls.get_session()
     return g.redis      # type: ignore
Ejemplo n.º 4
0
def current_session() -> Session:
    """Get/create database session for this context."""
    g = get_application_global()
    if not g:
        return _get_session()
    if 'registry_data_session' not in g:
        g.registry_data_session = _get_session()
    return g.registry_data_session
Ejemplo n.º 5
0
def current_session() -> Session:
    """Get/create :class:`.Session` for this context."""
    g = get_application_global()
    if not g:
        return get_session()
    if 'classic' not in g:
        g.classic = get_session()    # type: ignore
    return g.classic     # type: ignore
Ejemplo n.º 6
0
def current_session() -> Session:
    """Get/create database session for this context."""
    g = get_application_global()
    if not g:
        return _get_session()
    if 'user_data' not in g:
        g.user_data = _get_session()
    return g.user_data
Ejemplo n.º 7
0
def current_engine() -> Engine:
    """Get/create :class:`.Engine` for this context."""
    g = get_application_global()
    if not g:
        return get_engine()
    if 'classic_engine' not in g:
        g.classic_engine = get_engine()    # type: ignore
    return g.classic_engine     # type: ignore
Ejemplo n.º 8
0
def _current_engine() -> Engine:
    """Get/create :class:`.Engine` for this context."""
    g = get_application_global()
    if not g:
        return _get_engine()
    if 'user_data_engine' not in g:
        g.user_data_engine = _get_engine()
    return g.user_data_engine
Ejemplo n.º 9
0
 def current_session(cls) -> 'PreviewStore':
     """Get the current store session for this application."""
     g = get_application_global()
     if g is None:
         return cls.get_session()
     if 'store' not in g:
         g.store = cls.get_session()
     store: PreviewStore = g.store
     return store
Ejemplo n.º 10
0
def current_session() -> AbsMetaSession:
    """Get/create :class:`.AbsMetaSession` for this context."""
    g = get_application_global()
    if not g:
        return get_session()
    if 'abs_meta' not in g:
        g.abs_meta = get_session()
    assert isinstance(g.abs_meta, AbsMetaSession)
    return g.abs_meta
Ejemplo n.º 11
0
 def current_session(cls) -> 'Storage':
     """Get the current :class:`.Storage` instance for this application."""
     g = get_application_global()
     if g is None:
         return cls.create_session()
     if 'store' not in g:
         g.store = cls.create_session()
     instance: 'Storage' = g.store
     return instance
Ejemplo n.º 12
0
def current_session() -> DocumentCacheSession:
    """Get/create :class:`.DocumentCacheSession` for this context."""
    g = get_application_global()
    if not g:
        return get_session()
    if 'doc_cache' not in g:
        g.doc_cache = get_session()
    assert isinstance(g.doc_cache, DocumentCacheSession)
    return g.doc_cache
Ejemplo n.º 13
0
def current_session() -> GrobidSession:
    """Get/create :class:`.GrobidSession` for this context."""
    g = get_application_global()
    if g is None:
        return get_session()
    if 'grobid' not in g:
        g.grobid = get_session()
    session: GrobidSession = g.grobid
    return session
Ejemplo n.º 14
0
def current_session() -> RetrievePDFSession:
    """Get/create :class:`.RetrievePDFSession` for this context."""
    g = get_application_global()
    if g is None:
        return get_session()
    if 'retrieve' not in g:
        g.retrieve = get_session()
    session: RetrievePDFSession = g.retrieve
    return session
Ejemplo n.º 15
0
def current_session() -> RefExtractSession:
    """Get/create :class:`.RefExtractSession` for this context."""
    g = get_application_global()
    if g is None:
        return get_session()
    if 'refextract' not in g:
        g.refextract = get_session()
    session: RefExtractSession = g.refextract
    return session
Ejemplo n.º 16
0
def current_session() -> CermineSession:
    """Get/create :class:`.CermineSession` for this context."""
    g = get_application_global()
    if g is None:
        return get_session()
    if 'cermine' not in g:
        g.cermine = get_session()
    session: CermineSession = g.cermine
    return session
Ejemplo n.º 17
0
def current_session() -> ScienceParseSession:
    """Get/create :class:`.ScienceParseSession` for this context."""
    g = get_application_global()
    if g is None:
        return get_session()
    if 'scienceparse' not in g:
        g.scienceparse = get_session()
    session: ScienceParseSession = g.scienceparse
    return session
Ejemplo n.º 18
0
def current_session() -> ReferenceStoreSession:
    """Get/create :class:`.ReferenceStoreSession` for this context."""
    g = get_application_global()
    if g is None:
        return get_session()
    if 'data_store' not in g:
        g.data_store = get_session()
    session: ReferenceStoreSession = g.data_store
    return session
Ejemplo n.º 19
0
def get_or_create_worker_app() -> Celery:
    """
    Get the current worker app, or create one.

    Uses the Flask application global to keep track of the worker app.
    """
    g = get_application_global()
    if not g:
        return create_worker_app()
    if 'worker' not in g:
        g.worker = create_worker_app()
    return g.worker
Ejemplo n.º 20
0
def retrieve(upload_id: int, skip_cache: bool = False) -> Optional[Upload]:
    """
    Get data about a upload.

    Parameters
    ----------
    upload_id : int
        Unique identifier for the upload.
    skip_cache : bool
        If `True`, will load fresh data regardless of what might already be
        around. Otherwise, will only load the same :class:`Upload` instance
        once.

    Returns
    -------
    :class:`.Upload`
        Data about the upload.

    Raises
    ------
    IOError
        When there is a problem querying the database.

    """
    logger.debug('Retrieve upload data from database for %s (skip_cache: %s)',
                 upload_id, skip_cache)
    # We use the application global object to create a simple cache for
    # loaded uploads. This allows us to avoid multiple queries on the same
    # state when different parts of the application need access to the same
    # upload.
    g = get_application_global()
    if g and 'uploads' not in g:
        g.uploads = {}

    if g and not skip_cache and upload_id in g.uploads:
        upload_data = g.uploads[upload_id]
    else:
        try:
            upload_data = db.session.query(DBUpload).get(upload_id)
        except OperationalError as e:
            logger.debug('Could not query database: %s', e.detail)
            raise IOError('Could not query database: %s' % e.detail) from e

        if upload_data is None:
            return None

        if g:
            g.uploads[upload_id] = upload_data  # Cache for next time.

    args = {}
    args['upload_id'] = upload_data.upload_id
    args['owner_user_id'] = upload_data.owner_user_id
    args['archive'] = upload_data.archive
    args['created_datetime'] = upload_data.created_datetime.replace(tzinfo=UTC)
    args['modified_datetime'] = upload_data.modified_datetime.replace(
        tzinfo=UTC)
    args['state'] = upload_data.state
    args['lock'] = upload_data.lock

    if upload_data.lastupload_start_datetime is not None:
        args['lastupload_start_datetime'] = \
            upload_data.lastupload_start_datetime.replace(tzinfo=UTC)

    if upload_data.lastupload_completion_datetime is not None:
        args['lastupload_completion_datetime'] = \
            upload_data.lastupload_completion_datetime.replace(tzinfo=UTC)

    if upload_data.lastupload_logs is not None:
        args['lastupload_logs'] = upload_data.lastupload_logs

    if upload_data.lastupload_file_summary is not None:
        args['lastupload_file_summary'] = upload_data.lastupload_file_summary

    if upload_data.lastupload_upload_status is not None:
        args['lastupload_upload_status'] = upload_data.lastupload_upload_status

    return Upload(**args)