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()
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()
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()
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)
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)
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(): 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 _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)))