[Modeling-cvs] ProjectModeling/Modeling/doc/HomePage quick_overview.tex,NONE,1.1
Status: Abandoned
Brought to you by:
sbigaret
From: <sbi...@us...> - 2003-09-01 21:15:55
|
Update of /cvsroot/modeling/ProjectModeling/Modeling/doc/HomePage In directory sc8-pr-cvs1:/tmp/cvs-serv3083/Modeling/doc/HomePage Added Files: quick_overview.tex Log Message: Added page quick overview --- NEW FILE: quick_overview.tex --- \documentclass{article} \title{A very quick overview} %\author{S\'ebastien Bigaret} %\authoraddress{Email: \email{sbi...@us...}} %\date{\today} \begin{document} \input{www/menu-inline-begin} \maketitle \begin{description} \item[Design your model] Write {\tt sample_pymodel.py}: %\begin{verbatim} %#! /usr/bin/env python %from Modeling.PyModel import * % %# Defaults %AString.defaults['width'] = 40 % %Entity.defaults['properties'] = [ % APrimaryKey('id', isClassProperty=0, isRequired=1, doc='PK') %] %## %_connDict = {'database': 'SampleDB', 'host': 'localhost', % 'user': 'postgres', 'password': ''} %model = Model('Sample',adaptorName='Postgresql', connDict=_connDict) %model.version='0.1' %model.entities = [ % Entity('Person', % properties=[ AString('firstName'), % AString('lastName',isRequired=1)] ), % Entity('Address', % properties=[ AString('street'), % AString('zipCode', width=10), % AString('town', isRequired=1) ], ), % ] %#--- %model.associations=[ % Association('Address','Person', % relations=['person','addresses'], % delete=['nullify','deny'] ), % ] %\end{verbatim} \begin{rawhtml} <pre> <font color="#444444">#! /usr/bin/env python</font> <strong>from</strong> <font color="#2040a0">Modeling</font>.<font color="#2040a0">PyModel</font> <strong>import</strong> <font color="4444FF">*</font> <font color="#444444"># Defaults</font> <font color="#2040a0">AString</font>.<font color="#2040a0">defaults</font><font color="4444FF">[</font><font color="#008000">'width'</font><font color="4444FF">]</font> <font color="4444FF">=</font> <font color="#FF0000">40</font> <font color="#2040a0">Entity</font>.<font color="#2040a0">defaults</font><font color="4444FF">[</font><font color="#008000">'properties'</font><font color="4444FF">]</font> <font color="4444FF">=</font> <font color="4444FF">[</font> <font color="#2040a0">APrimaryKey</font><font color="4444FF">(</font><font color="#008000">'id'</font>, <font color="#2040a0">isClassProperty</font><font color="4444FF">=</font><font color="#FF0000">0</font>, <font color="#2040a0">isRequired</font><font color="4444FF">=</font><font color="#FF0000">1</font>, <font color="#2040a0">doc</font><font color="4444FF">=</font><font color="#008000">'PK'</font><font color="4444FF">)</font> <font color="4444FF">]</font> <font color="#444444">##</font> <font color="#2040a0">_connDict</font> <font color="4444FF">=</font> <font color="4444FF"><strong>{</strong></font><font color="#008000">'database'</font><font color="4444FF">:</font> <font color="#008000">'SampleDB'</font>, <font color="#008000">'host'</font><font color="4444FF">:</font> <font color="#008000">'localhost'</font>, <font color="#008000">'user'</font><font color="4444FF">:</font> <font color="#008000">'postgres'</font>, <font color="#008000">'password'</font><font color="4444FF">:</font> <font color="#008000">''</font><font color="4444FF"><strong>}</strong></font> <font color="#2040a0">model</font> <font color="4444FF">=</font> <font color="#2040a0">Model</font><font color="4444FF">(</font><font color="#008000">'Sample'</font>,<font color="#2040a0">adaptorName</font><font color="4444FF">=</font><font color="#008000">'Postgresql'</font>, <font color="#2040a0">connDict</font><font color="4444FF">=</font><font color="#2040a0">_connDict</font><font color="4444FF">)</font> <font color="#2040a0">model</font>.<font color="#2040a0">version</font><font color="4444FF">=</font><font color="#008000">'0.1'</font> <font color="#2040a0">model</font>.<font color="#2040a0">entities</font> <font color="4444FF">=</font> <font color="4444FF">[</font> <font color="#2040a0">Entity</font><font color="4444FF">(</font><font color="#008000">'Person'</font>, <font color="#2040a0">properties</font><font color="4444FF">=</font><font color="4444FF">[</font> <font color="#2040a0">AString</font><font color="4444FF">(</font><font color="#008000">'firstName'</font><font color="4444FF">)</font>, <font color="#2040a0">AString</font><font color="4444FF">(</font><font color="#008000">'lastName'</font>,<font color="#2040a0">isRequired</font><font color="4444FF">=</font><font color="#FF0000">1</font><font color="4444FF">)</font><font color="4444FF">]</font> <font color="4444FF">)</font>, <font color="#2040a0">Entity</font><font color="4444FF">(</font><font color="#008000">'Address'</font>, <font color="#2040a0">properties</font><font color="4444FF">=</font><font color="4444FF">[</font> <font color="#2040a0">AString</font><font color="4444FF">(</font><font color="#008000">'street'</font><font color="4444FF">)</font>, <font color="#2040a0">AString</font><font color="4444FF">(</font><font color="#008000">'zipCode'</font>, <font color="#2040a0">width</font><font color="4444FF">=</font><font color="#FF0000">10</font><font color="4444FF">)</font>, <font color="#2040a0">AString</font><font color="4444FF">(</font><font color="#008000">'town'</font>, <font color="#2040a0">isRequired</font><font color="4444FF">=</font><font color="#FF0000">1</font><font color="4444FF">)</font> <font color="4444FF">]</font>, <font color="4444FF">)</font>, <font color="4444FF">]</font> <font color="#444444">#---</font> <font color="#2040a0">model</font>.<font color="#2040a0">associations</font><font color="4444FF">=</font><font color="4444FF">[</font> <font color="#2040a0">Association</font><font color="4444FF">(</font><font color="#008000">'Address'</font>,<font color="#008000">'Person'</font>, <font color="#2040a0">relations</font><font color="4444FF">=</font><font color="4444FF">[</font><font color="#008000">'person'</font>,<font color="#008000">'addresses'</font><font color="4444FF">]</font>, <font color="#2040a0">delete</font><font color="4444FF">=</font><font color="4444FF">[</font><font color="#008000">'nullify'</font>,<font color="#008000">'deny'</font><font color="4444FF">]</font> <font color="4444FF">)</font>, <font color="4444FF">]</font> </pre> \end{rawhtml} \item[Verify the correctness of your model] {\tt shell> mdl_validate_model.py sample_pymodel.py} (note: use option {\tt -h} on python scripts for details) \item[Generate the python code] {\tt shell> mdl_generate_python_code.py sample_pymodel.py} \item[Generate the corresponding database schema] Either get the coresponding sql statements: %\begin{verbatim} %shell> mdl_generate_DB_schema.py -c -A sample_pymodel.py %DROP SEQUENCE PK_SEQ_PERSON; %DROP SEQUENCE PK_SEQ_ADDRESS; %ALTER TABLE ADDRESS DROP CONSTRAINT person; %ALTER TABLE PERSON DROP CONSTRAINT PERSON_pkey; %ALTER TABLE ADDRESS DROP CONSTRAINT ADDRESS_pkey; %DROP TABLE PERSON; %DROP TABLE ADDRESS; %CREATE TABLE PERSON ( % FIRST_NAME VARCHAR(40) , % LAST_NAME VARCHAR(40) NOT NULL, % ID INTEGER NOT NULL); %CREATE TABLE ADDRESS ( % TOWN VARCHAR(40) NOT NULL, % FK_PERSON INTEGER , % STREET VARCHAR(40) , % ID INTEGER NOT NULL, % ZIP_CODE VARCHAR(10) ); %ALTER TABLE PERSON ADD PRIMARY KEY (ID); %ALTER TABLE ADDRESS ADD PRIMARY KEY (ID); %ALTER TABLE ADDRESS ADD CONSTRAINT person FOREIGN KEY (FK_PERSON) REFERENCES PERSON(ID) INITIALLY DEFERRED; %CREATE SEQUENCE PK_SEQ_PERSON START 1; %CREATE SEQUENCE PK_SEQ_ADDRESS START 1; %\end{verbatim} \begin{rawhtml} <pre> DROP SEQUENCE PK_SEQ_PERSON; DROP SEQUENCE PK_SEQ_ADDRESS; <strong>ALTER</strong> <strong>TABLE</strong> ADDRESS DROP <strong>CONSTRAINT</strong> person; <strong>ALTER</strong> <strong>TABLE</strong> PERSON DROP <strong>CONSTRAINT</strong> PERSON_pkey; <strong>ALTER</strong> <strong>TABLE</strong> ADDRESS DROP <strong>CONSTRAINT</strong> ADDRESS_pkey; DROP <strong>TABLE</strong> PERSON; DROP <strong>TABLE</strong> ADDRESS; <strong>CREATE</strong> <strong>TABLE</strong> PERSON ( FIRST_NAME <font color="#2040a0"><strong>VARCHAR</strong></font><strong>(</strong>40) , LAST_NAME <font color="#2040a0"><strong>VARCHAR</strong></font><strong>(</strong>40) <strong>NOT</strong> <strong>NULL</strong>, ID <font color="#2040a0"><strong>INTEGER</strong></font> <strong>NOT</strong> <strong>NULL</strong>); <strong>CREATE</strong> <strong>TABLE</strong> ADDRESS ( TOWN <font color="#2040a0"><strong>VARCHAR</strong></font><strong>(</strong>40) <strong>NOT</strong> <strong>NULL</strong>, FK_PERSON <font color="#2040a0"><strong>INTEGER</strong></font> , STREET <font color="#2040a0"><strong>VARCHAR</strong></font><strong>(</strong>40) , ID <font color="#2040a0"><strong>INTEGER</strong></font> <strong>NOT</strong> <strong>NULL</strong>, ZIP_CODE <font color="#2040a0"><strong>VARCHAR</strong></font><strong>(</strong>10) ); <strong>ALTER</strong> <strong>TABLE</strong> PERSON <strong>ADD</strong> <strong>PRIMARY</strong> <strong>KEY</strong> <strong>(</strong>ID); <strong>ALTER</strong> <strong>TABLE</strong> ADDRESS <strong>ADD</strong> <strong>PRIMARY</strong> <strong>KEY</strong> <strong>(</strong>ID); <strong>ALTER</strong> <strong>TABLE</strong> ADDRESS <strong>ADD</strong> <strong>CONSTRAINT</strong> person <strong>FOREIGN</strong> <strong>KEY</strong> <strong>(</strong>FK_PERSON) <strong>REFERENCES</strong> PERSON<strong>(</strong>ID) INITIALLY DEFERRED; <strong>CREATE</strong> SEQUENCE PK_SEQ_PERSON START 1; <strong>CREATE</strong> SEQUENCE PK_SEQ_ADDRESS START 1; </pre> \end{rawhtml} Or create the database directly: \begin{verbatim} shell> mdl_generate_DB_schema.py -c -C --admin-dsn="localhost:template1:postgres:" sample_pymodel.py \end{verbatim} \item[Use it!] %\begin{verbatim} %>>> from Sample.Person import Person %>>> from Sample.Address import Address %>>> from Modeling.EditingContext import EditingContext %>>> ec=EditingContext() % %>>> # create objects %... john=Person() %>>> john.setLastName('Cleese'); john.setFirstName('John') %>>> ec.insert(john) %>>> jeanne=Person() %>>> jeanne.setLastName('Cleese'); jeanne.setFirstName('Jeanne') %>>> ec.insert(jeanne) % %>>> # create relationships %... a_john=Address(); a_john.setTown('London') %>>> ec.insert(a_john) %>>> john.addToAddresses(a_john); a_john.setPerson(john) %>>> %>>> a_jeanne=Address(); a_jeanne.setTown('Paris'); ec.insert(a_jeanne) %>>> jeanne.addToAddresses(a_jeanne); a_jeanne.setPerson(jeanne) % %>>> # save changes %>>> ec.saveChanges() % %>>> # fetch objects %... in_london=ec.fetch('Person', 'addresses.town ilike "*london*"') %>>> [(p.getLastName(), p.getFirstName()) for p in in_london] %[('Cleese', 'John')] %\end{verbatim} \begin{rawhtml} <pre> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <strong>from</strong> <font color="#2040a0">Sample</font>.<font color="#2040a0">Person</font> <strong>import</strong> <font color="#2040a0">Person</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <strong>from</strong> <font color="#2040a0">Sample</font>.<font color="#2040a0">Address</font> <strong>import</strong> <font color="#2040a0">Address</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <strong>from</strong> <font color="#2040a0">Modeling</font>.<font color="#2040a0">EditingContext</font> <strong>import</strong> <font color="#2040a0">EditingContext</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">ec</font><font color="4444FF">=</font><font color="#2040a0">EditingContext</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#444444"># create objects</font> ... <font color="#2040a0">john</font><font color="4444FF">=</font><font color="#2040a0">Person</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">john</font>.<font color="#2040a0">setLastName</font><font color="4444FF">(</font><font color="#008000">'Cleese'</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#2040a0">john</font>.<font color="#2040a0">setFirstName</font><font color="4444FF">(</font><font color="#008000">'John'</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">ec</font>.<font color="#2040a0">insert</font><font color="4444FF">(</font><font color="#2040a0">john</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">jeanne</font><font color="4444FF">=</font><font color="#2040a0">Person</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">jeanne</font>.<font color="#2040a0">setLastName</font><font color="4444FF">(</font><font color="#008000">'Cleese'</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#2040a0">jeanne</font>.<font color="#2040a0">setFirstName</font><font color="4444FF">(</font><font color="#008000">'Jeanne'</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">ec</font>.<font color="#2040a0">insert</font><font color="4444FF">(</font><font color="#2040a0">jeanne</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#444444"># create relationships</font> ... <font color="#2040a0">a_john</font><font color="4444FF">=</font><font color="#2040a0">Address</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#2040a0">a_john</font>.<font color="#2040a0">setTown</font><font color="4444FF">(</font><font color="#008000">'London'</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">ec</font>.<font color="#2040a0">insert</font><font color="4444FF">(</font><font color="#2040a0">a_john</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">john</font>.<font color="#2040a0">addToAddresses</font><font color="4444FF">(</font><font color="#2040a0">a_john</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#2040a0">a_john</font>.<font color="#2040a0">setPerson</font><font color="4444FF">(</font><font color="#2040a0">john</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">a_jeanne</font><font color="4444FF">=</font><font color="#2040a0">Address</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#2040a0">a_jeanne</font>.<font color="#2040a0">setTown</font><font color="4444FF">(</font><font color="#008000">'Paris'</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#2040a0">ec</font>.<font color="#2040a0">insert</font><font color="4444FF">(</font><font color="#2040a0">a_jeanne</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">jeanne</font>.<font color="#2040a0">addToAddresses</font><font color="4444FF">(</font><font color="#2040a0">a_jeanne</font><font color="4444FF">)</font><font color="4444FF">;</font> <font color="#2040a0">a_jeanne</font>.<font color="#2040a0">setPerson</font><font color="4444FF">(</font><font color="#2040a0">jeanne</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#444444"># save changes</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#2040a0">ec</font>.<font color="#2040a0">saveChanges</font><font color="4444FF">(</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="#444444"># fetch objects</font> ... <font color="#2040a0">in_london</font><font color="4444FF">=</font><font color="#2040a0">ec</font>.<font color="#2040a0">fetch</font><font color="4444FF">(</font><font color="#008000">'Person'</font>, <font color="#008000">'addresses.town ilike "*london*"'</font><font color="4444FF">)</font> <font color="4444FF">></font><font color="4444FF">></font><font color="4444FF">></font> <font color="4444FF">[</font><font color="4444FF">(</font><font color="#2040a0">p</font>.<font color="#2040a0">getLastName</font><font color="4444FF">(</font><font color="4444FF">)</font>, <font color="#2040a0">p</font>.<font color="#2040a0">getFirstName</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">)</font> <strong>for</strong> <font color="#2040a0">p</font> <strong>in</strong> <font color="#2040a0">in_london</font><font color="4444FF">]</font> <font color="4444FF">[</font><font color="4444FF">(</font><font color="#008000">'Cleese'</font>, <font color="#008000">'John'</font><font color="4444FF">)</font><font color="4444FF">]</font> </pre> \end{rawhtml} \end{description} %% end \input{www/menu-inline-end} \end{document} |