[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}
|