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
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
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
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
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)
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])
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])
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
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