in neptune-python-utils/neptune_python_utils/mappings.py [0:0]
def mapping_for(self, key):
if key in self.mappings:
return self.mappings[key]
kwargs = {}
kwargs['key'] = key
if self.token_mappings.is_token(key):
kwargs['name'] = key
kwargs['datatype'] = None
kwargs['cardinality'] = None
kwargs['token_mappings'] = self.token_mappings
mapping = Mapping(**kwargs)
self.add(mapping)
return mapping
parts = key.rsplit(':', 1)
name = parts[0]
metadata = parts[1] if len(parts) > 1 else None
if metadata:
metadata_match = re.search('([^\\[\\]\\(\\)]+)(\\((single|set)\\))?(\\[\\])?', metadata)
datatype = metadata_match.group(1).lower() if metadata_match.group(1) else None
if datatype not in ['string', 'bool', 'boolean', 'byte', 'short', 'int', 'long', 'float', 'double', 'date']:
name = key
else:
kwargs['datatype'] = datatype
if datatype == 'byte':
kwargs['converter'] = lambda x: int(x)
elif datatype == 'short':
kwargs['converter'] = lambda x: int(x)
elif datatype == 'int':
kwargs['converter'] = lambda x: int(x)
elif datatype == 'long':
kwargs['converter'] = lambda x: int(x)
elif datatype == 'float':
kwargs['converter'] = lambda x: float(x)
elif datatype == 'double':
kwargs['converter'] = lambda x: float(x)
elif datatype == 'date':
kwargs['converter'] = lambda x: self.datetime_formatter.format(x)
elif datatype.startswith('bool'):
kwargs['converter'] = lambda x: x.lower() == 'true'
cardinality = 'set'
if metadata_match.group(3) and metadata_match.group(3).lower() == 'single':
cardinality = 'single'
kwargs['cardinality'] = cardinality
if metadata_match.group(4) and metadata_match.group(4) == '[]':
kwargs['is_multi_valued'] = True
kwargs['separator'] = self.separator
if cardinality == 'single':
raise Exception('Invalid mapping: single cardinality multi-valued property')
if name.endswith('[]'):
name = name[:-2]
kwargs['is_multi_valued'] = True
kwargs['separator'] = self.separator
kwargs['name'] = name
mapping = Mapping(**kwargs)
self.add(mapping)
return mapping