def get_case(field_type, values): """ Determines the case of a list or dictionary of values. Args: - type: if not == 'string', will return 'n/a' - values: could be either dictionary or list. If it's a list, then it will only examine the keys. Returns: - one of: 'mixed','lower','upper','unknown' Misc notes: - "unknown values" are ignored - empty values list/dict results in 'unknown' result To do: - add consistency factor Test coverage: - complete, via test harness """ freq = collections.defaultdict(int) case = None if field_type != 'string': return 'n/a' # count occurances of each case field_type in values: for key in values: if typer.is_unknown(key): freq['unk'] += 1 elif typer.is_integer(key): # will be ignoring these freq['number'] += 1 elif typer.is_float(key): # will be ignoring these freq['number'] += 1 elif key.islower(): freq['lower'] += 1 elif key.isupper(): freq['upper'] += 1 else: freq['mixed'] += 1 # evaluate frequency distribution: if 'mixed' in freq: case = 'mixed' elif ('lower' in freq and 'upper' not in freq): case = 'lower' elif ('lower' not in freq and 'upper' in freq): case = 'upper' elif ('lower' in freq and 'upper' in freq): case = 'mixed' else: case = 'unknown' return case
def get_case(field_type, values): """ Determines the case of a list or dictionary of values. Args: - type: if not == 'string', will return 'n/a' - values: could be either dictionary or list. If it's a list, then it will only examine the keys. Returns: - one of: 'mixed','lower','upper','unknown' Misc notes: - "unknown values" are ignored - empty values list/dict results in 'unknown' result To do: - add consistency factor Test coverage: - complete, via test harness """ freq = collections.defaultdict(int) case = None if field_type != 'string': return 'n/a' # count occurances of each case field_type in values: for key in values: if typer.is_unknown(key): freq['unk'] += 1 elif typer.is_integer(key): # will be ignoring these freq['number'] += 1 elif typer.is_float(key): # will be ignoring these freq['number'] += 1 elif key.islower(): freq['lower'] += 1 elif key.isupper(): freq['upper'] += 1 else: freq['mixed'] += 1 # evaluate frequency distribution: if 'mixed' in freq: case = 'mixed'
def test_type_a01_is_integer(self): self.assertTrue(mod.is_integer('3')) self.assertTrue(mod.is_integer('-3')) self.assertTrue(mod.is_integer(3)) self.assertTrue(mod.is_integer(-3)) self.assertFalse(mod.is_integer('b')) self.assertFalse(mod.is_integer('')) self.assertFalse(mod.is_integer(' ')) self.assertFalse(mod.is_integer('$3')) self.assertFalse(mod.is_integer('4,333.22')) self.assertFalse(mod.is_integer('33.22')) self.assertFalse(mod.is_integer(3.3)) self.assertFalse(mod.is_integer(None))
def test_is_integer_basics(self): assert mod.is_integer('3') assert mod.is_integer('-3') assert mod.is_integer(3) assert mod.is_integer(-3) assert mod.is_integer('b') is False assert mod.is_integer('') is False assert mod.is_integer(' ') is False assert mod.is_integer('$3') is False assert mod.is_integer('4,333.22') is False assert mod.is_integer('33.22') is False assert mod.is_integer(3.3) is False assert mod.is_integer(None) is False
def test_is_integer_basics(self): assert mod.is_integer("3") assert mod.is_integer("-3") assert mod.is_integer(3) assert mod.is_integer(-3) assert mod.is_integer("b") is False assert mod.is_integer("") is False assert mod.is_integer(" ") is False assert mod.is_integer("$3") is False assert mod.is_integer("4,333.22") is False assert mod.is_integer("33.22") is False assert mod.is_integer(3.3) is False assert mod.is_integer(None) is False