Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def parse_xpath_test(self):
if not self.base_type.has_simple_content():
variables = {'value': XSD_BUILTIN_TYPES['anyType'].value}
else:
try:
builtin_type_name = self.base_type.content_type.primitive_type.local_name
except AttributeError:
variables = {'value': XSD_BUILTIN_TYPES['anySimpleType'].value}
else:
variables = {'value': XSD_BUILTIN_TYPES[builtin_type_name].value}
self.parser = XPath2Parser(
namespaces=self.namespaces,
variables=variables,
strict=False,
default_namespace=self.xpath_default_namespace,
schema=XMLSchemaProxy(self.schema, self)
)
try:
self.token = self.parser.parse(self.path)
except ElementPathError as err:
self.parse_error(err, elem=self.elem)
self.token = self.parser.parse('true()')
from .namespaces import get_namespace
from .etree import ElementTree, PyElementTree, SafeXMLParser, etree_tostring, etree_iter_location_hints
DEFUSE_MODES = ('always', 'remote', 'never')
XML_RESOURCE_XPATH_SYMBOLS = {
'position', 'last', 'not', 'and', 'or', '!=', '<=', '>=', '(', ')', 'text',
'[', ']', '.', ',', '/', '|', '*', '=', '<', '>', ':', '(end)', '(name)',
'(string)', '(float)', '(decimal)', '(integer)'
}
class XmlResourceXPathParser(XPath1Parser):
symbol_table = {k: v for k, v in XPath1Parser.symbol_table.items() if k in XML_RESOURCE_XPATH_SYMBOLS}
SYMBOLS = XML_RESOURCE_XPATH_SYMBOLS
XmlResourceXPathParser.build_tokenizer()
def is_remote_url(url):
return isinstance(url, string_base_type) and urlsplit(url).scheme not in ('', 'file')
def url_path_is_directory(url):
return os.path.isdir(urlsplit(url).path)
def url_path_is_file(url):
return os.path.isfile(urlsplit(url).path)
from .exceptions import XMLSchemaTypeError, XMLSchemaValueError, XMLSchemaURLError, XMLSchemaOSError
from .namespaces import get_namespace
from .etree import ElementTree, PyElementTree, SafeXMLParser, etree_tostring, etree_iter_location_hints
DEFUSE_MODES = ('always', 'remote', 'never')
XML_RESOURCE_XPATH_SYMBOLS = {
'position', 'last', 'not', 'and', 'or', '!=', '<=', '>=', '(', ')', 'text',
'[', ']', '.', ',', '/', '|', '*', '=', '<', '>', ':', '(end)', '(name)',
'(string)', '(float)', '(decimal)', '(integer)'
}
class XmlResourceXPathParser(XPath1Parser):
symbol_table = {k: v for k, v in XPath1Parser.symbol_table.items() if k in XML_RESOURCE_XPATH_SYMBOLS}
SYMBOLS = XML_RESOURCE_XPATH_SYMBOLS
XmlResourceXPathParser.build_tokenizer()
def is_remote_url(url):
return isinstance(url, string_base_type) and urlsplit(url).scheme not in ('', 'file')
def url_path_is_directory(url):
return os.path.isdir(urlsplit(url).path)
def url_path_is_file(url):
def test(self, elem):
try:
return self.token.boolean_value(list(self.token.select(context=XPathContext(elem))))
except (TypeError, ValueError):
return False
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianMonthDay.fromstring,
}, # MM-DD
{
'name': XSD_TIME,
'python_type': (unicode_type, str, datatypes.Time),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.Time.fromstring,
}, # hh:mm:ss
{
'name': XSD_DURATION,
'python_type': (unicode_type, str, datatypes.Duration),
'admitted_facets': FLOAT_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.Duration.fromstring,
}, # PnYnMnDTnHnMnS
# Other primitive types
{
'name': XSD_QNAME,
'python_type': (unicode_type, str),
'admitted_facets': STRING_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT, qname_validator],
}, # prf:name (the prefix needs to be qualified with an in-scope namespace)
{
'name': XSD_NOTATION_TYPE,
'python_type': (unicode_type, str),
'admitted_facets': STRING_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
}, # type for NOTATION attributes: QNames of xs:notation declarations as value space.
{
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
}, # 64 bit floating point
{
'name': XSD_FLOAT,
'python_type': float,
'admitted_facets': FLOAT_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
}, # 32 bit floating point
# --- Dates and Times (not year related) ---
{
'name': XSD_GDAY,
'python_type': (unicode_type, str, datatypes.GregorianDay),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianDay.fromstring,
}, # DD
{
'name': XSD_GMONTH,
'python_type': (unicode_type, str, datatypes.GregorianMonth),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianMonth.fromstring,
}, # MM
{
'name': XSD_GMONTH_DAY,
'python_type': (unicode_type, str, datatypes.GregorianMonthDay),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianMonthDay.fromstring,
}, # MM-DD
{
'python_type': (unicode_type, str),
'base_type': XSD_DATETIME,
'to_python': datatypes.DateTime.fromstring,
'facets': [etree_element(XSD_EXPLICIT_TIMEZONE, value='required')],
}, # [-][Y*]YYYY-MM-DD[Thh:mm:ss] with required timezone
{
'name': XSD_DAY_TIME_DURATION,
'python_type': (unicode_type, str),
'base_type': XSD_DURATION,
'to_python': datatypes.DayTimeDuration.fromstring,
}, # PnYnMnDTnHnMnS with month an year equal to 0
{
'name': XSD_YEAR_MONTH_DURATION,
'python_type': (unicode_type, str),
'base_type': XSD_DURATION,
'to_python': datatypes.YearMonthDuration.fromstring,
}, # PnYnMnDTnHnMnS with day and time equals to 0
# --- xs:error primitive type (XSD 1.1) ---
{
'name': XSD_ERROR,
'python_type': type(None),
'admitted_facets': (),
'facets': [error_type_validator],
}, # xs:error has no value space and no lexical space
)
def xsd_builtin_types_factory(meta_schema, xsd_types, atomic_builtin_class=None):
"""
Builds the dictionary for XML Schema built-in types mapping.
"""
atomic_builtin_class = atomic_builtin_class or XsdAtomicBuiltin
def _parse(self):
super(XsdFacet, self)._parse()
try:
self.path = self.elem.attrib['test']
except KeyError as err:
self.parse_error(str(err), elem=self.elem)
self.path = 'true()'
try:
builtin_type_name = self.base_type.primitive_type.local_name
variables = {'value': datatypes.XSD_BUILTIN_TYPES[builtin_type_name].value}
except AttributeError:
variables = {'value': datatypes.XSD_BUILTIN_TYPES['anySimpleType'].value}
if 'xpathDefaultNamespace' in self.elem.attrib:
self.xpath_default_namespace = self._parse_xpath_default_namespace(self.elem)
else:
self.xpath_default_namespace = self.schema.xpath_default_namespace
self.parser = XPath2Parser(self.namespaces, strict=False, variables=variables,
default_namespace=self.xpath_default_namespace)
try:
self.token = self.parser.parse(self.path)
except ElementPathError as err:
self.parse_error(err, elem=self.elem)
self.token = self.parser.parse('true()')
'name': XSD_GDAY,
'python_type': (unicode_type, str, datatypes.GregorianDay),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianDay.fromstring,
}, # DD
{
'name': XSD_GMONTH,
'python_type': (unicode_type, str, datatypes.GregorianMonth),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianMonth.fromstring,
}, # MM
{
'name': XSD_GMONTH_DAY,
'python_type': (unicode_type, str, datatypes.GregorianMonthDay),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianMonthDay.fromstring,
}, # MM-DD
{
'name': XSD_TIME,
'python_type': (unicode_type, str, datatypes.Time),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.Time.fromstring,
}, # hh:mm:ss
{
'name': XSD_DURATION,
'python_type': (unicode_type, str, datatypes.Duration),
'admitted_facets': FLOAT_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'name': XSD_DATETIME,
'python_type': (unicode_type, str, datatypes.DateTime10),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.DateTime10.fromstring,
}, # [-][Y*]YYYY-MM-DD[Thh:mm:ss]
{
'name': XSD_DATE,
'python_type': (unicode_type, str, datatypes.Date10),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.Date10.fromstring,
}, # [-][Y*]YYYY-MM-DD
{
'name': XSD_GYEAR,
'python_type': (unicode_type, str, datatypes.GregorianYear10),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianYear10.fromstring,
}, # [-][Y*]YYYY
{
'name': XSD_GYEAR_MONTH,
'python_type': (unicode_type, str, datatypes.GregorianYearMonth10),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianYearMonth10.fromstring,
}, # [-][Y*]YYYY-MM
)
XSD_11_BUILTIN_TYPES = XSD_COMMON_BUILTIN_TYPES + (
# --- Year related primitive types (year 0 allowed and mapped to 1 BCE) ---
{