Beispiel #1
0
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()
Beispiel #5
0
    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()