diff --git a/hshetl/entities.py b/hshetl/entities.py index 681fa8ba92b93fe15b2f7f4cbb60a8d7c870449a..2f912d88fd371da8a824a5119f6b53c5ea5d1891 100644 --- a/hshetl/entities.py +++ b/hshetl/entities.py @@ -100,9 +100,8 @@ class Entity(AbstractRepository): container_identifier = self._hash(container_fields) if container_identifier in container: - rec = Record(join_identifier, self.properties, self.itervalues()) - rec.load(container_fields, mapped_record, container) - container.container_collide(rec) + container.container_collide(join_identifier, self.properties, self.itervalues(), + container_fields, mapped_record, container) return if self.record_repository.has(join_identifier): @@ -114,7 +113,8 @@ class Entity(AbstractRepository): self.record_repository.add(record) container.append(container_identifier) except DuplicatedSystemIdException: - container.join_collide(Record(join_identifier, self.properties, self.itervalues())) + container.join_collide(join_identifier, self.properties, self.itervalues(), + container_fields, mapped_record, container) def add(self, container): '''Adds the container to the entity and register it at all records''' @@ -212,8 +212,15 @@ class Container(list): value = raw_value return (mapped_prop_name, value) - def container_collide(self, record): + def _create_collision_record(self, join_identifier, properties, containers, container_fields, mapped_record, container): + '''Create a record object, if there was a container or join collision.''' + rec = Record(join_identifier, properties, containers) + rec.load(container_fields, mapped_record, container) + return rec + + def container_collide(self, join_identifier, properties, containers, container_fields, mapped_record, container): '''Add a container collisions or break.''' + record = self._create_collision_record(join_identifier, properties, containers, container_fields, mapped_record, container) if self.collision_handling == COLLISION_HANDLING_BREAKALL or \ self.collision_handling == COLLISION_HANDLING_BREAKCONTAINER: msg = 'Collision in %s system detected! Aborting! %s found twice.' % (self.name, repr(record)) @@ -223,8 +230,9 @@ class Container(list): logging.warn(msg) self.collisions.append(record) - def join_collide(self, record): + def join_collide(self, join_identifier, properties, containers, container_fields, mapped_record, container): '''Add a join collisions or break.''' + record = self._create_collision_record(join_identifier, properties, containers, container_fields, mapped_record, container) if self.collision_handling == COLLISION_HANDLING_BREAKALL or \ self.collision_handling == COLLISION_HANDLING_BREAKJOIN: msg = 'Collision in %s system detected! Aborting! %s found twice.' % (self.name, repr(record)) @@ -563,7 +571,7 @@ delete: {} unaltered: {} unknown: {} collsions: {} -join_collosion: {} +join_collisions: {} '''.format(len(self.insert), len(self.update), len(self.delete), len(self.unaltered), len(self.unknown), len(self.collisions), len(self.join_collisions))