class ModelLevel1(Model): __csv_file__ = "model_level1.csv" columns = [ Column('id', IntegerColumnType(), key=PrimaryKey()), Column('value', IntegerColumnType()), Column('level2_id', IntegerColumnType(), key=ForeignKey('id', ModelLevel2), object_field='level2') ]
class Product(Model): __csv_file__ = "products.csv" columns = [ Column('product_id', IntegerColumnType(), key=PrimaryKey()), Column('manufacturer_id', StringColumnType(), key=ForeignKey('manufacturer_id', Manufacturer), object_field='manufacturer'), Column('description', StringColumnType()), Column('unit_cost', FloatColumnType()), Column('in_stock_count', IntegerColumnType()), ]
class Order(Model): __csv_file__ = "orders.csv" columns = [ Column('order_id', IntegerColumnType(), key=PrimaryKey()), Column('person_id', IntegerColumnType(), key=ForeignKey('person_id', Person), object_field='person'), Column('product_id', IntegerColumnType(), key=ForeignKey('product_id', Product), object_field='product'), Column('quantity', IntegerColumnType()), Column('total', IntegerColumnType()) ]
class Person(Model): __csv_file__ = "people.csv" columns = [ Column('id', IntegerColumnType(), key=PrimaryKey()), Column('last_name', StringColumnType()), Column('first_name', StringColumnType()), ]
class Manufacturer(Model): __csv_file__ = 'manufacturers.csv' columns = [ Column('manufacturer_id', StringColumnType(), key=PrimaryKey()), Column('description', StringColumnType()), Column('contact_id', IntegerColumnType(), key=ForeignKey('person_id', Person), object_field='contact') ]
class AllValueTypes(Model): ALL_VALUE_TYPES_FORMAT_STR = "%Y-%m-%d %H:%M:%S.%f" __csv_file__ = 'all-value-types.csv' columns = [ Column('int_col', IntegerColumnType()), Column('float_col', FloatColumnType()), Column('string_col', StringColumnType()), Column('date_col', DateColumnType(ALL_VALUE_TYPES_FORMAT_STR)) ]
class IntSingle(Model): columns = [Column('value', IntegerColumnType())]
class ModelLevel3(Model): __csv_file__ = "model_level3.csv" columns = [ Column('id', IntegerColumnType(), key=PrimaryKey()), Column('value', IntegerColumnType()) ]
class Person(Model): __csv_file__ = "people.csv" columns = [ Column('id', IntegerColumnType(), key=PrimaryKey()), Column('last_name', StringColumnType()), Column('first_name', StringColumnType()), ] # TODO: here's the remedy to the class in a class reference problem. Person.columns.append( Column('parent_id', IntegerColumnType(), key=ForeignKey('id', Person), object_field='parent')) class Manufacturer(Model): __csv_file__ = 'manufacturers.csv' columns = [ Column('manufacturer_id', StringColumnType(), key=PrimaryKey()), Column('description', StringColumnType()), Column('contact_id', IntegerColumnType(), key=ForeignKey('person_id', Person), object_field='contact') ]
def test_compatible_type(self): col = Column('f1', IntegerColumnType()) assert col.compatible_type(100) assert not col.compatible_type(100.0) assert not col.compatible_type('string') assert not col.compatible_type(test_date)
def test_cast(self): col = IntegerColumnType() assert col.cast('100') == 100 with pytest.raises(ValueError) as cast_error: col.cast('100.5'), 100 assert "invalid literal for int() with base 10: '100.5'" in str(cast_error.value)