Package pyxb :: Package namespace :: Module utility |
[hide private]
[frames] | no frames]

# Source Code for Module pyxb.namespace.utility

     1  # -*- coding: utf-8 -*-
     2  # Copyright 2009-2013, Peter A. Bigot
     3  #
     4  # Licensed under the Apache License, Version 2.0 (the "License"); you may
     5  # not use this file except in compliance with the License. You may obtain a
     6  # copy of the License at:
     7  #
     8  #            http://www.apache.org/licenses/LICENSE-2.0
     9  #
    10  # Unless required by applicable law or agreed to in writing, software
    11  # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    12  # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    13  # License for the specific language governing permissions and limitations
    14  # under the License.
    15
    16  """Utility functions related to U{XML Namespaces<http://www.w3.org/TR/2006/REC-xml-names-20060816/index.html>}."""
    17
    18  import pyxb
    19  import pyxb.namespace
    20  import logging
    21
    22  _log = logging.getLogger(__name__)
    23
    24 -def NamespaceInstance (namespace):
    25      """Get a namespace instance for the given namespace.
    26
    27      This is used when it is unclear whether the namespace is specified by URI
    28      or by instance or by any other mechanism we might dream up in the
    29      future."""
    30      if isinstance(namespace, pyxb.namespace.Namespace):
    31          return namespace
    32      if isinstance(namespace, basestring):
    33          return NamespaceForURI(namespace, True)
    34      raise pyxb.LogicError('Cannot identify namespace from value of type %s' % (type(namespace),))
    35
    36 -def NamespaceForURI (uri, create_if_missing=False):
    37      """Given a URI, provide the L{Namespace} instance corresponding to it.
    38
    39      This can only be used to lookup or create real namespaces.  To create
    40      absent namespaces, use L{CreateAbsentNamespace}.
    41
    42      @param uri: The URI that identifies the namespace
    43      @type uri: A non-empty C{str} or C{unicode} string
    44      @keyword create_if_missing: If C{True}, a namespace for the given URI is
    45      created if one has not already been registered.  Default is C{False}.
    46      @type create_if_missing: C{bool}
    47      @return: The Namespace corresponding to C{uri}, if available
    48      @rtype: L{Namespace} or C{None}
    49      @raise pyxb.LogicError: The uri is not a non-empty string
    50      """
    51      if not isinstance(uri, (str, unicode)):
    52          raise pyxb.LogicError('Cannot lookup absent namespaces')
    53      if 0 == len(uri):
    54          raise pyxb.LogicError('Namespace URIs must not be empty strings')
    55      rv = pyxb.namespace.Namespace._NamespaceForURI(uri)
    56      if (rv is None) and create_if_missing:
    57          rv = pyxb.namespace.Namespace(uri)
    58      return rv
    59
    60 -def CreateAbsentNamespace ():
    61      """Create an absent namespace.
    62
    63      Use this when you need a namespace for declarations in a schema with no
    64      target namespace.  Absent namespaces are not stored in the infrastructure;
    65      it is your responsibility to hold on to the reference you get from this,
    66      because you won't be able to look it up."""
    67      return pyxb.namespace.Namespace.CreateAbsentNamespace()
    68
    69 -def AvailableNamespaces ():
    70      """Return the complete set of Namespace instances known to the system."""
    71      return pyxb.namespace.Namespace.AvailableNamespaces()
    72