add and integrate Component, Schema objects
This commit is contained in:
145
examples/.ipynb_checkpoints/mapper-checkpoint.ipynb
Normal file
145
examples/.ipynb_checkpoints/mapper-checkpoint.ipynb
Normal file
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "e02ccafe-e04d-4312-acba-e41cf7b1c021",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"/home/smgr/.pyenv/versions/co4/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
|
||||
" from .autonotebook import tqdm as notebook_tqdm\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from co3 import Mapper\n",
|
||||
"\n",
|
||||
"import vegetables"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"id": "7d80f7b9-7458-4ad4-8c1a-3ea56e796b4e",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"vegetable_mapper = Mapper(\n",
|
||||
" vegetables.Vegetable,\n",
|
||||
" vegetables.vegetable_schema\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"vegetable_mapper.attach(\n",
|
||||
" vegetables.Vegetable,\n",
|
||||
" vegetables.vegetable_table,\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"id": "f9408562-bf50-4522-909c-318557f85948",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# manually attach component\n",
|
||||
"vegetable_mapper.attach(\n",
|
||||
" vegetables.Tomato,\n",
|
||||
" vegetables.tomato_table,\n",
|
||||
" coll_groups={\n",
|
||||
" 'aging': vegetables.vegetable_schema.get_component('tomato_aging_states'),\n",
|
||||
" 'cooking': vegetables.vegetable_schema.get_component('tomato_cooking_states'),\n",
|
||||
" },\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "05fdd404-87ee-4187-832f-2305272758ae",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# attach by name in schema\n",
|
||||
"vegetable_mapper.attach(\n",
|
||||
" vegetables.Tomato,\n",
|
||||
" vegetables.tomato_table,\n",
|
||||
" coll_groups={\n",
|
||||
" 'aging': 'tomato_aging_states',\n",
|
||||
" 'cooking': 'tomato_cooking_states',\n",
|
||||
" },\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "e9b6af49-a69d-41cc-beae-1b6f171cd2f5",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# attach entire type hierarchy w/ type->name map\n",
|
||||
"vegetable_mapper.attach_hierarchy(\n",
|
||||
"# this might make more sense during init\n",
|
||||
" lambda x:x.__name__.lower())\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"id": "2e4336ab-5b5f-484d-815d-164d4b6f40a0",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"defaultdict(dict,\n",
|
||||
" {vegetables.Tomato: {'aging': <co3.components.SQLTable at 0x7ece94358aa0>,\n",
|
||||
" 'cooking': <co3.components.SQLTable at 0x7ece94358ad0>}})"
|
||||
]
|
||||
},
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vegetable_mapper.collation_groups"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "d416f9cd-2cb6-4a6e-bab7-86ac21216b8c",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "co3",
|
||||
"language": "python",
|
||||
"name": "co3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.12.2"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
80
examples/.ipynb_checkpoints/vegetables-checkpoint.py
Normal file
80
examples/.ipynb_checkpoints/vegetables-checkpoint.py
Normal file
@@ -0,0 +1,80 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user