def save_deposition_file(deposition, filename, file_path): """Save files in Deposition.""" with open(file_path) as fd: df = DepositionFile(backend=DepositionStorage(deposition.id)) if df.save(fd, filename=filename): deposition.add_file(df) deposition.save()
def add_file_by_name(model, file_path, filename=None): """Save given file to storage and attach to object, return new path.""" from inspire.modules.workflows.models import PayloadStorage from invenio_deposit.models import ( Deposition, Agent, DepositionDraft, SubmissionInformationPackage, DepositionStorage, DepositionFile, FilenameAlreadyExists, ) filename = filename or os.path.basename(file_path) try: with open(file_path) as fd: file_object = DepositionFile(backend=PayloadStorage(model.id)) if file_object.save(fd, filename=filename): super(type(model), model).add_file(file_object) model.save() except FilenameAlreadyExists as e: file_object.delete() raise e if file_object.is_local(): return file_object.get_syspath() else: return file_object.get_url()
def add_file_by_name(model, file_path, filename=None): """Save given file to storage and attach to object, return new path.""" from inspirehep.modules.workflows.models import PayloadStorage from invenio_deposit.models import ( DepositionFile, FilenameAlreadyExists, ) filename = filename or os.path.basename(file_path) try: with open(file_path) as fd: file_object = DepositionFile(backend=PayloadStorage(model.id)) if file_object.save(fd, filename=filename): super(type(model), model).add_file(file_object) model.update() except FilenameAlreadyExists as e: file_object.delete() raise e if file_object.is_local(): return file_object.get_syspath() else: return file_object.get_url()
def __setstate__(self, state): """Deserialize deposition from state stored in BibWorkflowObject.""" self.type = self.get_type(state['type']) # FIXME only difference self.title = state['title'] self.files = [ DepositionFile.factory( f_state, uuid=f_state['id'], backend=DepositionStorage(self.id), ) for f_state in state['files'] ] self.drafts = dict( [(d_id, DepositionDraft.factory(d_state, d_id, deposition_ref=self)) for d_id, d_state in state['drafts'].items()] ) self.sips = [ SubmissionInformationPackage.factory(s_state, uuid=s_state['id']) for s_state in state.get('sips', []) ]