def __init__(self, encoding="utf-8", date=None, source_info_url=None, source_info_name=None, generator_info_url=None, generator_info_name=None): """ Arguments: 'encoding' -- The text encoding that will be used. *Defaults to 'utf-8'* 'date' -- The date this data was generated. *Optional* 'source_info_url' -- A URL for information about the source of the data. *Optional* 'source_info_name' -- A human readable description of 'source_info_url'. *Optional* 'generator_info_url' -- A URL for information about the program that is generating the XMLTV document. *Optional* 'generator_info_name' -- A human readable description of 'generator_info_url'. *Optional* """ if DEBUG >= 0: print "in Writer:__init__" self.encoding = encoding self.data = { 'date': date, 'source_info_url': source_info_url, 'source_info_name': source_info_name, 'generator_info_url': generator_info_url, 'generator_info_name': generator_info_name } self.root = Element('tv') for attr in self.data.keys(): if self.data[attr]: self.root.set(attr, self.data[attr])
def elementFromTag(tree, tag, parent=None): tagName = tag[1] if not tagName: tagName = "" ns = None if tag[0]: if tag[0] in tree.prefixmap: ns = tree.prefixmap[tag[0]] else: nsattr = "xmlns:%s" % tag[0] if nsattr in tag[2]: ns = tag[2][nsattr] del tag[2][nsattr] tree.prefixmap[tag[0]] = ns elif "xmlns" in tag[2]: ns = tag[2]["xmlns"] del tag[2]["xmlns"] elif parent is not None: ns = parent.ns localName = tag if ns: tagName = "{%s}%s" % (ns, tagName) elem = Element(tagName, tag[2]) try: elem.start = tree.err_info elem.end = None except: # will happen when parsing with cElementTree pass # print elem.localName if parent is not None: parent.append(elem) tree.nodemap[elem] = parent tree.nodes.append(elem) if elem.ns is not None: if elem.ns not in tree.tags: tree.tags[elem.ns] = {} tree.tags[elem.ns][elem.localName] = elem return elem
def generateSegment(self, coords, attr): featureMember = Element("gml:featureMember") feature = SubElement(featureMember, "segment") feature.set("gml:fid", str(attr["id"])) FID = SubElement(feature, "FID") FID.text = str(attr["id"]) geometryProperty = SubElement(feature, "gml:geometryProperty") lineString = SubElement(geometryProperty, "gml:LineString") coordinates = SubElement(lineString, "gml:coordinates") coordinates.text = " ".join(map(lambda x: "%s,%s" % x, coords)) for k, v in attr.iteritems(): if k in exportTags: SubElement(feature, "" + k).text = v ElementTree(featureMember).write(self.fh, "utf-8") self.fh.write("\n")
def generateMultiWay(self, attr): featureMember = Element("gml:featureMember") feature = SubElement(featureMember, "way") FID = SubElement(feature, "FID") FID.text = str(attr["id"]) geometryProperty = SubElement(feature, "gml:geometryProperty") lineString = SubElement(geometryProperty, "gml:MultiLineString") data = [] for i in attr['segments']: lsm = SubElement(lineString, "gml:lineStringMember") ls = SubElement(lsm, "gml:LineString") coordinates = SubElement(ls, "gml:coordinates") coordinates.text = " ".join(map(lambda x: "%s,%s" % x, i)) for k, v in attr.iteritems(): if k != "segments": SubElement(feature, "" + k).text = v ElementTree(featureMember).write(self.fh, "utf-8") self.fh.write("\n")
def test_is_package_ref(self): builder = ComponentDescriptor(None) deb_rule = Element('deb') udeb_rule = Element('udeb') dsc_rule = Element('dsc') rpm_rule = Element('rpm') srpm_rule = Element('srpm') component_rule = Element('component') assert builder.is_package_ref(deb_rule) assert builder.is_package_ref(udeb_rule) assert builder.is_package_ref(dsc_rule) assert builder.is_package_ref(rpm_rule) assert builder.is_package_ref(srpm_rule) assert not builder.is_package_ref(component_rule)
def _modify_config_file(self, instance, config_file, seed_ips, token): # XML (0.6.x) if config_file.endswith(".xml"): remote_file = "storage-conf.xml" xml = parse_xml(urllib.urlopen(config_file)).getroot() # Seeds seeds = xml.find("Seeds") if seeds is not None: while seeds.getchildren(): seeds.remove(seeds.getchildren()[0]) else: seeds = Element("Seeds") xml.append(seeds) for seed_ip in seed_ips: seed = Element("Seed") seed.text = seed_ip seeds.append(seed) # Initial token initial_token = xml.find("InitialToken") if initial_token is None: initial_token = Element("InitialToken") xml.append(initial_token) initial_token.text = token # Logs commit_log_directory = xml.find("CommitLogDirectory") if commit_log_directory is None: commit_log_directory = Element("CommitLogDirectory") xml.append(commit_log_directory) commit_log_directory.text = "/mnt/cassandra-logs" # Data data_file_directories = xml.find("DataFileDirectories") if data_file_directories is not None: while data_file_directories.getchildren(): data_file_directories.remove(data_file_directories.getchildren()[0]) else: data_file_directories = Element("DataFileDirectories") xml.append(data_file_directories) data_file_directory = Element("DataFileDirectory") data_file_directory.text = "/mnt/cassandra-data" data_file_directories.append(data_file_directory) # listen address listen_address = xml.find("ListenAddress") if listen_address is None: listen_address = Element("ListenAddress") xml.append(listen_address) listen_address.text = "" # thrift address thrift_address = xml.find("ThriftAddress") if thrift_address is None: thrift_address = Element("ThriftAddress") xml.append(thrift_address) thrift_address.text = "" fd, temp_file = tempfile.mkstemp(prefix='storage-conf.xml_', text=True) os.write(fd, dump_xml(xml)) os.close(fd) # YAML (0.7.x) elif config_file.endswith(".yaml"): remote_file = "cassandra.yaml" yaml = parse_yaml(urllib.urlopen(config_file)) yaml['seeds'] = seed_ips yaml['initial_token'] = token yaml['data_file_directories'] = ['/mnt/cassandra-data'] yaml['commitlog_directory'] = '/mnt/cassandra-logs' yaml['listen_address'] = str(instance.private_dns_name) yaml['rpc_address'] = str(instance.public_dns_name) fd, temp_file = tempfile.mkstemp(prefix='cassandra.yaml_', text=True) os.write(fd, dump_yaml(yaml)) os.close(fd) else: raise Exception("Configuration file must be one of xml or yaml") return temp_file, remote_file
def _modify_config_file(self, instance, config_file, seed_ips, token): # XML (0.6.x) if config_file.endswith(".xml"): remote_file = "storage-conf.xml" xml = parse_xml(urllib.urlopen(config_file)).getroot() # Seeds seeds = xml.find("Seeds") if seeds is not None: while seeds.getchildren(): seeds.remove(seeds.getchildren()[0]) else: seeds = Element("Seeds") xml.append(seeds) for seed_ip in seed_ips: seed = Element("Seed") seed.text = seed_ip seeds.append(seed) # Initial token initial_token = xml.find("InitialToken") if initial_token is None: initial_token = Element("InitialToken") xml.append(initial_token) initial_token.text = token # Logs commit_log_directory = xml.find("CommitLogDirectory") if commit_log_directory is None: commit_log_directory = Element("CommitLogDirectory") xml.append(commit_log_directory) commit_log_directory.text = "/mnt/cassandra-logs" # Data data_file_directories = xml.find("DataFileDirectories") if data_file_directories is not None: while data_file_directories.getchildren(): data_file_directories.remove( data_file_directories.getchildren()[0]) else: data_file_directories = Element("DataFileDirectories") xml.append(data_file_directories) data_file_directory = Element("DataFileDirectory") data_file_directory.text = "/mnt/cassandra-data" data_file_directories.append(data_file_directory) # listen address listen_address = xml.find("ListenAddress") if listen_address is None: listen_address = Element("ListenAddress") xml.append(listen_address) listen_address.text = "" # thrift address thrift_address = xml.find("ThriftAddress") if thrift_address is None: thrift_address = Element("ThriftAddress") xml.append(thrift_address) thrift_address.text = "" fd, temp_file = tempfile.mkstemp(prefix='storage-conf.xml_', text=True) os.write(fd, dump_xml(xml)) os.close(fd) # YAML (0.7.x) elif config_file.endswith(".yaml"): remote_file = "cassandra.yaml" yaml = parse_yaml(urllib.urlopen(config_file)) yaml['seeds'] = seed_ips yaml['initial_token'] = token yaml['data_file_directories'] = ['/mnt/cassandra-data'] yaml['commitlog_directory'] = '/mnt/cassandra-logs' yaml['listen_address'] = str(instance.private_dns_name) yaml['rpc_address'] = str(instance.public_dns_name) fd, temp_file = tempfile.mkstemp(prefix='cassandra.yaml_', text=True) os.write(fd, dump_yaml(yaml)) os.close(fd) else: raise Exception("Configuration file must be one of xml or yaml") return temp_file, remote_file
handlerclass = get_tree_handler(tree, tree.current, default_completion.get(lang)) values = handlerclass.values(attr, tree) if not values: return None values.sort() return values # configure catalogs to use basedir = os.path.dirname(os.path.dirname(os.getcwd())) catalogs = os.path.join(basedir, "test", "stuff", "xml") getService().setCatalogs([os.path.join(catalogs, "testcat.xml")]) from cElementTree import Element tree = koXMLTreeService.XMLDocument() tree.root = tree.current = Element('') handlerclass = get_tree_handler(tree, tree.current) assert handlerclass != None, "no handler class for empty tree" xml = """<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" indent="yes"/> <html> < """ tags = getValidTagNames(xml, lang="XSLT") assert tags == ['body', 'head'], \ "invalid output tags for stylesheet" xml = "<" assert getValidTagNames(xml) == None, "invalid children for html"
class Writer: """ A class for generating XMLTV data **All strings passed to this class must be Unicode, except for dictionary keys** """ def __init__(self, encoding="utf-8", date=None, source_info_url=None, source_info_name=None, generator_info_url=None, generator_info_name=None): """ Arguments: 'encoding' -- The text encoding that will be used. *Defaults to 'utf-8'* 'date' -- The date this data was generated. *Optional* 'source_info_url' -- A URL for information about the source of the data. *Optional* 'source_info_name' -- A human readable description of 'source_info_url'. *Optional* 'generator_info_url' -- A URL for information about the program that is generating the XMLTV document. *Optional* 'generator_info_name' -- A human readable description of 'generator_info_url'. *Optional* """ if DEBUG >= 0: print "in Writer:__init__" self.encoding = encoding self.data = { 'date': date, 'source_info_url': source_info_url, 'source_info_name': source_info_name, 'generator_info_url': generator_info_url, 'generator_info_name': generator_info_name } self.root = Element('tv') for attr in self.data.keys(): if self.data[attr]: self.root.set(attr, self.data[attr]) def setattr(self, node, attr, value): """ setattr(node, attr, value) -> None Set 'attr' in 'node' to 'value' """ if DEBUG >= 0: print "in setattr(self, node, attr, value)" node.set(attr, value.encode(self.encoding)) def settext(self, node, text, with_lang=True): """ settext(node, text) -> None Set 'node's text content to 'text' """ if DEBUG >= 0: print "in settext(self, node, text, with_lang=True)" if with_lang: if text[0] == None: node.text = None else: node.text = text[0].encode(self.encoding) if text[1]: node.set('lang', text[1].encode(self.encoding)) else: if text == None: node.text = None else: node.text = text.encode(self.encoding) def seticons(self, node, icons): """ seticon(node, icons) -> None Create 'icons' under 'node' """ if DEBUG >= 0: print "in seticons(self, node, icons)" for icon in icons: if not icon.has_key('src'): raise ValueError("'icon' element requires 'src' attribute") i = SubElement(node, 'icon') for attr in ('src', 'width', 'height'): if icon.has_key(attr): self.setattr(i, attr, icon[attr]) def set_zero_ormore(self, programme, element, p): """ set_zero_ormore(programme, element, p) -> None Add nodes under p for the element 'element', which occurs zero or more times with PCDATA and a 'lang' attribute """ if DEBUG >= 0: print "in set_zero_ormore(self, programme, element, p)" if programme.has_key(element): for item in programme[element]: e = SubElement(p, element) self.settext(e, item) def set_zero_orone(self, programme, element, p): """ set_zero_ormore(programme, element, p) -> None Add nodes under p for the element 'element', which occurs zero times or once with PCDATA and a 'lang' attribute """ if DEBUG >= 0: print "in set_zero_orone(self, programme, element, p)" if programme.has_key(element): e = SubElement(p, element) self.settext(e, programme[element]) def addProgramme(self, programme): """ Add a single XMLTV 'programme' Arguments: 'programme' -- A dict representing XMLTV data """ if DEBUG >= 0: print "in addProgramme(self, programme)" p = SubElement(self.root, 'programme') # programme attributes for attr in ('start', 'channel'): if programme.has_key(attr): self.setattr(p, attr, programme[attr]) else: raise ValueError("'programme' must contain '%s' attribute" % attr) for attr in ('stop', 'pdc-start', 'vps-start', 'showview', 'videoplus', 'clumpidx'): if programme.has_key(attr): self.setattr(p, attr, programme[attr]) for title in programme['title']: t = SubElement(p, 'title') self.settext(t, title) # Sub-title and description for element in ('sub-title', 'desc'): self.set_zero_ormore(programme, element, p) # Credits if programme.has_key('credits'): c = SubElement(p, 'credits') for credtype in ('director', 'actor', 'writer', 'adapter', 'producer', 'presenter', 'commentator', 'guest'): if programme['credits'].has_key(credtype): for name in programme['credits'][credtype]: cred = SubElement(c, credtype) self.settext(cred, name, with_lang=False) # Date if programme.has_key('date'): d = SubElement(p, 'date') self.settext(d, programme['date'], with_lang=False) # Category self.set_zero_ormore(programme, 'category', p) # Language and original language for element in ('language', 'orig-language'): self.set_zero_orone(programme, element, p) # Length if programme.has_key('length'): l = SubElement(p, 'length') self.setattr(l, 'units', programme['length']['units']) self.settext(l, programme['length']['length'], with_lang=False) # Icon if programme.has_key('icon'): self.seticons(p, programme['icon']) # URL if programme.has_key('url'): for url in programme['url']: u = SubElement(p, 'url') self.settext(u, url, with_lang=False) # Country self.set_zero_ormore(programme, 'country', p) # Episode-num if programme.has_key('episode-num'): for epnum in programme['episode-num']: e = SubElement(p, 'episode-num') self.setattr(e, 'system', epnum[1]) self.settext(e, epnum[0], with_lang=False) # Video details if programme.has_key('video'): e = SubElement(p, 'video') for videlem in ('aspect', 'quality'): if programme['video'].has_key(videlem): v = SubElement(e, videlem) self.settext(v, programme['video'][videlem], with_lang=False) for attr in ('present', 'colour'): if programme['video'].has_key(attr): a = SubElement(e, attr) if programme['video'][attr]: self.settext(a, 'yes', with_lang=False) else: self.settext(a, 'no', with_lang=False) # Audio details if programme.has_key('audio'): a = SubElement(p, 'audio') if programme['audio'].has_key('stereo'): s = SubElement(a, 'stereo') self.settext(s, programme['audio']['stereo'], with_lang=False) if programme['audio'].has_key('present'): p = SubElement(a, 'present') if programme['audio']['present']: self.settext(p, 'yes', with_lang=False) else: self.settext(p, 'no', with_lang=False) # Previously shown if programme.has_key('previously-shown'): ps = SubElement(p, 'previously-shown') for attr in ('start', 'channel'): if programme['previously-shown'].has_key(attr): self.setattr(ps, attr, programme['previously-shown'][attr]) # Premiere / last chance for element in ('premiere', 'last-chance'): self.set_zero_orone(programme, element, p) # New if programme.has_key('new'): n = SubElement(p, 'new') # Subtitles if programme.has_key('subtitles'): for subtitles in programme['subtitles']: s = SubElement(p, 'subtitles') if subtitles.has_key('type'): self.setattr(s, 'type', subtitles['type']) if subtitles.has_key('language'): l = SubElement(s, 'language') self.settext(l, subtitles['language']) # Rating if programme.has_key('rating'): for rating in programme['rating']: r = SubElement(p, 'rating') if rating.has_key('system'): self.setattr(r, 'system', rating['system']) v = SubElement(r, 'value') self.settext(v, rating['value'], with_lang=False) if rating.has_key('icon'): self.seticons(r, rating['icon']) # Star rating if programme.has_key('star-rating'): sr = SubElement(p, 'star-rating') v = SubElement(sr, 'value') self.settext(v, programme['star-rating']['value'], with_lang=False) if programme['star-rating'].has_key('icon'): self.seticons(sr, programme['star-rating']['icon']) def addChannel(self, channel): """ add a single XMLTV 'channel' Arguments: 'channel' -- A dict representing XMLTV data """ if DEBUG >= 0: print "in addChannel(self, channel)" c = SubElement(self.root, 'channel') self.setattr(c, 'id', channel['id']) # Display Name for display_name in channel['display-name']: dn = SubElement(c, 'display-name') self.settext(dn, display_name) # Icon if channel.has_key('icon'): self.seticons(c, channel['icon']) # URL if channel.has_key('url'): for url in channel['url']: u = SubElement(c, 'url') self.settext(u, url, with_lang=False) def write(self, file): """ write(file) -> None Write XML to filename of file object in 'file' """ if DEBUG >= 0: print "in write(self, file)" et = ElementTree(self.root) et.write(file)