Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 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))
Exemplo n.º 6
0
 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))
Exemplo n.º 7
0
 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))
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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
Exemplo n.º 11
0
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