def test_lookup_path(self): doc = { u'fruits': u'carrot guava', u'end': u'2015-12-17T11:09:56.000+03:00', u'start': u'2015-12-17T11:08:41.000+03:00', u'points': [ { u'points/point': u'-13.859414 27.995911 0 0' }, { u'points/point': u'-12.897489 30.27832 0 0' } ], u'_xform_id_string': u'gps_in_repeats', u'meta/instanceID': u'uuid:340f7fe7-5d8e-451b-891f-09c8b3b44679' } fruits = list(get_values_matching_key(doc, 'fruits')) self.assertEqual(fruits, ['carrot guava']) points = list(get_values_matching_key(doc, 'points/point')) self.assertEqual( points, [ u'-13.859414 27.995911 0 0', u'-12.897489 30.27832 0 0' ] )
def update_instance_attachment_tracking(instance): """ Takes an Instance object and updates attachment tracking fields """ num_media = 0 media_xpaths = instance.xform.get_media_survey_xpaths() for media_xpath in media_xpaths: num_media += len([ x for x in get_values_matching_key(instance.get_dict(), media_xpath) ]) instance.total_media = num_media instance.media_count = instance.attachments.count() instance.media_all_received = instance.media_count == \ instance.total_media instance.save( update_fields=['total_media', 'media_count', 'media_all_received'])
def _set_geom(self): xform = self.xform geo_xpaths = xform.geopoint_xpaths() doc = self.get_dict() points = [] if len(geo_xpaths): for xpath in geo_xpaths: for gps in get_values_matching_key(doc, xpath): try: geometry = [float(s) for s in gps.split()] lat, lng = geometry[0:2] points.append(Point(lng, lat)) except ValueError: return if not xform.instances_with_geopoints and len(points): xform.instances_with_geopoints = True xform.save() self.geom = GeometryCollection(points)
def _set_geom(self): # pylint: disable=no-member xform = self.xform geo_xpaths = xform.geopoint_xpaths() doc = self.get_dict() points = [] if geo_xpaths: for xpath in geo_xpaths: for gps in get_values_matching_key(doc, xpath): try: geometry = [float(s) for s in gps.split()] lat, lng = geometry[0:2] points.append(Point(lng, lat)) except ValueError: return if not xform.instances_with_geopoints and len(points): xform.instances_with_geopoints = True xform.save() self.geom = GeometryCollection(points)
def get_expected_media(self): """ Returns a list of expected media files from the submission data. """ if not hasattr(self, '_expected_media'): # pylint: disable=E1101 data = self.get_dict() media_list = [] if 'encryptedXmlFile' in data and self.xform.encrypted: media_list.append(data['encryptedXmlFile']) if 'media' in data: # pylint: disable=E1101 media_list.extend([i['media/file'] for i in data['media']]) else: media_xpaths = (self.xform.get_media_survey_xpaths() + self.xform.get_osm_survey_xpaths()) for media_xpath in media_xpaths: media_list.extend( get_values_matching_key(data, media_xpath)) # pylint: disable=attribute-defined-outside-init self._expected_media = list(set(media_list)) return self._expected_media
def get_expected_media(self): """ Returns a list of expected media files from the submission data. """ if not hasattr(self, '_expected_media'): # pylint: disable=no-member data = self.get_dict() media_list = [] if 'encryptedXmlFile' in data and self.xform.encrypted: media_list.append(data['encryptedXmlFile']) if 'media' in data: # pylint: disable=no-member media_list.extend([i['media/file'] for i in data['media']]) else: media_xpaths = (self.xform.get_media_survey_xpaths() + self.xform.get_osm_survey_xpaths()) for media_xpath in media_xpaths: media_list.extend( get_values_matching_key(data, media_xpath)) # pylint: disable=attribute-defined-outside-init self._expected_media = list(set(media_list)) return self._expected_media