This is my second script (if you don't include the last time I
programmed (20 years ago...) 

it's a nasty hack but it works...

-------------------------------------------------------------------

  <?xml version="1.0" encoding="UTF-8" ?> 
- <!--  This grammar has been deprecated - use FMPXMLRESULT instead 
  --> 
- <FMPDSORESULT xmlns="http://www.filemaker.com/fmpdsoresult";>
  <ERRORCODE>0</ERRORCODE> 
  <DATABASE>Workflow01.fp7</DATABASE> 
  <LAYOUT /> 
- <ROW MODID="40" RECORDID="488">
  <pce.project.g>yourSoLuckyJob</pce.project.g> 
  <pce.homePath.g>c:\BaldricsWorkFolder</pce.homePath.g> 
  <pea.elementA_0>FRENCH</pea.elementA_0> 
  </ROW>
- <ROW MODID="36" RECORDID="489">
  <pce.project.g>yourSoLuckyJob</pce.project.g> 
  <pce.homePath.g>c:\BaldricsWorkFolder</pce.homePath.g> 
  <pea.elementA_0>MT</pea.elementA_0> 
  </ROW>
- <ROW MODID="2" RECORDID="491">
  <pce.project.g>yourSoLuckyJob</pce.project.g> 
  <pce.homePath.g>c:\BaldricsWorkFolder</pce.homePath.g> 
  <pea.elementA_0>SPANISH</pea.elementA_0> 
  </ROW>
  </FMPDSORESULT>

-------------------------------------------------------------------

from xml.sax import make_parser 
from xml.sax.handler import ContentHandler 
import os
import shutil

class FolderHandler(ContentHandler): 

 def __init__ (self, searchTerm): 
   self.searchTerm= searchTerm;
   self.isA_5Element, self.ishomePathElement, self.isA_1Element,
self.isProjectElement, self.isA_4Element, self.isA_0Element = 0, 0, 0,
0, 0, 0; 
    
 def startElement(self, name, attrs): 

   if name == 'ROW':      
     self.MODID = attrs.get('MODID',"")
     self.RECORDID = attrs.get('RECORDID',"")
   elif name == 'pce.project.g': 
     self.isProjectElement= 1; 
     self.PROJECT = "";
   elif name == 'pce.homePath.g':
     self.ishomePathElement= 1; 
     self.homePath = "";
   elif name == 'pea.elementA_0': 
     self.isA_0Element = 1;
     self.A_0 = "";
   
 def characters (self, ch): 
   if self.isProjectElement == 1: 
     self.PROJECT += ch
   if self.ishomePathElement== 1: 
     self.homePath += ch 
   if self.isA_0Element == 1: 
     self.A_0 += ch
     
     class DirectoryException(Exception): pass

     FilmScansFolders = self.homePath + '\\' + self.PROJECT + '\\' +
'FILM' + '\\' + 'SCANS' + '\\' + self.A_0 
     FilmTemplFolders = self.homePath + '\\' + self.PROJECT + '\\' +
'TEMPLATES'
  
     dirpath = os.path.join(FilmScansFolders)
     try:
         os.makedirs(dirpath)
     except OSError, e:
         if e.errno == 17:
             if not os.path.isdir(dirpath):
                 raise DirectoryException, "'%s' can neither be created
nor is it an existing directory" % dirpath
         else:
             raise # cannot handle it here     
     
     try:
         shutil.copytree('C:\Program Files\Python\TEMPLATES',
FilmTemplFolders) 
         print ''
     except os.error, why:
         print ''
                  
 def endElement(self, name): 
   if name == 'pce.project.g': 
     self.isProjectElement= 0
   if name == 'pce.homePath.g': 
     self.ishomePathElement= 0 
   if name == 'pea.elementA_0': 
     self.isA_0Element = 0 

searchTerm= '*'
parser = make_parser()    
curHandler = FolderHandler(searchTerm) 
parser.setContentHandler(curHandler) 
parser.parse(open('FM_folders.xml'))

-------------------------------------------------------------------

The aim (create folders on a network from a database with xml & Python):
        1) extract data from xml file (generated by Filemaker database)
        2) create complex folder structure (each row of the xml is set
of folders, all rows reside in the same home 'project folder'
        3) copy a folder into the 'project folder'
        4)the python file is called/executed by Filemaker (multi-user)

I am hoping people can feedback on areas that this script that clearly
needs tidying up.

Thanks all,

-
Rafal Kaniewski
EU:UK

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to