def resource(request, ref=None): saved = False # set saved to false until post is successful uri = Namespace("http://data.library.oregonstate.edu/person/")[ref] data = '' # deal with updates if this is a form submit if request.method == 'POST': # get data to delete resource = queryManager.describe(uri) try: resource = resource except: resource = {} # get form data and put it in a dict resForm = ResourceForm(request.POST) VariantFormSet = formset_factory(VariantForm) varForm = VariantFormSet(request.POST) if resForm.is_valid() and varForm.is_valid(): data = { 'res': resForm.cleaned_data, 'var': varForm.cleaned_data } saved = processForm(uri, data, resource) # if the uri exists, try to describe it and build an edit form # retrieving data again if we just processed a form resource = queryManager.describe(uri) if resource: forms = buildForm(resource) else: #TODO: return a useful error return HttpResponse("resource not found", status=404) return render_to_response("resource.tpl", {'uri': str(uri), 'short': uri.split('/')[-1], 'res': resource, 'form': forms['form'], 'variants': forms['variants'], 'saved': saved, 'data': resource})
def new(request, ref=None): uriNeeded = True while uriNeeded == True: # assign an identifier identifier = pynoid.mint('zeek', random.randint(0, 100000)) uri = Namespace("http://data.library.oregonstate.edu/person/")[identifier] uriNeeded = queryManager.ask(uri) # if this identifier is already in use, let's get another one forms = buildForm() return render_to_response("resource.tpl", {'uri': str(uri), 'short': uri.split('/')[-1], 'res': {}, 'form': forms['form'], 'variants': forms['variants']})
def merge(request, uriMerge=None, uriTarget=None): uriMerge = Namespace("http://data.library.oregonstate.edu/person/")[uriMerge] uriTarget = Namespace("http://data.library.oregonstate.edu/person/")[uriTarget] merge = queryManager.describe(uriMerge) target = queryManager.describe(uriTarget) if request.method == 'POST': sameAs = "INSERT DATA {<" + uriMerge + "> owl:sameAs <" + uriTarget + "> .}" queryManager.update(sameAs) # get form data and put it in a dict resForm = ResourceForm(request.POST) VariantFormSet = formset_factory(VariantForm) varForm = VariantFormSet(request.POST) if resForm.is_valid() and varForm.is_valid(): data = { 'res': resForm.cleaned_data, 'var': varForm.cleaned_data } saved = processForm(uriTarget, data, resource) # these labels will be merged into the target as skos:hiddenLabel #TODO: exclude duplicate names mergeLabels = [str(ns['skos']['prefLabel']), str(ns['skos']['altLabel']), str(ns['skos']['hiddenLabel']), str(ns['foaf']['name'])] for field in merge: if field in mergeLabels: for value in merge[field]: if str(ns['skos']['hiddenLabel']) in target: target[str(ns['skos']['hiddenLabel'])].append(value) else: target[str(ns['skos']['hiddenLabel'])] = merge[field] #TODO: mark old record for deletion # do this with a hidden form? forms = buildForm(target) data = target return render_to_response("merge.tpl", {'uriMerge': str(uriMerge), 'uri': str(uriTarget), 'mergeShort': uriMerge.split('/')[-1], 'short': uriTarget.split('/')[-1], 'res': target, 'form': forms['form'], 'variants': forms['variants']})