Changeset f1550c8 for fedd


Ignore:
Timestamp:
May 19, 2010 2:01:16 AM (15 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-3.01, version-3.02
Children:
f9c2f63
Parents:
d743d60
Message:

Modify topology_from_xml to find embedded topologies.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/federation/topdl.py

    rd743d60 rf1550c8  
    483483
    484484    class parser:
    485         def __init__(self):
     485        def __init__(self, top):
    486486            self.stack = [ ]
    487487            self.chars = ""
     
    490490            self.current = { }
    491491            self.in_cdata = False
     492            self.in_top = False
     493            self.top = top
    492494       
    493495        def start_element(self, name, attrs):
     
    495497            self.have_chars = False
    496498            self.key = str(name)
    497             self.stack.append((self.current, self.key))
    498             self.current = { }
     499
     500            if name == self.top:
     501                self.in_top = True
     502
     503            if self.in_top:
     504                self.stack.append((self.current, self.key))
     505                self.current = { }
    499506
    500507        def end_element(self, name):
    501             if self.have_chars:
    502                 self.chars = self.chars.strip()
    503                 if len(self.chars) >0:
    504                     addit = self.chars
     508            if self.in_top:
     509                if self.have_chars:
     510                    self.chars = self.chars.strip()
     511                    if len(self.chars) >0:
     512                        addit = self.chars
     513                    else:
     514                        addit = self.current
    505515                else:
    506516                    addit = self.current
    507             else:
    508                 addit = self.current
    509 
    510             parent, key = self.stack.pop()
    511             if parent.has_key(key):
    512                 if isinstance(parent[key], list):
    513                     parent[key].append(addit)
     517
     518                parent, key = self.stack.pop()
     519                if parent.has_key(key):
     520                    if isinstance(parent[key], list):
     521                        parent[key].append(addit)
     522                    else:
     523                        parent[key] = [parent[key], addit]
    514524                else:
    515                     parent[key] = [parent[key], addit]
    516             else:
    517                 parent[key] = addit
    518             self.current = parent
    519             self.key = key
     525                    parent[key] = addit
     526                self.current = parent
     527                self.key = key
    520528
    521529            self.chars = ""
    522530            self.have_chars = False
    523531
     532            if name == self.top:
     533                self.in_top= False
     534
    524535        def char_data(self, data):
    525             self.have_chars = True
    526             self.chars += data
    527 
    528     p = parser()
     536            if self.in_top:
     537                self.have_chars = True
     538                self.chars += data
     539
     540    p = parser(top=top)
    529541    xp = xml.parsers.expat.ParserCreate()
    530542
Note: See TracChangeset for help on using the changeset viewer.