def should_create_new_export(xform, export_type, options, request=None): """ Function that determines whether to create a new export. param: xform param: export_type param: options: additional parameters required for the lookup. remove_group_name: boolean flag group_delimiter: "/" or "." with "/" as the default split_select_multiples: boolean flag binary_select_multiples: boolean flag index_tag: ('[', ']') or ('_', '_') params: request: Get params are used to determine if new export is required """ split_select_multiples = options.get('split_select_multiples', True) if getattr(settings, 'SHOULD_ALWAYS_CREATE_NEW_EXPORT', False): return True if (request and (frozenset(list(request.GET)) & frozenset(['start', 'end', 'data_id']))) or\ not split_select_multiples: return True export_options_kwargs = get_export_options_query_kwargs(options) export_query = Export.objects.filter(xform=xform, export_type=export_type, **export_options_kwargs) if options.get(EXPORT_QUERY_KEY) is None: export_query = export_query.exclude(options__has_key=EXPORT_QUERY_KEY) if export_query.count() == 0 or\ Export.exports_outdated(xform, export_type, options=options): return True return False
def should_create_new_export(xform, export_type): # TODO resolve circular import from onadata.apps.viewer.models.export import Export if Export.objects.filter( xform=xform, export_type=export_type).count() == 0\ or Export.exports_outdated(xform, export_type=export_type): return True return False
def should_create_new_export(xform, export_type): # TODO resolve circular import from onadata.apps.viewer.models.export import Export if Export.objects.filter( xform=xform, export_type=export_type).count() == 0\ or Export.exports_outdated(xform, export_type=export_type): return True return False
def test_last_submission_time_on_export(self): self._publish_transportation_form() self._submit_transport_instance() # create export generate_export( Export.XLS_EXPORT, 'xls', self.user.username, self.xform.id_string) num_exports = Export.objects.filter( xform=self.xform, export_type=Export.XLS_EXPORT).count() # check that our function knows there are no more submissions self.assertFalse( Export.exports_outdated(xform=self.xform, export_type=Export.XLS_EXPORT)) sleep(1) # force new last submission date on xform last_submission = self.xform.instances.order_by('-date_created')[0] last_submission.date_created += datetime.timedelta(hours=1) last_submission.save() # check that our function knows data has changed self.assertTrue( Export.exports_outdated(xform=self.xform, export_type=Export.XLS_EXPORT)) # check that requesting list url will generate a new export export_list_url = reverse(export_list, kwargs={ 'username': self.user.username, 'id_string': self.xform.id_string, 'export_type': Export.XLS_EXPORT }) self.client.get(export_list_url) self.assertEqual( Export.objects.filter(xform=self.xform, export_type=Export.XLS_EXPORT).count(), num_exports + 1) # make sure another export type causes auto-generation num_exports = Export.objects.filter( xform=self.xform, export_type=Export.CSV_EXPORT).count() export_list_url = reverse(export_list, kwargs={ 'username': self.user.username, 'id_string': self.xform.id_string, 'export_type': Export.CSV_EXPORT }) self.client.get(export_list_url) self.assertEqual( Export.objects.filter(xform=self.xform, export_type=Export.CSV_EXPORT).count(), num_exports + 1)
def test_exports_outdated_considers_pending_exports(self): self._publish_transportation_form() self._submit_transport_instance() # create a pending export export = Export.objects.create( xform=self.xform, export_type=Export.XLS_EXPORT, internal_status=Export.PENDING) self.assertFalse( Export.exports_outdated(self.xform, export.export_type))
def test_exports_outdated_doesnt_consider_failed_exports(self): self._publish_transportation_form() self._submit_transport_instance() # create a bad export export = Export.objects.create( xform=self.xform, export_type=Export.XLS_EXPORT, internal_status=Export.FAILED) self.assertTrue( Export.exports_outdated(self.xform, export.export_type))
def test_last_submission_time_empty(self): self._publish_transportation_form() self._submit_transport_instance() # create export export = generate_export(Export.XLS_EXPORT, 'xls', self.user.username, self.xform.id_string) # set time of last submission to None export.time_of_last_submission = None export.save() self.assertTrue(Export.exports_outdated(xform=self.xform, export_type=Export.XLS_EXPORT))
def should_create_new_export(xform, export_type, options, request=None): """ Function that determines whether to create a new export. param: xform param: export_type param: options: additional parameters required for the lookup. remove_group_name: boolean flag group_delimiter: "/" or "." with "/" as the default split_select_multiples: boolean flag binary_select_multiples: boolean flag index_tag: ('[', ']') or ('_', '_') params: request: Get params are used to determine if new export is required """ split_select_multiples = options.get('split_select_multiples', True) if getattr(settings, 'SHOULD_ALWAYS_CREATE_NEW_EXPORT', False): return True if (request and (frozenset(list(request.GET)) & frozenset(['start', 'end', 'data_id']))) or\ not split_select_multiples: return True export_options_kwargs = get_export_options_query_kwargs(options) export_query = Export.objects.filter( xform=xform, export_type=export_type, **export_options_kwargs ) if options.get(EXPORT_QUERY_KEY) is None: export_query = export_query.exclude(options__has_key=EXPORT_QUERY_KEY) if export_query.count() == 0 or\ Export.exports_outdated(xform, export_type, options=options): return True return False
def should_create_new_export(xform, export_type): if Export.objects.filter( xform=xform, export_type=export_type).count() == 0\ or Export.exports_outdated(xform, export_type=export_type): return True return False
def should_create_new_export(xform, export_type): if Export.objects.filter( xform=xform, export_type=export_type).count() == 0\ or Export.exports_outdated(xform, export_type=export_type): return True return False
def should_create_new_export(xform, export_type): if (not Export.objects.filter(xform=xform, export_type=export_type).exists() or Export.exports_outdated(xform, export_type=export_type)): return True return False