Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 21 additions & 13 deletions pymaven/pom.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@
import logging
import re

from lxml import etree
try:
from lxml import etree
except ImportError:
from sanexml import etree
FALLBACK = True

import six

from .artifact import Artifact
Expand All @@ -42,14 +47,16 @@
</project>
"""

POM_PARSER = etree.XMLParser(
recover=True,
# we keep comments in case there is a license in the comments
remove_comments=False,
remove_pis=True,
remove_blank_text=True,
resolve_entities=False
)

def POM_PARSER():
return etree.XMLParser(
recover=True,
# we keep comments in case there is a license in the comments
remove_comments=False,
remove_pis=True,
remove_blank_text=True,
resolve_entities=False
)

PROPERTY_RE = re.compile(r'\$\{(.*?)\}')
STRIP_NAMESPACE_RE = re.compile("<project(.|\\s)*?>", re.MULTILINE)
Expand Down Expand Up @@ -79,10 +86,11 @@ def __init__(self, coordinate, client=None, pom_data=None, ns_aware=False):
"""
if pom_data is not None:
# remove all namespaces
pom_data = pom_data.strip().strip("'").strip("\n'")
pom_data = strip_namespace(pom_data)
if isinstance(pom_data, six.text_type):
pom_data = pom_data.encode("utf-8")
pom_data = etree.fromstring(pom_data, parser=POM_PARSER)
pom_data = etree.fromstring(pom_data, parser=POM_PARSER())
self._pom_data = pom_data
self._client = client

Expand Down Expand Up @@ -273,7 +281,7 @@ def _find_properties(self, elem=None):
properties = OrderedDict()
project_properties = _find(elem, "properties")
if project_properties is not None:
for prop in project_properties.iterchildren():
for prop in project_properties.iter():
if prop.tag == 'property':
name = prop.get('name')
value = prop.get('value')
Expand Down Expand Up @@ -421,15 +429,15 @@ def pom_data(self):
"""
if self._client is None:
_pom_data = EMPTY_POM.format(self)
return etree.fromstring(_pom_data.encode('utf-8'), parser=POM_PARSER)
return etree.fromstring(_pom_data.strip("'").strip("\n'").encode('utf-8'), parser=POM_PARSER())

contents = self._client.get_artifact(self.coordinate).contents
with contents as fh:
contents_text = fh.read()
if not isinstance(contents_text, six.text_type):
contents_text = contents_text.decode('utf-8')
contents_text = strip_namespace(contents_text)
return etree.fromstring(contents_text, parser=POM_PARSER)
return etree.fromstring(contents_text, parser=POM_PARSER())

@property
@memoize("_properties")
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
lxml>=4.0.0,<5.0.0
requests>=2.7.0,<3.0.0
six>=1.10,<2.0
sanexml