示例#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()
示例#2
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()
示例#3
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)))