def files_dedupe( request, repo, org, cid, eid ): git_name = request.session.get('git_name') git_mail = request.session.get('git_mail') if not (git_name and git_mail): messages.error(request, WEBUI_MESSAGES['LOGIN_REQUIRED']) entity = Entity.from_request(request) collection = entity.collection() if collection.locked(): messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_LOCKED'].format(collection.id)) return HttpResponseRedirect(collection.absolute_url()) duplicate_masters = entity.detect_file_duplicates('master') duplicate_mezzanines = entity.detect_file_duplicates('mezzanine') duplicates = duplicate_masters + duplicate_mezzanines if request.method == 'POST': form = RmDuplicatesForm(request.POST) if form.is_valid() and form.cleaned_data.get('confirmed',None) \ and (form.cleaned_data['confirmed'] == True): # remove duplicates entity.rm_file_duplicates() # update metadata files entity.write_json() entity.write_mets() updated_files = [entity.json_path, entity.mets_path,] success_msg = WEBUI_MESSAGES['VIEWS_ENT_UPDATED'] exit,status = commands.entity_update( git_name, git_mail, collection, entity, updated_files, agent=settings.AGENT ) collection.cache_delete() if exit: messages.error(request, WEBUI_MESSAGES['ERROR'].format(status)) else: # update search index try: entity.post_json(settings.DOCSTORE_HOSTS, settings.DOCSTORE_INDEX) except ConnectionError: logger.error('Could not post to Elasticsearch.') gitstatus_update.apply_async((collection.path,), countdown=2) # positive feedback messages.success(request, success_msg) return HttpResponseRedirect(entity.absolute_url()) else: data = {} form = RmDuplicatesForm() return render_to_response( 'webui/entities/files-dedupe.html', {'collection': collection, 'entity': entity, 'duplicates': duplicates, 'form': form,}, context_instance=RequestContext(request, processors=[]) )
def edit_json( request, repo, org, cid, eid ): """ NOTE: will permit editing even if entity is locked! (which you need to do sometimes). """ entity = Entity.from_request(request) collection = entity.collection() #if collection.locked(): # messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_LOCKED'].format(collection.id)) # return HttpResponseRedirect(entity.absolute_url()) #collection.repo_fetch() #if collection.repo_behind(): # messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_BEHIND'].format(collection.id)) # return HttpResponseRedirect(entity.absolute_url()) #if entity.locked(): # messages.error(request, WEBUI_MESSAGES['VIEWS_ENT_LOCKED']) # return HttpResponseRedirect(entity.absolute_url()) # if request.method == 'POST': form = JSONForm(request.POST) if form.is_valid(): git_name = request.session.get('git_name') git_mail = request.session.get('git_mail') if git_name and git_mail: json_text = form.cleaned_data['json'] fileio.write_text(json_text, entity.json_path) exit,status = commands.entity_update( git_name, git_mail, collection, entity, [entity.json_path], agent=settings.AGENT ) collection.cache_delete() if exit: messages.error(request, WEBUI_MESSAGES['ERROR'].format(status)) else: gitstatus_update.apply_async((collection.path,), countdown=2) messages.success(request, WEBUI_MESSAGES['VIEWS_ENT_UPDATED']) return HttpResponseRedirect(entity.absolute_url()) else: messages.error(request, WEBUI_MESSAGES['LOGIN_REQUIRED']) else: form = JSONForm({'json': entity.dump_json(),}) return render_to_response( 'webui/entities/edit-raw.html', {'entity': entity, 'form': form,}, context_instance=RequestContext(request, processors=[]) )
def new( request, repo, org ): """Gets new CID from workbench, creates new collection record. If it messes up, goes back to collection list. """ git_name = request.session.get('git_name') git_mail = request.session.get('git_mail') if not (git_name and git_mail): messages.error(request, WEBUI_MESSAGES['LOGIN_REQUIRED']) # get new collection ID try: collection_ids = api.collections_next(request, repo, org, 1) except Exception as e: logger.error('Could not get new collecion ID!') logger.error(str(e.args)) messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_ERR_NO_IDS']) messages.error(request, e) return HttpResponseRedirect(reverse('webui-collections')) cid = int(collection_ids[-1].split('-')[2]) # create the new collection repo collection_path = Collection.collection_path(request,repo,org,cid) # collection.json template Collection(collection_path).dump_json(path=settings.TEMPLATE_CJSON, template=True) exit,status = commands.create(git_name, git_mail, collection_path, [settings.TEMPLATE_CJSON, settings.TEMPLATE_EAD], agent=settings.AGENT) if exit: logger.error(exit) logger.error(status) messages.error(request, WEBUI_MESSAGES['ERROR'].format(status)) else: # update search index json_path = os.path.join(collection_path, 'collection.json') with open(json_path, 'r') as f: document = json.loads(f.read()) docstore.post(settings.DOCSTORE_HOSTS, settings.DOCSTORE_INDEX, document) gitstatus_update.apply_async((collection_path,), countdown=2) # positive feedback return HttpResponseRedirect( reverse('webui-collection-edit', args=[repo,org,cid]) ) # something happened... logger.error('Could not create new collecion!') messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_ERR_CREATE']) return HttpResponseRedirect(reverse('webui-collections'))
def new( request, repo, org ): """Gets new CID from workbench, creates new collection record. If it messes up, goes back to collection list. """ oidentifier = Identifier(request) git_name = request.session.get('git_name') git_mail = request.session.get('git_mail') if not (git_name and git_mail): messages.error(request, WEBUI_MESSAGES['LOGIN_REQUIRED']) ic = idservice.IDServiceClient() # resume session auth_status,auth_reason = ic.resume(request.session['idservice_token']) if auth_status != 200: request.session['idservice_username'] = None request.session['idservice_token'] = None messages.warning( request, 'Session resume failed: %s %s (%s)' % ( auth_status,auth_reason,settings.IDSERVICE_API_BASE ) ) return HttpResponseRedirect(reverse('webui-collections')) # get new collection ID http_status,http_reason,collection_id = ic.next_object_id( oidentifier, 'collection' ) if http_status not in [200,201]: err = '%s %s' % (http_status, http_reason) msg = WEBUI_MESSAGES['VIEWS_COLL_ERR_NO_IDS'] % (settings.IDSERVICE_API_BASE, err) logger.error(msg) messages.error(request, msg) return HttpResponseRedirect(reverse('webui-collections')) identifier = Identifier(id=collection_id, base_path=settings.MEDIA_BASE) # create the new collection repo collection_path = identifier.path_abs() # collection.json template fileio.write_text( Collection(collection_path).dump_json(template=True), settings.TEMPLATE_CJSON ) exit,status = commands.create( git_name, git_mail, identifier, [settings.TEMPLATE_CJSON, settings.TEMPLATE_EAD], agent=settings.AGENT ) if exit: logger.error(exit) logger.error(status) messages.error(request, WEBUI_MESSAGES['ERROR'].format(status)) else: # update search index collection = Collection.from_identifier(identifier) try: collection.post_json(settings.DOCSTORE_HOSTS, settings.DOCSTORE_INDEX) except ConnectionError: logger.error('Could not post to Elasticsearch.') gitstatus_update.apply_async((collection_path,), countdown=2) # positive feedback return HttpResponseRedirect( reverse('webui-collection-edit', args=collection.idparts) ) # something happened... logger.error('Could not create new collecion!') messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_ERR_CREATE']) return HttpResponseRedirect(reverse('webui-collections'))
def new( request, repo, org, cid ): """Gets new EID from workbench, creates new entity record. If it messes up, goes back to collection. """ git_name = request.session.get('git_name') git_mail = request.session.get('git_mail') if not (git_name and git_mail): messages.error(request, WEBUI_MESSAGES['LOGIN_REQUIRED']) collection = Collection.from_request(request) if collection.locked(): messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_LOCKED'].format(collection.id)) return HttpResponseRedirect(collection.absolute_url()) collection.repo_fetch() if collection.repo_behind(): messages.error(request, WEBUI_MESSAGES['VIEWS_COLL_BEHIND'].format(collection.id)) return HttpResponseRedirect(collection.absolute_url()) ic = idservice.IDServiceClient() # resume session auth_status,auth_reason = ic.resume(request.session['idservice_token']) if auth_status != 200: request.session['idservice_username'] = None request.session['idservice_token'] = None messages.warning( request, 'Session resume failed: %s %s (%s)' % ( auth_status,auth_reason,settings.IDSERVICE_API_BASE ) ) return HttpResponseRedirect(collection.absolute_url()) # get new entity ID http_status,http_reason,new_entity_id = ic.next_object_id( collection.identifier, 'entity' ) if http_status not in [200,201]: err = '%s %s' % (http_status, http_reason) msg = WEBUI_MESSAGES['VIEWS_ENT_ERR_NO_IDS'] % (settings.IDSERVICE_API_BASE, err) logger.error(msg) messages.error(request, msg) return HttpResponseRedirect(collection.absolute_url()) eidentifier = Identifier(id=new_entity_id) # create new entity entity_path = eidentifier.path_abs() # write entity.json template to entity location fileio.write_text( Entity(entity_path).dump_json(template=True), settings.TEMPLATE_EJSON ) # commit files exit,status = commands.entity_create( git_name, git_mail, collection, eidentifier, [collection.json_path_rel, collection.ead_path_rel], [settings.TEMPLATE_EJSON, settings.TEMPLATE_METS], agent=settings.AGENT ) # load Entity object, inherit values from parent, write back to file entity = Entity.from_identifier(eidentifier) entity.inherit(collection) entity.write_json() updated_files = [entity.json_path] exit,status = commands.entity_update( git_name, git_mail, collection, entity, updated_files, agent=settings.AGENT ) collection.cache_delete() if exit: logger.error(exit) logger.error(status) messages.error(request, WEBUI_MESSAGES['ERROR'].format(status)) else: # update search index try: entity.post_json(settings.DOCSTORE_HOSTS, settings.DOCSTORE_INDEX) except ConnectionError: logger.error('Could not post to Elasticsearch.') gitstatus_update.apply_async((collection.path,), countdown=2) # positive feedback return HttpResponseRedirect(reverse('webui-entity-edit', args=entity.idparts)) # something happened... logger.error('Could not create new entity!') messages.error(request, WEBUI_MESSAGES['VIEWS_ENT_ERR_CREATE']) return HttpResponseRedirect(collection.absolute_url())