Exemplo n.º 1
0
    def get_or_create(cls, change, pillow, change_meta=None):
        pillow_path = path_from_object(pillow)
        change = force_to_change(change)
        change.document
        doc_id = change.id
        try:
            error = cls.objects.get(doc_id=doc_id, pillow=pillow_path)
        except cls.DoesNotExist:
            now = datetime.utcnow()
            error = PillowError(
                doc_id=doc_id,
                pillow=pillow_path,
                date_created=now,
                date_last_attempt=now,
                date_next_attempt=now,
                change=json.dumps(change.to_dict())
            )

            if change_meta:
                date_string = change_meta.get('date')
                date = parse(date_string) if date_string is not None else None
                domains = ','.join(change_meta.get('domains'))
                error.domains = (domains[:252] + '...') if len(domains) > 255 else domains
                error.doc_type = change_meta.get('doc_type')
                error.doc_date = date

        return error
Exemplo n.º 2
0
    def get_or_create(cls, change, pillow, change_meta=None):
        change = force_to_change(change)
        doc_id = change.id
        try:
            error = cls.objects.get(doc_id=doc_id, pillow=pillow.pillow_id)
        except cls.DoesNotExist:
            now = datetime.utcnow()
            error = PillowError(
                doc_id=doc_id,
                pillow=pillow.pillow_id,
                date_created=now,
                date_last_attempt=now,
                date_next_attempt=now,
                change=json.dumps(change.to_dict())
            )

            if change_meta:
                date_string = change_meta.get('date')
                try:
                    date = parse(date_string) if date_string is not None else None
                except ValueError:
                    # date is not mission critical and can be messy data so just blank it out
                    date = None
                domains = ','.join(change_meta.get('domains'))
                error.domains = (domains[:252] + '...') if len(domains) > 255 else domains
                error.doc_type = change_meta.get('doc_type')
                error.doc_date = date

        return error
Exemplo n.º 3
0
def create_error(change, message='message', attempts=0, pillow=None, ex_class=None):
    change = force_to_change(change)
    change.metadata = ChangeMeta(data_source_type='couch', data_source_name='test_commcarehq', document_id=change.id)
    error = PillowError.get_or_create(change, pillow or FakePillow())
    for n in range(0, attempts):
        error.add_attempt(*get_ex_tb(message, ex_class=ex_class))
    return error
Exemplo n.º 4
0
    def get_or_create(cls, change, pillow, change_meta=None):
        change = force_to_change(change)
        doc_id = change.id
        try:
            error = cls.objects.get(doc_id=doc_id, pillow=pillow.pillow_id)
        except cls.DoesNotExist:
            now = datetime.utcnow()
            error = PillowError(doc_id=doc_id,
                                pillow=pillow.pillow_id,
                                date_created=now,
                                date_last_attempt=now,
                                date_next_attempt=now,
                                change=json.dumps(change.to_dict()))

            if change_meta:
                date_string = change_meta.get('date')
                try:
                    date = parse(
                        date_string) if date_string is not None else None
                except ValueError:
                    # date is not mission critical and can be messy data so just blank it out
                    date = None
                domains = ','.join(change_meta.get('domains'))
                error.domains = (domains[:252] +
                                 '...') if len(domains) > 255 else domains
                error.doc_type = change_meta.get('doc_type')
                error.doc_date = date

        return error
Exemplo n.º 5
0
    def test_empty_metadata(self):
        change = force_to_change({'id': '123'})
        error = PillowError.get_or_create(change, GetDocPillow())
        error.save()

        process_pillow_retry(error.id)

        error = PillowError.objects.get(pk=error.id)
        self.assertEquals(error.total_attempts, 1)
Exemplo n.º 6
0
    def test_empty_metadata(self):
        change = force_to_change({'id': '123'})
        error = PillowError.get_or_create(change, GetDocPillow())
        error.save()

        process_pillow_retry(error.id)

        error = PillowError.objects.get(pk=error.id)
        self.assertEquals(error.total_attempts, 1)
Exemplo n.º 7
0
 def test_convert_to_and_from_couch_row(self):
     couch_row = {
         'id': 'an-id',
         'doc': {'a': 'document'},
         'seq': '21',
         'deleted': False
     }
     ways_to_make_change_object = [
         change_from_couch_row(couch_row),
         force_to_change(couch_row),
         force_to_change(force_to_change(couch_row)),  # tests passing an already converted object
     ]
     for change in ways_to_make_change_object:
         self.assertTrue(isinstance(change, Change))
         self.assertEqual('an-id', change.id)
         self.assertEqual(couch_row['doc'], change.document)
         self.assertEqual('21', change.sequence_id)
         self.assertEqual(False, change.deleted)
         for key in couch_row:
             self.assertEqual(couch_row[key], change[key])
Exemplo n.º 8
0
def create_error(change,
                 message='message',
                 attempts=0,
                 pillow=None,
                 ex_class=None):
    change = force_to_change(change)
    change.metadata = ChangeMeta(data_source_type='couch',
                                 data_source_name='test_commcarehq',
                                 document_id=change.id)
    error = PillowError.get_or_create(change, pillow or FakePillow())
    for n in range(0, attempts):
        error.add_attempt(*get_ex_tb(message, ex_class=ex_class))
    return error
Exemplo n.º 9
0
 def test_convert_to_and_from_couch_row(self):
     couch_row = {
         'id': 'an-id',
         'doc': {
             'a': 'document'
         },
         'seq': '21',
         'deleted': False
     }
     ways_to_make_change_object = [
         change_from_couch_row(couch_row),
         force_to_change(couch_row),
         force_to_change(force_to_change(
             couch_row)),  # tests passing an already converted object
     ]
     for change in ways_to_make_change_object:
         self.assertTrue(isinstance(change, Change))
         self.assertEqual('an-id', change.id)
         self.assertEqual(couch_row['doc'], change.document)
         self.assertEqual('21', change.sequence_id)
         self.assertEqual(False, change.deleted)
         for key in couch_row:
             self.assertEqual(couch_row[key], change[key])
Exemplo n.º 10
0
    def get_or_create(cls, change, pillow):
        change = force_to_change(change)
        change.document = None
        doc_id = change.id
        try:
            error = cls.objects.get(doc_id=doc_id, pillow=pillow.pillow_id)
        except cls.DoesNotExist:
            now = datetime.utcnow()
            error = PillowError(doc_id=doc_id,
                                pillow=pillow.pillow_id,
                                date_created=now,
                                date_last_attempt=now,
                                date_next_attempt=now,
                                change=change.to_dict())

            if change.metadata:
                error.change_metadata = change.metadata.to_json()

        return error
Exemplo n.º 11
0
    def get_or_create(cls, change, pillow):
        change = force_to_change(change)
        change.document = None
        doc_id = change.id
        try:
            error = cls.objects.get(doc_id=doc_id, pillow=pillow.pillow_id)
        except cls.DoesNotExist:
            now = datetime.utcnow()
            error = PillowError(
                doc_id=doc_id,
                pillow=pillow.pillow_id,
                date_created=now,
                date_last_attempt=now,
                date_next_attempt=now,
                change=change.to_dict()
            )

            if change.metadata:
                error.change_metadata = change.metadata.to_json()

        return error