Skip to content
Snippets Groups Projects
Commit 188899fb authored by Dennis Ahrens's avatar Dennis Ahrens
Browse files

[TASK] Performance related changes.

if foo is not None is slightly faster than
if foo != None.
for foo in my_dict is faster than
for foo in my_dict.iterkeys()
parent 21d71553
Branches
No related tags found
No related merge requests found
......@@ -150,7 +150,7 @@ class NameResolver(object):
@functools.wraps(fn)
def decorated(*args, **kwargs):
m_args, _, _, defaults = inspect.getargspec(fn)
defaults = dict(zip(m_args[-len(defaults):], defaults)) if defaults != None else {}
defaults = dict(zip(m_args[-len(defaults):], defaults)) if defaults is not None else {}
if self.argument_name in kwargs:
self.argument_value = kwargs.get(self.argument_name)
elif self.argument_name in defaults:
......@@ -211,7 +211,7 @@ class AbstractRepository(OrderedDict, object):
'''Return if the given reference or object is known by the repository'''
if isinstance(ref, self.cls):
ref = getattr(ref, self.ref_attr)
return ref in self.iterkeys()
return ref in self
def extend(self, items):
'''Extend the repository with a list of entities'''
......
......@@ -162,7 +162,7 @@ class Container(list):
return mapped_record
def is_regular_property(self, prop):
return prop in self.properties.iterkeys() or prop in self.mapping.iterkeys()
return prop in self.properties or prop in self.mapping
def _map_property(self, prop, raw_value, reverse = False):
'''Look up the name mapping and perform a type conversion.'''
......@@ -333,7 +333,7 @@ class Record(object):
self.identifier_dicts[container.name] = None
self.operation[container.name] = OPERATION_UNKNOWN
self.last_container = container
for prop in self.properties.iterkeys():
for prop in self.properties:
self.container_properties[container.name][prop] = None
def load(self, identifier_dictionary, properties, container, operation = OPERATION_UNKNOWN):
......@@ -384,7 +384,7 @@ class Record(object):
def dirty(self, source_container, target_container):
'''Returns whether the entity is dirty or not'''
for prop in self.properties.iterkeys():
for prop in self.properties:
if self.is_property_dirty(prop, source_container, target_container):
return True
return False
......@@ -399,7 +399,7 @@ class Record(object):
def _set_container_identifier(self, identifier_dictionary, container):
'''Set the container identifier. Ensures that this only happends once.'''
if container.name in self.identifier_dicts.iterkeys() and self.identifier_dicts[container.name] != None:
if container.name in self.identifier_dicts and self.identifier_dicts[container.name] is not None:
msg = 'For one record each identifier is only allowed to be set once. Existing id: %s, new id: %s, join id: %s' % (self.identifier_dicts[container.name], identifier_dictionary, self.identifier)
raise DuplicatedSystemIdException(msg)
self.identifier_dicts[container.name] = identifier_dictionary
......
......@@ -49,7 +49,7 @@ class AbstractExtractor(object):
def __init__(self, connector = None):
'''Create a extractor.'''
logging.debug('Initializing extractor: ' + self.__class__.__name__)
if connector != None and not self.can_execute(connector):
if connector is not None and not self.can_execute(connector):
raise ExtractorException('The extractor {} can not be executed using this connector {}'.format(self, connector))
self.connector = connector
'''The connector used by this extractor.'''
......@@ -72,7 +72,7 @@ class AbstractExtractor(object):
'''
if not self.can_execute(self.connector):
raise ExtractorException('The extractor {} can not be executed using this connector {}'.format(self, self.connector))
logging.info('Extracting data from %s with %s' % (self.connector.name if self.connector != None else 'Fake', unicode(self)))
logging.info('Extracting data from %s with %s' % (self.connector.name if self.connector is not None else 'Fake', unicode(self)))
result = self._execute()
logging.info('Extraction resolved %d records' % len(result))
return result
......@@ -373,7 +373,7 @@ class FakerExtractor(AbstractExtractor):
'''The properties that will be faked.'''
self._faker = Factory.create(locale, providers = providers)
'''The faker factory used to generate the data.'''
if seed != None:
if seed is not None:
self._faker.seed(seed)
def can_execute(self, connector):
......
......@@ -133,7 +133,7 @@ class Job(object):
choice = raw_input()
if len(choice) and choice[0].lower() in ('y', 'n'):
return choice == 'y'
elif default != None and not len(choice):
elif default is not None and not len(choice):
return default
else:
sys.stdout.write('Please enter `y` or `n`.\n')
......@@ -440,7 +440,7 @@ class ExtractionJob(EntityJob, ConnectorJob):
if not isinstance(extractor, AbstractExtractor):
raise ConfigurationException('The extractor needs to be an instance of hshetl.extractors.AbstractExtractor. Encoutered: {}'.format(str(type(extractor))))
self.extractor = extractor
if self.connector != None and self.extractor.connector == None:
if self.connector is not None and self.extractor.connector == None:
self.extractor.connector = self.connector
'''The extractor used to fetch data.'''
if name is None: self.name = self.entity.name + '_' + self.extractor.connector.name
......@@ -498,14 +498,14 @@ class TransformerJob(EntityJob, ConnectorJob):
raise ConfigurationException('The transformer needs to be an instance of hshetl.loaders.AbstractTransformer. Encoutered: {}'.format(str(type(transformer))))
self.transformer = transformer
'''The transformer used by the job.'''
if self.entity != None:
if self.entity is not None:
self.source = NameResolver(self.entity, 'source', source)()
self.target = NameResolver(self.entity, 'target', target)()
if self.transformer.entity == None:
self.transformer.entity = self.entity
if self.source != None and self.transformer.source == None:
if self.source is not None and self.transformer.source == None:
self.transformer.source = self.source
if self.target != None and self.transformer.target == None:
if self.target is not None and self.transformer.target == None:
self.transformer.target = self.target
self.transformer.name = self.name
......@@ -645,7 +645,7 @@ class LoadJob(EntityJob, ConnectorJob):
raise ConfigurationException('The loader needs to be an instance of hshetl.loaders.AbstractLoader. Encoutered: {}'.format(str(type(loader))))
self.loader = loader
'''The loader used to write the data in the database.'''
if self.connector != None and self.loader.connector == None:
if self.connector is not None and self.loader.connector == None:
self.loader.connector = self.connector
self.source = source
'''The entity related container, that data will be written.'''
......
......@@ -50,7 +50,7 @@ class AbstractLoader(object):
def __init__(self, connector = None, operations = ['insert', 'update', 'delete']):
'''Initializes the loader.'''
logging.debug('Initializing loader: ' + self.__class__.__name__)
if connector != None and not self.can_execute(connector):
if connector is not None and not self.can_execute(connector):
raise LoaderException('The loader {} can not be executed using this connector {}'.format(self, connector))
self.connector = connector
'''The connector this loader uses to write the data.'''
......@@ -237,7 +237,7 @@ class SqlAlchemyLoader(AbstractLoader):
if identifiers == {}:
raise ConfigurationException('No identifier given, cannot perform update or delete without identifier')
for column, value in identifiers.iteritems():
if value != None:
if value is not None:
logging.debug('Adding where clause for column ' + str(column) + ' with value ' + repr(value))
statement = statement.where(self.table.c.get(column) == value)
else:
......
......@@ -49,7 +49,7 @@ class AbstractTransformer(object):
def can_execute(self):
'''Whether the Transformer has everything set needed for its transform operation.'''
return self.entity != None
return self.entity is not None
def execute(self):
'''Execute the transformer.
......@@ -117,13 +117,13 @@ class CompareTransformer(AbstractTransformer):
'''The target container to work on.'''
self.mapping = mapping
'''If you do not want the properties to be mapped like in target system, provide a mapping here.'''
if self.entity != None:
if self.entity is not None:
self.source = NameResolver(self.entity, 'source', source)()
self.target = NameResolver(self.entity, 'target', target)()
def can_execute(self):
'''Whether the Transformer has everything set needed for its transform operation.'''
return self.entity != None and self.source != None and self.target != None
return self.entity is not None and self.source is not None and self.target is not None
def _execute(self):
'''Execute the compare operation.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment