def set_demographics(request, record): """ Create or update demographics on a record. **ARGUMENTS:** * *request*: The incoming Django HttpRequest object. ``request.POST`` must consist of a raw string containing the demographics content. * *record*: The :py:class:`~indivo.models.records_and_documents.Record` from which to fetch the demographics. **RETURNS:** * a :py:class:`django.http.HttpResponse` containing Metadata XML on the newly created document. TODO: what should we return now that we have a model * :http:statuscode:`400` if the new demographics content didn't validate. """ # grab existing demographics demographics = get_demographics(record) demographics_doc = (demographics.document if demographics else None) # build new demographics try: new_demographics = Demographics.from_xml(request.raw_post_data) except Exception as e: return HttpResponseBadRequest(str(e)) # this will do the right thing in terms of replacement try: new_doc = _document_create(record=record, creator=request.principal, content=request.raw_post_data, pha=None, replaces_document=demographics_doc) new_demographics.document = new_doc except: return HttpResponseBadRequest( 'Invalid document: special documents must be valid XML') # update the record pointer new_demographics.save() record.demographics = new_demographics record.save() #TODO: used to be changing the record label to reflect updated demographics _set_doc_latest(new_doc) return render_template('document', { 'record': record, 'doc': new_doc, 'pha': None })
def set_demographics(request, record): """ Create or update demographics on a record. **ARGUMENTS:** * *request*: The incoming Django HttpRequest object. ``request.POST`` must consist of a raw string containing the demographics content. * *record*: The :py:class:`~indivo.models.records_and_documents.Record` from which to fetch the demographics. **RETURNS:** * a :py:class:`django.http.HttpResponse` containing Metadata XML on the newly created document. TODO: what should we return now that we have a model * :http:statuscode:`400` if the new demographics content didn't validate. """ # grab existing demographics demographics = get_demographics(record) demographics_doc = (demographics.document if demographics else None) # build new demographics try: new_demographics = Demographics.from_xml(request.raw_post_data) except Exception as e: return HttpResponseBadRequest(str(e)) # this will do the right thing in terms of replacement try: new_doc = _document_create(record=record, creator=request.principal, content=request.raw_post_data, pha=None, replaces_document=demographics_doc) new_demographics.document = new_doc except: return HttpResponseBadRequest('Invalid document: special documents must be valid XML') # update the record pointer new_demographics.save() record.demographics = new_demographics record.save() #TODO: used to be changing the record label to reflect updated demographics _set_doc_latest(new_doc) return render_template('document', { 'record' : record, 'doc' : new_doc, 'pha' : None})
def setUp(self): super(DemographicsModelUnitTests, self).setUp() # A record self.record = self.createRecord(TEST_RECORDS, 0) # A demographics document self.document = self.createDocument(TEST_DEMOGRAPHICS_DOCS, 0, record=self.record) # demographics self.demographics = Demographics.from_xml(self.document.content) self.demographics.document = self.document self.demographics.save() self.record.demographics = self.demographics self.record.save()
def load_special_docs(self, data_dir, record, save=True): """ Load the special docs in *data_dir* into *record*. """ demographics_raw = self._get_named_doc(data_dir, 'Demographics.xml') if demographics_raw: demographics_doc = self._document_create(self.creator, demographics_raw, pha=None, record=record) demographics = Demographics.from_xml(demographics_raw) demographics.document = demographics_doc if save: # need to save demographics first for Django ORM demographics.save() record.demographics = demographics if save: record.save()
def load_special_docs(self, data_dir, record, save=True): """ Load the special docs in *data_dir* into *record*. """ demographics_raw = self._get_named_doc(data_dir, 'Demographics.xml') if demographics_raw: demographics_doc = self._document_create(self.creator, demographics_raw, pha=None, record=record) demographics = Demographics.from_xml(demographics_raw) demographics.document = demographics_doc if save: # need to save demographics first for Django ORM demographics.save() record.demographics = demographics if save: record.save()