Example #1
0
    def _run_tasks(obj, dummy_eng):
        d = Deposition(obj)
        sip = d.get_latest_sip(sealed=True)

        recid = sip.metadata['recid']
        communities = sip.metadata.get('provisional_communities', [])

        common_args = ['-P5', ]
        sequenceid = getattr(d.workflow_object, 'task_sequence_id', None)
        if sequenceid:
            common_args += ['-I', str(sequenceid)]

        if update:
            tasklet_name = 'bst_openaire_update_upload'
        else:
            tasklet_name = 'bst_openaire_new_upload'

        task_id = task_low_level_submission(
            'bibtasklet', 'webdeposit', '-T', tasklet_name,
            '--argument', 'recid=%s' % recid, *common_args
        )
        sip.task_ids.append(task_id)

        for c in communities:
            task_id = task_low_level_submission(
                'webcoll', 'webdeposit', '-c', 'provisional-user-%s' % c,
                *common_args
            )
            sip.task_ids.append(task_id)
        d.update()
Example #2
0
    def _run_tasks(obj, dummy_eng):
        d = Deposition(obj)
        sip = d.get_latest_sip(sealed=True)

        recid = sip.metadata['recid']
        communities = sip.metadata.get('provisional_communities', [])

        common_args = [
            '-P5',
        ]
        sequenceid = getattr(d.workflow_object, 'task_sequence_id', None)
        if sequenceid:
            common_args += ['-I', str(sequenceid)]

        if update:
            tasklet_name = 'bst_openaire_update_upload'
        else:
            tasklet_name = 'bst_openaire_new_upload'

        task_id = task_low_level_submission('bibtasklet', 'webdeposit', '-T',
                                            tasklet_name, '--argument',
                                            'recid=%s' % recid, *common_args)
        sip.task_ids.append(task_id)

        for c in communities:
            task_id = task_low_level_submission('webcoll', 'webdeposit', '-c',
                                                'provisional-user-%s' % c,
                                                *common_args)
            sip.task_ids.append(task_id)
        d.update()
Example #3
0
    def _reserved_recid(obj, dummy_eng):
        d = Deposition(obj)
        sip = d.get_latest_sip(sealed=False)
        reserved_doi = sip.metadata.get('prereserve_doi', None)

        if reserved_doi and reserved_doi['recid']:
            sip.metadata['recid'] = reserved_doi['recid']

        d.update()
Example #4
0
    def _reserved_recid(obj, dummy_eng):
        d = Deposition(obj)
        sip = d.get_latest_sip(sealed=False)
        reserved_doi = sip.metadata.get('prereserve_doi', None)

        if reserved_doi and reserved_doi['recid']:
            sip.metadata['recid'] = reserved_doi['recid']

        d.update()
Example #5
0
    def render_completed(cls, d):
        """
        Render page when deposition was successfully completed
        """
        ctx = dict(
            deposition=d,
            deposition_type=(None if d.type.is_default() else
                             d.type.get_identifier()),
            uuid=d.id,
            my_depositions=Deposition.get_depositions(current_user,
                                                      type=d.type),
            sip=d.get_latest_sip(),
            format_record=format_record,
        )

        return render_template('webdeposit_completed.html', **ctx)
Example #6
0
    def render_completed(cls, d):
        """
        Render page when deposition was successfully completed
        """
        ctx = dict(
            deposition=d,
            deposition_type=(
                None if d.type.is_default() else d.type.get_identifier()
            ),
            uuid=d.id,
            my_depositions=Deposition.get_depositions(
                current_user, type=d.type
            ),
            sip=d.get_latest_sip(),
            format_record=format_record,
        )

        return render_template('webdeposit_completed.html', **ctx)
Example #7
0
 def _api_validate_files(obj, eng):
     if getattr(request, 'is_api_request', False):
         d = Deposition(obj)
         if len(d.files) < 1:
             d.set_render_context(
                 dict(
                     message="Bad request",
                     status=400,
                     errors=[
                         dict(message="Minimum one file must be provided.",
                              code=error_codes['validation_error'])
                     ],
                 ))
             d.update()
             eng.halt("API: No files provided")
         else:
             # Mark all drafts as completed
             for draft in d.drafts.values():
                 draft.complete()
             d.update()
Example #8
0
def do_upgrade():
    from invenio.bibworkflow_model import BibWorkflowObject
    from invenio.webdeposit_models import Deposition

    ids = []
    ids_wf = []

    for b in BibWorkflowObject.query.all():
        d = Deposition.get(b.id)
        if d.submitted and (d.workflow_object.version != 1
                            or d.workflow_object.workflow.status != 5):
            ids.append(b.id)
            ids_wf.append(d.workflow_object.id_workflow)

    ids = ", ".join(str(o) for o in ids)
    ids_wf = ", ".join("'%s'" % o for o in ids_wf)

    run_sql("UPDATE bwlOBJECT SET version=1 WHERE id in (%s)" % ids)
    run_sql("UPDATE bwlWORKFLOW SET status=5 WHERE uuid in (%s)" % ids_wf)
def do_upgrade():
    from invenio.bibworkflow_model import BibWorkflowObject
    from invenio.webdeposit_models import Deposition

    ids = []
    ids_wf = []

    for b in BibWorkflowObject.query.all():
        d = Deposition.get(b.id)
        if d.submitted and (d.workflow_object.version != 1 or
           d.workflow_object.workflow.status != 5):
            ids.append(b.id)
            ids_wf.append(d.workflow_object.id_workflow)

    ids = ", ".join(str(o) for o in ids)
    ids_wf = ", ".join("'%s'" % o for o in ids_wf)

    run_sql("UPDATE bwlOBJECT SET version=1 WHERE id in (%s)" % ids)
    run_sql("UPDATE bwlWORKFLOW SET status=5 WHERE uuid in (%s)" % ids_wf)
Example #10
0
 def _api_validate_files(obj, eng):
     if getattr(request, 'is_api_request', False):
         d = Deposition(obj)
         if len(d.files) < 1:
             d.set_render_context(dict(
                 message="Bad request",
                 status=400,
                 errors=[dict(
                     message="Minimum one file must be provided.",
                     code=error_codes['validation_error']
                 )],
             ))
             d.update()
             eng.halt("API: No files provided")
         else:
             # Mark all drafts as completed
             for draft in d.drafts.values():
                 draft.complete()
             d.update()
def do_upgrade():
    """ Implement your upgrades here  """
    #run_sql("DELETE FROM bwlOBJECT")
    #run_sql("DELETE FROM bwlOBJECTLOGGING")
    #run_sql("DELETE FROM bwlWORKFLOW")
    #run_sql("DELETE FROM bwlWORKFLOWLOGGING")
    #os.system("rm -Rf /home/lnielsen/envs/zenodonext/var/data/deposit/storage/*")

    logger = logging.getLogger('invenio_upgrader')
    from invenio.webdeposit_models import Deposition, DepositionDraft, \
        DepositionType, DepositionFile
    from invenio.webdeposit_storage import DepositionStorage
    from invenio.webdeposit_load_forms import forms
    from invenio.bibworkflow_config import CFG_OBJECT_VERSION, CFG_WORKFLOW_STATUS

    default_type = DepositionType.get_default()


    for row in run_sql("SELECT publicationid, projectid, uid, id_bibrec FROM eupublication"):
        try:
            logger.info("Migrating publication id %s from user %s..." % (row[0], row[2]))
            old = OldDeposition(*row)
            dep = Deposition(None, user_id=old.user_id)

            # Add files
            backend = DepositionStorage(dep.id)
            for f in old.get_files().values():
                 fp = open(f, 'r')
                 df = DepositionFile(backend=backend)
                 df.save(fp, filename=os.path.basename(f))
                 fp.close()
                 dep.add_file(df)

            metadata = old.get_metadata()
            is_submitted = metadata['__status__'] == 'submitted'
            modified = datetime.fromtimestamp(metadata['__md__'])
            created = datetime.fromtimestamp(metadata['__cd__'])

            dep.workflow_object.created = created
            dep.workflow_object.modified = modified

            # Add draftg
            draft = dep.get_or_create_draft('_default', form_class=forms['ZenodoForm'])
            draft.validate = True

            m = map_metadata(metadata)
            recid = m.get('recid', None)
            draft.process(m, complete_form=True)

            if is_submitted:
                if not recid:
                    raise RuntimeError("Something is wrong")
                draft.completed = True
                dep.workflow_object.version = CFG_OBJECT_VERSION.FINAL

                sip = dep.create_sip()
                sip.metadata['recid'] = recid

                sip.metadata['fft'] = sip.metadata['files']
                del sip.metadata['files']

                sip.package = old.get_marcxml()
                sip.seal()

            dep.save()

            dep.workflow_object.created = created
            dep.workflow_object.modified = modified

            db.session.add(dep.workflow_object)
            db.session.commit()
        except Exception, e:
            import traceback
            warnings.warn("Failed to migrate %s (from user %s): %s" % (row[0], row[2], traceback.format_exc(e)))
def do_upgrade():
    """ Implement your upgrades here  """
    #run_sql("DELETE FROM bwlOBJECT")
    #run_sql("DELETE FROM bwlOBJECTLOGGING")
    #run_sql("DELETE FROM bwlWORKFLOW")
    #run_sql("DELETE FROM bwlWORKFLOWLOGGING")
    #os.system("rm -Rf /home/lnielsen/envs/zenodonext/var/data/deposit/storage/*")

    logger = logging.getLogger('invenio_upgrader')
    from invenio.webdeposit_models import Deposition, DepositionDraft, \
        DepositionType, DepositionFile
    from invenio.webdeposit_storage import DepositionStorage
    from invenio.webdeposit_load_forms import forms
    from invenio.bibworkflow_config import CFG_OBJECT_VERSION, CFG_WORKFLOW_STATUS

    default_type = DepositionType.get_default()


    for row in run_sql("SELECT publicationid, projectid, uid, id_bibrec FROM eupublication"):
        try:
            logger.info("Migrating publication id %s from user %s..." % (row[0], row[2]))
            old = OldDeposition(*row)
            dep = Deposition(None, user_id=old.user_id)

            # Add files
            backend = DepositionStorage(dep.id)
            for f in old.get_files().values():
                 fp = open(f, 'r')
                 df = DepositionFile(backend=backend)
                 df.save(fp, filename=os.path.basename(f))
                 fp.close()
                 dep.add_file(df)

            metadata = old.get_metadata()
            is_submitted = metadata['__status__'] == 'submitted'
            modified = datetime.fromtimestamp(metadata['__md__'])
            created = datetime.fromtimestamp(metadata['__cd__'])

            dep.workflow_object.created = created
            dep.workflow_object.modified = modified

            # Add draftg
            draft = dep.get_or_create_draft('_default', form_class=forms['ZenodoForm'])
            draft.validate = True

            m = map_metadata(metadata)
            recid = m.get('recid', None)
            draft.process(m, complete_form=True)

            if is_submitted:
                if not recid:
                    raise RuntimeError("Something is wrong")
                draft.completed = True
                dep.workflow_object.version = CFG_OBJECT_VERSION.FINAL

                sip = dep.create_sip()
                sip.metadata['recid'] = recid

                sip.metadata['fft'] = sip.metadata['files']
                del sip.metadata['files']

                sip.package = old.get_marcxml()
                sip.seal()

            dep.save()

            dep.workflow_object.created = created
            dep.workflow_object.modified = modified

            db.session.add(dep.workflow_object)
            db.session.commit()
        except Exception, e:
            import traceback
            warnings.warn("Failed to migrate %s (from user %s): %s" % (row[0], row[2], traceback.format_exc(e)))