Thursday, June 24, 2010

The first version of PyDAS2


from amara import bindery

class PyDAS2Element(object):
def __init__(self,**kwargs):
for k,v in kwargs.items():
setattr(self,k,v)
def __str__(self):
return str(self.__class__.__name__)[6:]


def attribute_wrapper(attr):
ret = {}
for k,v in attr.items():
ret[str(k[1])] = str(v)
return ret

def make_element(name,obj):
#return eval('PyDAS2'+name)(**attribute_wrapper(obj.xml_attributes))
return PyDAS2Element(**attribute_wrapper(obj.xml_attributes))

def recursive_parse(root,obj_list,parent_name=None):
if parent_name:
par_name = '.'.join((parent_name,root.__class__.__name__))
else:
par_name = root.__class__.__name__
for i in range(0,len(root.xml_children)): #iterate all child element nodes
if root.xml_children[i].xml_type == 'element':
ele_name = root.xml_children[i].__class__.__name__
ele_obj = root.xml_children[i]
#print par_name,ele_name,attribute_wrapper(ele_obj.xml_attributes)
obj_list.append((par_name,ele_name,attribute_wrapper(ele_obj.xml_attributes)))
recursive_parse(root.xml_children[i],obj_list,par_name)

def parse(xml):
objs = []
root = bindery.parse(xml)
recursive_parse(root,objs)
return objs


def test_source(xml):
objs = parse(xml)
base = ''
for par_name,ele_name,ele_attr in objs:
print par_name,ele_name,ele_attr
#if ele_name == 'SOURCES':
# base = ele_attr['base']
#if ele_name == 'VERSION':
# print ''.join((base,ele_attr['uri']))

#if ele_name == 'CAPABILITY':
# if ele_attr['type'] == 'features':
# print ''.join((base,ele_attr['query_uri']))

if __name__=='__main__':
feature_url = """http://netaffxdas.affymetrix.com/das2/das2/genome/H_sapiens_Mar_2006/features?
segment=http://netaffxdas.affymetrix.com/das2/sequence/H_sapiens_Mar_2006/chr21;
overlaps=26010000:26060000;
type=http://netaffxdas.affymetrix.com/das2/sequence/H_sapiens_Mar_2006/knownGene
"""

#test_source('http://netaffxdas.affymetrix.com/das2/sources')
#test_source('http://netaffxdas.affymetrix.com/das2/genome/H_sapiens_Feb_2009/segments')
test_source('http://netaffxdas.affymetrix.com/das2/genome/H_sapiens_Mar_2006/types')
#test_source('http://netaffxdas.affymetrix.com/das2/genome/H_sapiens_Feb_2009/features')


No comments:

Post a Comment