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