;ò
ÎBNDc           @   s¬   d  Z  d d d !Z d k Z d k Td k Td k Td k Td k Td k Td k	 Td k
 Td k l Z d k l Z e d e ƒ  ƒ Z d	 d	 e d
 „ Z d e f d „  ƒ  YZ d S(   sF   
   Copyright (C) 2001-2003 PimenTech SARL (http://www.pimentech.net)

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public License as
   published by the Free Software Foundation; either version 2 of the
   License, or (at your option) any later version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with this library; see the file COPYING.LIB.  If not,
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  
s   $Revision: 1.53 $i   iþÿÿÿN(   s   *(   s   HTMLFile(   s   MessageDialogs   dtml/pgmlGraphAdds    c         C   sÀ   t  | | d d d d d d d d d	 d ƒ} |  i | | ƒ | oW d
 k l } | ƒ  } | i
 |  i | ƒ i ƒ | i d ƒ | i | ƒ | i ƒ  n | t j	 o |  i |  | ƒ Sn d S(   s   Add a PgmlGraph to a folder.s
   idSequences   uid SERIAL PRIMARY KEYs   usePostgreSqlIsai   s   usePostgreSqlConstraintsi    s
   refDefaults   0s
   useIndices(   s   StringION(   s	   PgmlGraphs   ids   titles	   pgmlgraphs   selfs
   _setObjects   sources	   cStringIOs   StringIOs   stringIOs   writes   _getObs   datas   seeks   readFiles   simplifys   REQUESTs   Nones   manage_main(   s   selfs   ids   titles   sources   REQUESTs   StringIOs   stringIOs	   pgmlgraph(    (    s   pgmlgraph.pys   manage_addPgmlGraph'   s"     		s	   PgmlGraphc           B   sz  t  Z d  Z d Z e d e ƒ  ƒ Z e d e ƒ  ƒ Z e d e ƒ  ƒ Z e d e ƒ  ƒ Z e d e ƒ  ƒ Z	 e d e ƒ  ƒ Z
 e d „ Z d e f d	 „  ƒ  YZ d d
 e e e e e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e e d „ Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# RS(    s%   the pgml graph builded from file.pgmls	   PgmlGraphs   dtml/pgmlGraphHeaders   dtml/pgmlGraphFooters   dtml/pgmlGraphIndexs   dtml/pgmlGraphMenus   dtml/pgmlGraphContentc         C   s>   | |  _  | t j	 o$ t d d d d |  i d d ƒ Sn d S(   s#   does this really need a doc string?s   titles   Editeds   messages   Properties for %s changed.s   actions   ./manage_mainN(   s   titles   selfs   REQUESTs   Nones   MessageDialogs   id(   s   selfs   titles   REQUEST(    (    s   pgmlgraph.pys   manage_editI   s     		s   PgmlHandlerc           B   s#   t  Z d „  Z d „  Z d „  Z RS(   Nc         C   sS   t  i |  | ƒ | |  _ | i |  _ | i |  _ | i |  _ t |  _	 t |  _
 d  S(   N(   s   CommonHandlers   __init__s   selfs   ids   graphs
   idSequences   usePostgreSqlIsas
   useIndicess   Nones   currentTables   currentRelation(   s   selfs   ids   graph(    (    s   pgmlgraph.pys   __init__U   s    		c         C   sˆ  t  i |  | | ƒ t d ƒ } x | D] } | | | | <q& W| d j o*|  i i	 t
 | d d |  i |  i |  i ƒ ƒ i |  _ |  i i i d t |  i ƒ ƒ | d oÄ | d } |  i i	 t
 | d |  i |  i |  i ƒ ƒ i } | |  i _ |  i i i d t |  i ƒ t |  i i ƒ f ƒ t d |  i | f ƒ } |  i i |  i d	 | ƒ |  i i | d
 | ƒ qwn| d j o{ |  i i	 t | d ƒ ƒ i |  _ | d oJ | d } |  i i	 t
 | d |  i |  i |  i ƒ ƒ i } | |  i _ qwn{| d j oJ| d o t | d ƒ | d <n | d d j o t | d <n |  i d j o| |  i i | d d | d ƒ |  i i | d d | d ƒ |  i i | d d | d ƒ |  i i | d d | d ƒ qw|  i i | d d | d ƒ |  i i | d d | d ƒ |  i i | d d | d ƒ |  i i | d d | d ƒ n$| d j o| d d j o d | d <n^ | d d j o d	 | d <n? | d d j o d | d <n  | d d j o d | d <n | d d d d
 d	 d d f j oU |  i i	 t
 | d d |  i |  i |  i ƒ ƒ i } |  i i |  i | d | ƒ qwt i d | d |  i f ƒ n | i  ƒ  ~ d  S(   Ns   ValueOfs   tables   names    s   table %s inserteds   isas   table %s inherits from %ss	   %s_isa_%ss   1,1,1s   1,1,0s   relations	   attributes   constraintss   indexs   trues   types   defaults   participations   0,1s   0,1,1s   1,1s   0,ns   0,n,0s   1,ns   1,n,0s   0,1,0s)   WARNING : unknown type in %s relation %s
(!   s   CommonHandlers   startElements   selfs   names   attrss   DictMaps   valueOfs   attrs   graphs   inserts   Tables
   idSequences   usePostgreSqlIsas
   useIndicess   objects   currentTables   Logs   messages   strs   s_isas   tables   isas   Relations   relations   insert_edges   currentRelations   lowers   Nones	   parentTags   insert_attributes   stderrs   writes   clear(   s   selfs   names   attrss   s_isas   valueOfs   relations   attrs   table(    (    s   pgmlgraph.pys   startElementa   sf     7 
02"
0  ""#4!"
c         C   sH   t  i |  | ƒ | d j o t |  _ n | d j o t |  _ n d  S(   Ns   tables   relation(   s   CommonHandlers
   endElements   selfs   names   Nones   currentTables   currentRelation(   s   selfs   name(    (    s   pgmlgraph.pys
   endElement£   s
    (   s   __name__s
   __module__s   __init__s   startElements
   endElement(    (    (    s   pgmlgraph.pys   PgmlHandlerT   s   		Bs    c         C   sV   t  i |  | | ƒ d |  _ | |  _ | |  _ | |  _ | |  _	 | |  _
 d |  _ d  S(   Ni    (   s   Graphs   __init__s   selfs   ids   titles   directeds
   idSequences
   refDefaults   usePostgreSqlIsas   usePostgreSqlConstraintss
   useIndicess
   simplified(   s   selfs   ids   titles
   idSequences   usePostgreSqlIsas   usePostgreSqlConstraintss
   refDefaults
   useIndices(    (    s   pgmlgraph.pys   __init__ª   s    						c         C   sO   t  d ƒ } x8 |  i ƒ  D]* } | i i d j o | i | ƒ q q W| Sd S(   s-   return a set of vertices containing relationss	   Relationss   RelationN(   s   Sets	   relationss   selfs   valuess   vs   objects	   meta_types   insert(   s   selfs	   relationss   v(    (    s   pgmlgraph.pys   get_relations¸   s      c         C   sO   t  d ƒ } x8 |  i ƒ  D]* } | i i d j o | i | ƒ q q W| Sd S(   s*   return a set of vertices containing tabless   Tabless   TableN(   s   Sets   tabless   selfs   valuess   vs   objects	   meta_types   insert(   s   selfs   tabless   v(    (    s   pgmlgraph.pys
   get_tablesÀ   s      c         C   sO   g  } x> |  i ƒ  D]0 } | i } | i d j o | i | ƒ q q W| Sd S(   s   return a list of tabless   TableN(   s   tabless   selfs   valuess   vs   objects	   coretables	   meta_types   append(   s   selfs   tabless	   coretables   v(    (    s   pgmlgraph.pys   get_menuÈ   s      	c         C   sz  |  i i d | | f ƒ d | | f } d } t d ƒ } | i	 | d ƒ | i	 | d ƒ xÁ | i
 ƒ  D]³ } xª | i
 ƒ  D]œ } | i | ƒ o† |  i i d | i ƒ  | f ƒ | i ƒ  | j o1 |  i o" |  i i d | ƒ | d	 } qq|  i i d
 | ƒ | d	 } q~ q~ Wqk W|  i o! | i i o |  | i i | j o" | |  i |  | i i | ƒ Sn | Sd  S(   Ns#   	_how_much_relations_between(%s,%s)s	   %s_isa_%si    s	   Relationss   0,1,1s   1,1,1s,   	_how_much_relations_between -> if %s == %s:sL   	_how_much_relations_between -> n = n + 1 (%s and not self.usePostgreSqlIsa)i   sA   	_how_much_relations_between -> n = n + 1 (%s not a isa relation)(   s   selfs   Logs   messages   vtable1s   vtable2s   isaRelationNames   ns   Sets	   relationss
   insert_sets   valuess	   vrelations   sets   has_keys   getIds   usePostgreSqlIsas   objects   isas   _how_much_relations_between(   s   selfs   vtable1s   vtable2s   sets	   relationss   ns   isaRelationNames	   vrelation(    (    s   pgmlgraph.pys   _how_much_relations_betweenÑ   s*       ."c         C   sz   d } t d ƒ } | i | d ƒ | i | d ƒ x; | i ƒ  D]- } | i } | i	 | ƒ o | d } qA qA W| Sd  S(   Ni    s	   Relationss   0,1,1s   1,1,1i   (   s   ns   Sets	   relationss
   insert_sets   vtables   valuess	   vrelations   objects   relations   has_keys	   attribute(   s   selfs   vtables	   attributes	   relationss   ns   relations	   vrelation(    (    s   pgmlgraph.pys#   _how_much_times_occurs_on_relationsî   s     	c         C   sò   | i ƒ  d j o" |  i i d t | ƒ ƒ d Snº |  i i d t | ƒ ƒ xd | i ƒ  D]V \ } } t	 | d ƒ \ } } } | d j o
 | i ƒ  o |  i i d ƒ d Sq\ q\ W|  i i d	 t | ƒ ƒ |  i i d
 t | ƒ ƒ d Sd  S(   Ni   s2   need to create a table for relation %s (degre > 2)i   s7   looking for tables with ref for relation %s (degre < 3)s   ,s   1s	   found onei    s.   no tables with ref for relation %s (degre < 3)s0   therefore need to create a table for relation %s(   s	   vrelations   degres   selfs   Logs   messages   strs   itemss   labels   verticess   splits   mins   maxs   ks   values(   s   selfs	   vrelations   mins   maxs   verticess   labels   k(    (    s   pgmlgraph.pys   _need_tableù   s     c      	   C   sã  xÜ|  i ƒ  i ƒ  D]È} |  i | ƒ o q n | i } |  i i d t	 | ƒ ƒ |  | =|  i i d t	 | ƒ ƒ |  i
 t t	 | ƒ d |  i |  i |  i ƒ ƒ i } | i ol |  i i d t	 | ƒ ƒ | i | _ t d | | i f ƒ } |  i | d | ƒ |  i | d | i ƒ n |  i i d t	 | ƒ t	 | ƒ f ƒ | i | ƒ |  i
 | ƒ } xx| i ƒ  D]j\ }
 } t |
 d	 ƒ \ } }	 } xC| i ƒ  D]5} | i } |  i i d
 t	 | ƒ |
 t	 | ƒ f ƒ | |
 | =|  i i d t	 | ƒ t	 | ƒ f ƒ t d t	 | ƒ t	 | ƒ f ƒ } |  i
 | ƒ } |  i i d | |
 | f ƒ |  i | |
 | ƒ | d j o1 |  i i d | | f ƒ |  i | d | ƒ qž|  i i d | | f ƒ |  i | d | ƒ qžWqmWq Wd  S(   Ns   deleting relation %ss   inserting new table %ss    s$   adding isa on newly created table %ss	   %s_isa_%ss   1,1,1s   1,1,0s   adding attributes of %s on %ss   ,s   deleting edge %s -- %s -- %ss   creating relation %s_%ss   %s_%ss   inserting edge %s -- %s -- %ss   1s    inserting edge %s -- 1,1,0 -- %ss    inserting edge %s -- 1,1,1 -- %s(!   s   selfs   get_relationss   valuess	   vrelations   _need_tables   objects   relations   Logs   messages   strs   inserts   Tables
   idSequences   usePostgreSqlIsas
   useIndicess   table_relations   isas   Relations   new_isa_relations   insert_edges
   insert_maps   vtable_relations   itemss   labels   verticess   splits   mins   maxs   ks   vtables   tables   new_relations   vnew_relation(   s   selfs   vtables   mins   table_relations   verticess   vtable_relations	   vrelations   vnew_relations   relations   maxs   labels   tables   new_isa_relations   ks   new_relation(    (    s   pgmlgraph.pys   _simplify_ambiguous_relations	  sH     	3
&  	)&"c         C   s–  x|  i ƒ  i ƒ  D]{} | i } xi| i ƒ  D][\ }
 }	 t	 |
 d ƒ \ } } } | d j o*|  i i d ƒ x|	 i ƒ  D]} | i } xó| i ƒ  D]å\ }
 }	 t	 |
 d ƒ \ } } } x¾|	 i ƒ  D]°} | i } | | j o qÊ n d } |  i | | ƒ d j o d t | ƒ } n d | | f } | i ƒ  | j p | i ƒ  | j o |  i o…|  i i d | t | ƒ t | ƒ f ƒ | i d	 | t | ƒ f d
 d ƒ |  i o* | i d	 | t | ƒ f d |  i ƒ n | i d	 | t | ƒ f d t | ƒ ƒ |  i oÎ | d j ol | i o |  i o' | i d	 | t | ƒ f d d ƒ qÞ| i d	 | t | ƒ f d d t | ƒ ƒ qâ| i p | i o |  i o1 | i d	 | t | ƒ f d d t | ƒ ƒ qâqæn |  i i d t | ƒ t | ƒ f ƒ xk | i ƒ  D]] \ } } |  i | | ƒ d j p | i  | ƒ o | | d t | ƒ | f <q| | | <qWqÊ Wq™ Wq} Wq/ q/ Wq Wd  S(   Ns   ,s   1s   putting refs on tables (x,x,1)s    i   s   _%ss	   %s_isa_%ss   put ref%s_%s on %ss   ref%s_%ss   types   int4s   defaults
   referencess   constraintss   NOT NULLs(   NOT NULL REFERENCES %s ON DELETE CASCADEs    REFERENCES %s ON DELETE SET NULLs   adding attributes of %s on %ss   %s_%s(!   s   selfs   get_relationss   valuess	   vrelations   objects   relations   itemss   labels   verticess   splits   mins   maxs   ks   Logs   messages   vtable_with_refs   table_with_refs   vtables   tables   diffs   _how_much_relations_betweens   strs   isaRelationNames   getIds   usePostgreSqlIsas   insert_attributes
   refDefaults   usePostgreSqlConstraintss   isas   names
   propertiess#   _how_much_times_occurs_on_relationss   has_key(   s   selfs
   propertiess   table_with_refs   vtables   names   mins   maxs   isaRelationNames   vtable_with_refs   verticess   labels   relations   diffs   tables	   vrelations   k(    (    s   pgmlgraph.pys	   _put_refs6  sX     	  	  	1)#
*)
'  & )c         C   s3   |  i o d  Sn |  i ƒ  |  i ƒ  d |  _ d  S(   Ni   (   s   selfs
   simplifieds   _simplify_ambiguous_relationss	   _put_refs(   s   self(    (    s   pgmlgraph.pys   simplifyr  s
    
 

c         C   s‡   t  i ƒ  } | i d ƒ } | i |  i d |  ƒ ƒ | i |  i d |  ƒ ƒ | i	 |  i d |  ƒ ƒ | i
 |  i d |  ƒ ƒ | Sd  S(   Ns   xml.sax.drivers.drv_xmlprocs   doc_handlers   dtd_handlers   err_handlers   ent_handler(   s   saxextss   ParserFactorys   pfs   make_parsers   ps   setDocumentHandlers   selfs   PgmlHandlers   setDTDHandlers   setErrorHandlers   setEntityResolver(   s   selfs   ps   pf(    (    s   pgmlgraph.pys   _get_parser{  s    c         C   s   |  i ƒ  i | ƒ d  S(   N(   s   selfs   _get_parsers   parses   filename(   s   selfs   filename(    (    s   pgmlgraph.pys   read†  s    c         C   s   |  i ƒ  i | ƒ d  S(   N(   s   selfs   _get_parsers	   parseFiles   fileobj(   s   selfs   fileobj(    (    s   pgmlgraph.pys   readFile‰  s    c   
      C   sÿ  | i d |  i ƒ  ƒ | o | i d | ƒ n | i d ƒ | o4 t ƒ  } x( t | d ƒ D] } | i
 | ƒ q` Wn xl|  i ƒ  D]^} | i i d j o3 | p | i | ƒ o | i i | ƒ qˆ qˆ n | o~ d } xM | i ƒ  D]? } x6 | | i ƒ  D]$ }	 | i |	 ƒ o | d } qqWqî W| d j o | i i | ƒ qiqˆ n | i i | ƒ xz | i ƒ  D]l } xc | | i ƒ  D]Q }	 | o | i |	 ƒ o qn | i d t | i ƒ t |	 i ƒ | f ƒ qWqvWqˆ W| i d	 ƒ d  Sd  S(
   Ns   graph %s {
s   %s
s(   page="8.25,11.75";rotate=90;margin=0.2;
s    s   Tablei    i   s   %s -- %s [ label="%s" ];
s   }
(   s   outputs   writes   selfs   getIds   optionss
   tableNamess   Sets   tableSets   splits	   tableNames   inserts   valuess   vs   objects	   meta_types   has_keys	   write_dots
   tableCounts   keyss   labels   vdests   str(
   s   selfs   outputs   optionss
   tableNamess	   tableNames   tableSets   labels
   tableCounts   vs   vdest(    (    s   pgmlgraph.pys	   write_dotŒ  sH    	      8c         C   s  |  i ƒ  | i d ƒ x9 |  i ƒ  i ƒ  D]% } | i o |  i | | ƒ q* q* Wx« |  i	 ƒ  i ƒ  D]— } | i } | i d t | ƒ ƒ | i | ƒ xT | i ƒ  D]F \ } } x7 | i ƒ  D]) } | i d t | ƒ t | ƒ f ƒ q¿ Wq¦ W| i d ƒ qf W| i d ƒ d  S(   Ns	   <schema>
s   <relation name='%s'>
s&   <participation table='%s' type='%s'/>
s   </relation>
s
   </schema>
(   s   selfs
   clear_tagss   outputs   writes
   get_tabless   valuess   vtables   tags   _write_pgmls   get_relationss   vs   objects   relations   strs   _write_attributes_pgmls   itemss   labels   verticess   table(   s   selfs   outputs   vtables   verticess   labels   relations   vs   table(    (    s   pgmlgraph.pys
   write_pgmlº  s$    
  	  +c         C   sØ   d | _ x¸ | i ƒ  D]ª \ } } |  i | ƒ d j oˆ x… | i ƒ  D]s } xj | i ƒ  D]\ \ } } |  i | ƒ d j o: x7 | i ƒ  D]% } | i o |  i | | ƒ q‡ q‡ WqX qX WqE Wq q W| i i | ƒ d  S(   Ni   s   1s   0(   s   vtables   tags   itemss   labels   svrels   selfs
   _label_dirs   valuess   vrels   svts   ts   _write_pgmls   outputs   objects
   write_pgml(   s   selfs   vtables   outputs   svrels   labels   ts   vrels   svt(    (    s   pgmlgraph.pys   _write_pgmlË  s    	    ,c         C   s   t  | d ƒ d Sd  S(   Ns   ,i   (   s   splits   label(   s   selfs   label(    (    s   pgmlgraph.pys
   _label_dir×  s    c         C   sJ   |  i ƒ  x9 |  i ƒ  i ƒ  D]% } | i o |  i | | ƒ q q Wd  S(   N(   s   selfs
   clear_tagss
   get_tabless   valuess   vtables   tags
   _write_sqls   output(   s   selfs   outputs   vtable(    (    s   pgmlgraph.pys	   write_sqlÚ  s
    
 c         C   sØ   d | _ x¸ | i ƒ  D]ª \ } } |  i | ƒ d j oˆ x… | i ƒ  D]s } xj | i ƒ  D]\ \ } } |  i | ƒ d j o: x7 | i ƒ  D]% } | i o |  i | | ƒ q‡ q‡ WqX qX WqE Wq q W| i i | ƒ d  S(   Ni   s   1s   0(   s   vtables   tags   itemss   labels   svrels   selfs
   _label_dirs   valuess   vrels   svts   ts
   _write_sqls   outputs   objects	   write_sql(   s   selfs   vtables   outputs   svrels   labels   ts   vrels   svt(    (    s   pgmlgraph.pys
   _write_sqlà  s    	    ,c         C   sJ   |  i ƒ  x9 |  i ƒ  i ƒ  D]% } | i o |  i | | ƒ q q Wd  S(   N(   s   selfs
   clear_tagss
   get_tabless   valuess   vtables   tags   _write_ssqls   output(   s   selfs   outputs   vtable(    (    s   pgmlgraph.pys
   write_ssqlì  s
    
 c         C   sØ   d | _ x¸ | i ƒ  D]ª \ } } |  i | ƒ d j oˆ x… | i ƒ  D]s } xj | i ƒ  D]\ \ } } |  i | ƒ d j o: x7 | i ƒ  D]% } | i o |  i | | ƒ q‡ q‡ WqX qX WqE Wq q W| i i | ƒ d  S(   Ni   s   1s   0(   s   vtables   tags   itemss   labels   svrels   selfs
   _label_dirs   valuess   vrels   svts   ts   _write_ssqls   outputs   objects
   write_ssql(   s   selfs   vtables   outputs   svrels   labels   ts   vrels   svt(    (    s   pgmlgraph.pys   _write_ssqlò  s    	    ,($   s   __name__s
   __module__s   __doc__s	   meta_types   HTMLFiles   globalss   standard_html_headers   standard_html_footers
   index_htmls	   menu_htmls   content_htmls   Nones   manage_edits   CommonHandlers   PgmlHandlers   __init__s   get_relationss
   get_tabless   get_menus   _how_much_relations_betweens#   _how_much_times_occurs_on_relationss   _need_tables   _simplify_ambiguous_relationss	   _put_refss   simplifys   _get_parsers   reads   readFiles	   write_dots
   write_pgmls   _write_pgmls
   _label_dirs	   write_sqls
   _write_sqls
   write_ssqls   _write_ssql(    (    (    s   pgmlgraph.pys	   PgmlGraph=   s>    V								-	<					.						(   s   __doc__s   __version__s   syss   strings!   Products.PimenTechLibCommon.stacks   Products.PimenTechLibCommon.maps   Products.PimenTechLibCommon.sets!   Products.PimenTechLibCommon.graphs   Products.PimenTechLibCommon.saxs!   Products.PimenTechLibCommon.tables$   Products.PimenTechLibCommon.relations   Globalss   HTMLFiles   MessageDialogs   globalss   manage_addPgmlGraphForms   Nones   manage_addPgmlGraphs   Graphs	   PgmlGraph(   s   HTMLFiles   manage_addPgmlGraphForms   syss   manage_addPgmlGraphs	   PgmlGraphs   __version__s   MessageDialog(    (    s   pgmlgraph.pys   ?   s   	
