XML Schemas
The schemas for CADAC are broken up into very small, reusable pieces. The main reasons for this is to allow reuse of element for the web service (e.g., validating small POST messages), and to map them to classes that will implement the data types.
List of Schemas
tag.py
>>> import tag
>>> t = tag.Tag('grad','rpwagner')
>>> print t.toxml()
<?xml version="1.0" encoding="utf-8"?>
<Tag xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd" user="rpwagner">grad</Tag>
>>> u = tag.Tag('grad2','dcollins')
>>> tl = tag.TagList([t,u])
>>> print tl.toxml()
<?xml version="1.0" encoding="utf-8"?>
<TagList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd">
<Tag user="rpwagner">grad</Tag>
<Tag user="dcollins">grad2</Tag>
</TagList>
link.py
>>> import link
>>> l = link.LinkType('Computer','Cobalt','http://ncsa.uiuc.edu')
>>> print l.toxml()
<?xml version="1.0" encoding="utf-8"?>
<Computer url="http://ncsa.uiuc.edu" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd">Cobalt</Computer>
parameter.py
>>> import parameter
>>> p = parameter.Parameter('cosmo',1.0,'http://lca.ucsd.edu')
>>> print p.toxml()
<?xml version="1.0" encoding="utf-8"?>
<Parameter url="http://lca.ucsd.edu" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd" name="cosmo">1.0</Parameter>
>>> q = parameter.Parameter('gosmo',2.0,'http://ppcluster.ucsd.edu')
>>> pl = parameter.ParameterList([p,q])
>>> print pl.toxml()
<?xml version="1.0" encoding="utf-8"?>
<ParameterList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd">
<Parameter url="http://lca.ucsd.edu" name="cosmo">1.0</Parameter>
<Parameter url="http://ppcluster.ucsd.edu" name="gosmo">2.0</Parameter>
</ParameterList>
program.py
>>> import program
>>> p = program.Program('Enzo',1.0,'http://lca.ucsd.edu/enzo')
>>> print p.toxml()
<?xml version="1.0" encoding="utf-8"?>
<Program url="http://lca.ucsd.edu/enzo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd" version="1.0">Enzo</Program>
userfield.py
>>> import userfield
>>> u = userfield.UserField('mach',2.0)
>>> print u.toxml()
<?xml version="1.0" encoding="utf-8"?>
<UserField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd" name="mach">2.0</UserField>
>>> v = userfield.UserField('clfd',0.125)
>>> ul = userfield.UserFieldList([u,v])
>>> print ul.toxml()
<?xml version="1.0" encoding="utf-8"?>
<UserFieldList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd">
<UserField name="mach">2.0</UserField>
<UserField name="clfd">0.125</UserField>
</UserFieldList>
Long Winded Demo
>>> import cadac
>>> ts = []
>>> for i in range(0,4):
... ts.append(cadac.Tag(i,'rpwagner'))
...
>>> tl = cadac.TagList(ts)
>>> print tl.toxml()
<?xml version="1.0" encoding="utf-8"?>
<TagList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd">
<Tag user="rpwagner">0</Tag>
<Tag user="rpwagner">1</Tag>
<Tag user="rpwagner">2</Tag>
<Tag user="rpwagner">3</Tag>
</TagList>
>>> ps = []
>>> for i in range(0,3):
... ps.append(cadac.Parameter('param'+str(i),i,'http://lca.ucsd.edu/enzo/param'+str(i)))
...
>>> pl = cadac.ParameterList(ps)
>>> print pl.toxml()
<?xml version="1.0" encoding="utf-8"?>
<ParameterList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd">
<Parameter url="http://lca.ucsd.edu/enzo/param0" name="param0">0</Parameter>
<Parameter url="http://lca.ucsd.edu/enzo/param1" name="param1">1</Parameter>
<Parameter url="http://lca.ucsd.edu/enzo/param2" name="param2">2</Parameter>
</ParameterList>
>>> p = cadac.Program('Enzo',1052,'svn://mngrid.ucds.edu/Enzo/trunk/devel/Enzo')
>>> us = []
>>> for i in range(0,5):
... us.append(cadac.UserField('mydat'+str(i),10.4*i))
...
>>> ul = cadac.UserFieldList(us)
>>> print ul.toxml()
<?xml version="1.0" encoding="utf-8"?>
<UserFieldList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd">
<UserField name="mydat0">0.0</UserField>
<UserField name="mydat1">10.4</UserField>
<UserField name="mydat2">20.8</UserField>
<UserField name="mydat3">31.2</UserField>
<UserField name="mydat4">41.6</UserField>
</UserFieldList>
>>> u = cadac.User('rpwagner','http://lca.ucsd.edu/projects/rpwagner')
>>> c = cadac.Computer('ppcluster','http://ppcluster.ucsd.edu')
>>> r1 = cadac.Run('r1',c,p,u,ul,tl,pl,ToDo='Way too much!',Comments='Disabled')
>>> r2 = cadac.Run('r1',c,p,u,ul,tl,ToDo='Way too much!',Comments='Disabled',Nodes=2,TasksPerNode=8,Account='MUT')
>>> print r1.toxml()
<?xml version="1.0" encoding="utf-8"?>
<Run xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd">
<Name>r1</Name>
<Computer url="http://ppcluster.ucsd.edu">ppcluster</Computer>
<Program url="svn://mngrid.ucds.edu/Enzo/trunk/devel/Enzo" version="1052">Enzo</Program>
<User url="http://lca.ucsd.edu/projects/rpwagner">rpwagner</User>
<ToDo>Way too much!</ToDo>
<Comments>Disabled</Comments>
<UserFieldList>
<UserField name="mydat0">0.0</UserField>
<UserField name="mydat1">10.4</UserField>
<UserField name="mydat2">20.8</UserField>
<UserField name="mydat3">31.2</UserField>
<UserField name="mydat4">41.6</UserField>
</UserFieldList>
<TagList>
<Tag user="rpwagner">0</Tag>
<Tag user="rpwagner">1</Tag>
<Tag user="rpwagner">2</Tag>
<Tag user="rpwagner">3</Tag>
</TagList>
<ParameterList>
<Parameter url="http://lca.ucsd.edu/enzo/param0" name="param0">0</Parameter>
<Parameter url="http://lca.ucsd.edu/enzo/param1" name="param1">1</Parameter>
<Parameter url="http://lca.ucsd.edu/enzo/param2" name="param2">2</Parameter>
</ParameterList>
</Run>
>>> print r2.toxml()
<?xml version="1.0" encoding="utf-8"?>
<Run xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd">
<Name>r1</Name>
<Computer url="http://ppcluster.ucsd.edu">ppcluster</Computer>
<Program url="svn://mngrid.ucds.edu/Enzo/trunk/devel/Enzo" version="1052">Enzo</Program>
<User url="http://lca.ucsd.edu/projects/rpwagner">rpwagner</User>
<Account>MUT</Account>
<ToDo>Way too much!</ToDo>
<Nodes>2</Nodes>
<Comments>Disabled</Comments>
<TasksPerNode>8</TasksPerNode>
<UserFieldList>
<UserField name="mydat0">0.0</UserField>
<UserField name="mydat1">10.4</UserField>
<UserField name="mydat2">20.8</UserField>
<UserField name="mydat3">31.2</UserField>
<UserField name="mydat4">41.6</UserField>
</UserFieldList>
<TagList>
<Tag user="rpwagner">0</Tag>
<Tag user="rpwagner">1</Tag>
<Tag user="rpwagner">2</Tag>
<Tag user="rpwagner">3</Tag>
</TagList>
</Run>
>>> print r1.totuple()
('Run', [('Name', 'r1'), ('Computer', 'ppcluster', {'url': 'http://ppcluster.ucsd.edu'}), ('Program', 'Enzo', {'url': 'svn://mngrid.ucds.edu/Enzo/trunk/devel/Enzo', 'version': 1052}), ('User', 'rpwagner', {'url': 'http://lca.ucsd.edu/projects/rpwagner'}), ('ToDo', 'Way too much!'), ('Comments', 'Disabled'), ('UserFieldList', [('UserField', '0.0', {'name': 'mydat0'}), ('UserField', '10.4', {'name': 'mydat1'}), ('UserField', '20.8', {'name': 'mydat2'}), ('UserField', '31.2', {'name': 'mydat3'}), ('UserField', '41.6', {'name': 'mydat4'})]), ('TagList', [('Tag', '0', {'user': 'rpwagner'}), ('Tag', '1', {'user': 'rpwagner'}), ('Tag', '2', {'user': 'rpwagner'}), ('Tag', '3', {'user': 'rpwagner'})]), ('ParameterList', [('Parameter', '0', {'url': 'http://lca.ucsd.edu/enzo/param0', 'name': 'param0'}), ('Parameter', '1', {'url': 'http://lca.ucsd.edu/enzo/param1', 'name': 'param1'}), ('Parameter', '2', {'url': 'http://lca.ucsd.edu/enzo/param2', 'name': 'param2'})])])
>>> print r1.totuple(fmt='short')
('Run', [('Name', 'r1'), ('Computer', 'ppcluster', {'url': 'http://ppcluster.ucsd.edu'}), ('Program', 'Enzo', {'url': 'svn://mngrid.ucds.edu/Enzo/trunk/devel/Enzo', 'version': 1052}), ('User', 'rpwagner', {'url': 'http://lca.ucsd.edu/projects/rpwagner'})])
>>> rl = cadac.RunList([r1,r2])
>>> print rl.toxml()
<?xml version="1.0" encoding="utf-8"?>
<RunList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cadac.sdsc.edu/schema" xsi:schemaLocation="http://cadac.sdsc.edu/schema http://cadac.sdsc.edu/schema/run.xsd">
<Run>
<Name>r1</Name>
<Computer url="http://ppcluster.ucsd.edu">ppcluster</Computer>
<Program url="svn://mngrid.ucds.edu/Enzo/trunk/devel/Enzo" version="1052">Enzo</Program>
<User url="http://lca.ucsd.edu/projects/rpwagner">rpwagner</User>
</Run>
<Run>
<Name>r1</Name>
<Computer url="http://ppcluster.ucsd.edu">ppcluster</Computer>
<Program url="svn://mngrid.ucds.edu/Enzo/trunk/devel/Enzo" version="1052">Enzo</Program>
<User url="http://lca.ucsd.edu/projects/rpwagner">rpwagner</User>
<Account>MUT</Account>
<Nodes>2</Nodes>
<TasksPerNode>8</TasksPerNode>
</Run>
</RunList>
>>>
