Source code for nxpy.maven.assembly_descriptor
# nxpy.maven package ---------------------------------------------------------
# Copyright Nicola Musatti 2010 - 2017
# Use, modification, and distribution are subject to the Boost Software
# License, Version 1.0. (See accompanying file LICENSE.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
# See http://nxpy.sourceforge.net for library home page. ---------------------
r"""
Manipulation of Maven Assembly Plugin Assembly Descriptor files.
"""
from __future__ import absolute_import
import os.path
import nxpy.xml.util
[docs]class BadAssemblyDescriptorFileError(EnvironmentError):
pass
[docs]class AssemblyDescriptor(object):
[docs] def __init__(self, path):
self.path = os.path.realpath(path)
self.dir = os.path.split(self.path)[0]
try:
self.tree = nxpy.xml.util.parse(path)
except IOError:
raise BadAssemblyDescriptorFileError(path)
self.root = self.tree.getroot()
self._ns = nxpy.xml.util.Namespace(element=self.root)
depset = self._ns.find(self.root, "dependencySets")
deps = None
if depset is not None:
if len(depset) > 0:
deps = depset[0]
else:
deps = self._ns.SubElement(depset, "dependencySet")
if deps is None:
raise BadAssemblyDescriptorFileError(path)
self.includes = nxpy.xml.util.SequenceElement(deps, "includes", "include", self._ns.url)
self.excludes = nxpy.xml.util.SequenceElement(deps, "excludes", "exclude", self._ns.url)
self._writer = nxpy.xml.util.Writer(self._make_root_tag(), {}, 4)
_schema_loc = nxpy.xml.util.QName(
r"{http://www.w3.org/2001/XMLSchema-instance}schemaLocation")
_root_fmt = (
r'''<{0}
xmlns="{1}"
xmlns:xsi="{2}"
xsi:{3}="{4}">'''
)
def _make_root_tag(self):
root = nxpy.xml.util.QName(self.root.tag)
return AssemblyDescriptor._root_fmt.format(root.tag, root.url,
AssemblyDescriptor._schema_loc.url, AssemblyDescriptor._schema_loc.tag,
self.root.get(AssemblyDescriptor._schema_loc.text))
@property
def modified(self):
return ( ( self.includes and self.includes.modified ) or
( self.excludes and self.excludes.modified ) )
[docs] def write(self, where):
if not where:
where = self.path
self._writer.write(self.root, where)
[docs] def save(self):
if self.modified:
self.write(None)
self.includes.modified = False
self.excludes.modified = False
return True
return False