def _wrap(value): """ Wraps the passed value in a Sequence if it is not a primitive. If it is a string argument it is expanded to a list of characters. >>> _wrap(1) 1 >>> _wrap("abc") ['a', 'b', 'c'] >>> type(_wrap([1, 2])) functional.pipeline.Sequence :param value: value to wrap :return: wrapped or not wrapped value """ if is_primitive(value): return value if isinstance(value, dict) or isinstance(value, set) or is_namedtuple(value): return value elif isinstance(value, collections.Iterable): return Sequence(value) else: return value
def _insert_item(item): if isinstance(item, dict): cols = ", ".join(item.keys()) placeholders = ", ".join("?" * len(item)) sql = "INSERT INTO {} ({}) VALUES ({})".format(table_name, cols, placeholders) conn.execute(sql, tuple(item.values())) elif is_namedtuple(item): cols = ", ".join(item._fields) placeholders = ", ".join("?" * len(item)) sql = "INSERT INTO {} ({}) VALUES ({})".format(table_name, cols, placeholders) conn.execute(sql, item) elif isinstance(item, (list, tuple)): placeholders = ", ".join("?" * len(item)) sql = "INSERT INTO {} VALUES ({})".format(table_name, placeholders) conn.execute(sql, item) else: raise TypeError("item must be one of dict, namedtuple, tuple or list got {}".format(type(item)))
def test_is_namedtuple(self): self.assertTrue(is_namedtuple(Data(1, 2))) self.assertFalse(is_namedtuple((1, 2, 3))) self.assertFalse(is_namedtuple([1, 2, 3])) self.assertFalse(is_namedtuple(1))