80 lines
1.9 KiB
Python
80 lines
1.9 KiB
Python
import random
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from co3.schemas import SQLSchema
|
|
from co3 import CO3, collate
|
|
from co3 import util
|
|
|
|
|
|
class Vegetable(CO3):
|
|
def __init__(self, name, color):
|
|
self.name = name
|
|
self.color = color
|
|
|
|
class Tomato(Vegetable):
|
|
def __init__(self, name, radius):
|
|
super().__init__(name, 'red')
|
|
self.radius = radius
|
|
|
|
@property
|
|
def attributes(self):
|
|
return vars(self)
|
|
|
|
@collate('ripe', action_groups=['aging'])
|
|
def ripen(self):
|
|
return {
|
|
'age': random.randint(1, 6)
|
|
}
|
|
|
|
@collate('rotten', action_groups=['aging'])
|
|
def rot(self):
|
|
return {
|
|
'age': random.randint(4, 9)
|
|
}
|
|
|
|
@collate('diced', action_groups=['cooking'])
|
|
def dice(self):
|
|
return {
|
|
'pieces': random.randint(2, 12)
|
|
}
|
|
|
|
'''
|
|
VEGETABLE
|
|
|
|
|
TOMATO -- AGING
|
|
|
|
|
-- COOKING
|
|
'''
|
|
metadata = sa.MetaData()
|
|
vegetable_table = sa.Table(
|
|
'vegetable',
|
|
metadata,
|
|
sa.Column('id', sa.Integer, primary_key=True),
|
|
sa.Column('name', sa.String),
|
|
sa.Column('color', sa.String),
|
|
)
|
|
tomato_table = sa.Table(
|
|
'tomato',
|
|
metadata,
|
|
sa.Column('id', sa.Integer, primary_key=True),
|
|
sa.Column('vegetable_id', sa.Integer, util.db.deferred_cd_fkey('vegetables.id')),
|
|
sa.Column('radius', sa.Integer),
|
|
)
|
|
tomato_aging_table = sa.Table(
|
|
'tomato_aging_states',
|
|
metadata,
|
|
sa.Column('id', sa.Integer, primary_key=True),
|
|
sa.Column('vegetable_id', sa.Integer, util.db.deferred_cd_fkey('vegetables.id')),
|
|
sa.Column('state', sa.String),
|
|
sa.Column('age', sa.Integer),
|
|
)
|
|
tomato_cooking_table = sa.Table(
|
|
'tomato_cooking_states',
|
|
metadata,
|
|
sa.Column('id', sa.Integer, primary_key=True),
|
|
sa.Column('vegetable_id', sa.Integer, util.db.deferred_cd_fkey('vegetables.id')),
|
|
sa.Column('state', sa.String),
|
|
sa.Column('pieces', sa.Integer),
|
|
)
|
|
vegetable_schema = SQLSchema.from_metadata(metadata) |