本文整理汇总了Python中cia.LibCIA.XML类的典型用法代码示例。如果您正苦于以下问题:Python XML类的具体用法?Python XML怎么用?Python XML使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了XML类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: consolidateFiles
def consolidateFiles(self, xmlFiles):
"""Given a <files> element, find the directory common to all files
and return a 2-tuple with that directory followed by
a list of files within that directory.
"""
files = []
if xmlFiles:
for fileTag in XML.getChildElements(xmlFiles):
if fileTag.nodeName == 'file':
files.append(XML.shallowText(fileTag))
# If we only have one file, return it as the prefix.
# This prevents the below regex from deleting the filename
# itself, assuming it was a partial filename.
if len(files) == 1:
return files[0], []
# Start with the prefix found by commonprefix,
# then actually make it end with a directory rather than
# possibly ending with part of a filename.
prefix = re.sub("[^/]*$", "", posixpath.commonprefix(files))
endings = []
for file in files:
ending = file[len(prefix):].strip()
if ending == '':
ending = '.'
endings.append(ending)
return prefix, endings
示例2: parse
def parse(self, message):
"""Given a string of text in the original CIA commit format, return a <colorText>
element representing it as a DOM tree.
"""
# Initialize our model of the current text format in the original message
self.parsedState = ColorState()
self.document = XML.createRootNode()
# Initialize our stack of (element, ColorState) tuples representing
# the state of the XML document being generated. This starts out with
# our root element in it.
self.elementStack = [
(XML.addElement(self.document, "colorText"), ColorState())
]
# Break up the message into lines, each with its whitespace stripped.
# Run our lexical scanner on each line separately, turning it into
# a stream of events. Insert <br/> tags between lines.
lines = []
for line in message.split("\n"):
# Ignore extra whitespace
line = line.strip()
# Ignore blank lines
if line:
lines.append(line)
for i in xrange(len(lines)):
if i != 0:
XML.addElement(self.elementStack[-1][0], 'br')
self.lex(lines[i])
self.closeTags()
return self.document
示例3: component_files
def component_files(self, element, args):
"""Format the contents of our <files> tag as a tree with nested lists"""
from cia.LibCIA.Web import Template
files = XML.dig(args.message.xml, "message", "body", "commit", "files")
if not (files and XML.hasChildElements(files)):
return []
# First we organize the files into a tree of nested dictionaries.
# The dictionary we ultimately have FileTree render maps each node
# (file or directory) to a dictionary of its contents. The keys
# in these dictionaries can be any Nouvelle-renderable object
# produced by format_file.
#
# As a first step, we build a dictionary mapping path segment to
# [fileTag, children] lists. We then create a visual representation
# of each fileTag and generate the final dictionary.
fileTree = {}
for fileTag in XML.getChildElements(files):
if fileTag.nodeName == 'file':
# Separate the file into path segments and walk into our tree
node = [None, fileTree]
for segment in XML.shallowText(fileTag).split('/'):
if segment:
node = node[1].setdefault(segment, [None, {}])
# The leaf node owns this fileTag
node[0] = fileTag
return [Template.FileTree(self.format_file_tree(fileTree))]
示例4: preprocess
def preprocess(self):
message = XML.dig(self.xml, "message")
if not message:
raise XML.XMLValidityError("A Message's root node must be named 'message'")
# Stamp it with the current time if it has no timestamp yet
if not XML.dig(message, "timestamp"):
XML.addElement(message, "timestamp", "%d" % time.time())
示例5: dbIter
def dbIter(self):
if os.path.isfile(self.path):
dom = XML.parseStream(open(self.path))
for element in XML.getChildElements(dom.documentElement):
if element.nodeName == "ruleset":
yield element
else:
log.msg("The file %r does not exist, loading no rulesets" % self.path)
示例6: format
def format(self, args):
# Format each package inside each result set
packages = []
for results in XML.getChildElements(XML.dig(args.message.xml, "message", "body", "builder")):
if results.nodeName == 'results':
for package in XML.getChildElements(results):
if package.nodeName == 'package':
packages.append(self.format_package(package))
return self.joinMessage(args.message, packages)
示例7: textComponent
def textComponent(self, element, args, *path):
"""A convenience function for defining components that just look for a node
in the message and return its shallowText.
"""
element = XML.dig(args.message.xml, *path)
if element:
return [XML.shallowText(element)]
else:
return [MarkAsHidden()]
示例8: format
def format(self, args):
if not args.input:
return
project = XML.dig(args.message.xml, "message", "source", "project")
if project:
from cia.LibCIA.IRC.Formatting import format
prefix = format("%s:" % XML.shallowText(project), 'bold') + " "
return "\n".join([prefix + line for line in args.input.split("\n")])
else:
return args.input
示例9: getXMLMailHeaders
def getXMLMailHeaders(self, document):
"""Return a <mailHeaders> tag representing a subset of the headers
for this message. This is placed in the <generator> tag of any
message passing through this module, to document and log the
message's true source.
"""
node = document.createElementNS(None, "mailHeaders")
for name, value in self.message.items():
if name in interestingHeaders:
XML.addElement(node, "header", content=str(value)).setAttributeNS(None, 'name', name)
return node
示例10: format_generator
def format_generator(self, gen):
"""Format the information contained in this message's <generator> tag"""
name = XML.digValue(gen, str, "name")
url = XML.digValue(gen, str, "url")
version = XML.digValue(gen, str, "version")
if url:
name = tag('a', href=url)[ name ]
items = ["Generated by ", Template.value[ name ]]
if version:
items.extend([" version ", version])
return items
示例11: render_rows
def render_rows(self, context):
if not self.message:
return []
rows = []
timestamp = XML.dig(self.message.xml, "message", "timestamp")
if timestamp:
rows.append(self.format_timestamp(timestamp))
generator = XML.dig(self.message.xml, "message", "generator")
if generator:
rows.append(self.format_generator(generator))
return rows
示例12: getSvnRevision
def getSvnRevision(self):
"""Return the current Subversion repository revision, or None
if we're not in an svn working copy or it can't be parsed.
"""
try:
entries = XML.parseString(open(".svn/entries").read()).documentElement
highestRev = 0
for tag in XML.getChildElements(entries):
if tag.nodeName == 'entry':
rev = tag.getAttributeNS(None, 'committed-rev')
if rev and rev > highestRev:
highestRev = rev
return highestRev
except:
return None
示例13: format_results
def format_results(self, package):
"""Given a package, returns a formatted representation of all results for that package"""
results = []
for element in XML.getChildElements(package):
f = getattr(self, 'result_' + element.nodeName, None)
if f:
results.append(f(element))
示例14: render_message
def render_message(self, context):
if not self.message:
context['request'].setResponseCode(404)
return self.notFoundMessage
# Try to format it using several media, in order of decreasing preference.
# The 'xhtml-long' formatter lets messages define a special formatter to
# use when an entire page is devoted to their one message, possibly showing
# it in greater detail. 'xhtml' is the formatter most messages should have.
# 'plaintext' is a nice fallback.
#
# This default list of media to try can be overridden with an argument in our URL.
if 'media' in context['args']:
mediaList = context['args']['media'][0].split()
else:
mediaList = ('xhtml-long', 'xhtml', 'plaintext')
for medium in mediaList:
try:
formatted = Formatters.getFactory().findMedium(
medium, self.message).formatMessage(self.message)
except Message.NoFormatterError:
continue
return formatted
# Still no luck? Display a warning message and a pretty-printed XML tree
return [
tag('h1')[ "No formatter available" ],
XML.htmlPrettyPrint(self.message.xml),
]
示例15: syncFromServer
def syncFromServer(self):
"""Update this Bot from the RPC server, if necessary.
Right now the only task this performs is to store the
server's ruleset if filterMode is 'unknown'.
"""
if self.filter_mode != FILTER.UNKNOWN:
return
ruleset = self._loadRuleset()
if not ruleset:
# If there's no ruleset, mark the bot as inactive.
self.filter_mode = FILTER.INACTIVE
self.save()
return
# Parse the ruleset using LibCIA's XML library
from cia.LibCIA import XML
dom = XML.parseString(ruleset)
# XXX: We should try to reduce the ruleset to one of
# the other FILTER.* modes if possible. For now,
# we'll always import existing rulesets as
# FILTER.CUSTOM.
# Flatten the contents of the <ruleset> element, clean up
# the resulting text, and save that as a custom filter.
text = ''.join([n.toxml() for n in dom.documentElement.childNodes])
self.filter_mode = FILTER.CUSTOM
self.custom_ruleset = clean_up_text(text)
self.save()