""" NewBuiltins - Installs (most of) the mx.Tools add-ons for Python
                  as Python builtins or in the sys module.

    The installation is done upon import, so that you only need
    to include the line 'import mx.Tools.NewBuiltins' at the top of your
    script to have the add-ons available for use in the script.

    Copyright (c) 2000, <NAME>; mailto:<EMAIL>
    Copyright (c) 2000-2015, eGenix.com Software GmbH; mailto:<EMAIL>
    See the documentation for further information on copyrights,
    or contact the author. All Rights Reserved.
"""
import sys,types,operator
import Tools

# Optional intra-package tools
try:
    from mx.DateTime import DateTimeFrom
except ImportError:
    DateTimeFrom = None

# Enable debugging output
_debug = 0

# Helper
def install_objects(namespace, objects,

                    DictType=types.DictType):

    """ Install all the given objects in namespace.

        Doesn't overwrite anything already defined in namespace.
        
    """
    for obj in objects:
        try:
            name = obj.__name__
        except AttributeError:
            try:
                name, obj = obj
            except (TypeError, ValueError):
                name = repr(obj)
        if name[:2] != '__':
            if namespace.has_key(name):
                if _debug:
                    try:
                        import warnings
                    except ImportError:
                        pass
                    else:
                        warnings.warn('mxTools builtin %s would overwrite existing '
                                      'builtin; not installed' % name,
                                      RuntimeWarning)
            else:
                namespace[name] = obj

### Note that undocumented functions may well disappear in
### future releases !!!

# New APIs and objects that go into __builtins__
install_objects(__builtins__,
                (Tools.NotGiven,
                 ('True', Tools.True),	# already defined in Python >= 2.2.x !
                 ('False', Tools.False),# already defined in Python >= 2.2.x !
                 Tools.acquire, 
                 Tools.attrlist,
                 Tools.count, 
                 Tools.defined,
                 Tools.dict,		# already defined in Python >= 2.2.x !
                 Tools.exists,
                 Tools.extract,
                 Tools.findattr,
                 Tools.forall, 
                 Tools.frange,          # undocumented
                 Tools.get, 
                 Tools.ifilter,
                 Tools.index, 
                 Tools.indices, 
                 Tools.invdict,
                 Tools.irange, 
                 Tools.iremove,
                 Tools.issequence,      # undocumented
                 Tools.lists, 
                 Tools.mapply,
                 Tools.method_mapply, 
                 #Tools.mget,           # old
                 #Tools.mgetattr,       # old
                 Tools.napply,
                 #Tools.optimization,   # moved to sys
                 Tools.projection,      # undocumented
                 Tools.range_len,
                 Tools.reval,
                 Tools.reverse, 
                 Tools.setdict,
                 Tools.sign,
                 Tools.sizeof, 
                 Tools.sortedby,        # undocumented
                 Tools.trange,
                 #Tools.trange_len,     # old
                 Tools.truth,
                 ('boolean', Tools.truth), # defined as bool() in Python >= 2.2.x !
                 Tools.tuples,
                 #Tools.verbosity,      # moved to sys
                 #Tools.xmap,           # no longer supported
                 ('binary', buffer),
                 )
                )

# Optional additional builtins
if DateTimeFrom is not None:
    install_objects(__builtins__, (('datetime', DateTimeFrom),))

# New APIs for the sys module
install_objects(sys.__dict__,
                (Tools.optimization, 
                 Tools.verbosity,
                 Tools.debugging,
                 Tools.interactive,
                 Tools.cur_frame,
                 Tools.makeref,
                 )
                )

# All other APIs are available through the Tools package, e.g
# Tools.docstring, etc.

""" NewBuiltins - Installs (most of) the mx.Tools add-ons for Python
                  as Python builtins or in the sys module.

    The installation is done upon import, so that you only need
    to include the line 'import mx.Tools.NewBuiltins' at the top of your
    script to have the add-ons available for use in the script.

    Copyright (c) 2000, <NAME>; mailto:<EMAIL>
    Copyright (c) 2000-2015, eGenix.com Software GmbH; mailto:<EMAIL>
    See the documentation for further information on copyrights,
    or contact the author. All Rights Reserved.
"""
import sys,types,operator
import Tools

# Optional intra-package tools
try:
    from mx.DateTime import DateTimeFrom
except ImportError:
    DateTimeFrom = None

# Enable debugging output
_debug = 0

# Helper
def install_objects(namespace, objects,

                    DictType=types.DictType):

    """ Install all the given objects in namespace.

        Doesn't overwrite anything already defined in namespace.
        
    """
    for obj in objects:
        try:
            name = obj.__name__
        except AttributeError:
            try:
                name, obj = obj
            except (TypeError, ValueError):
                name = repr(obj)
        if name[:2] != '__':
            if namespace.has_key(name):
                if _debug:
                    try:
                        import warnings
                    except ImportError:
                        pass
                    else:
                        warnings.warn('mxTools builtin %s would overwrite existing '
                                      'builtin; not installed' % name,
                                      RuntimeWarning)
            else:
                namespace[name] = obj

### Note that undocumented functions may well disappear in
### future releases !!!

# New APIs and objects that go into __builtins__
install_objects(__builtins__,
                (Tools.NotGiven,
                 ('True', Tools.True),	# already defined in Python >= 2.2.x !
                 ('False', Tools.False),# already defined in Python >= 2.2.x !
                 Tools.acquire, 
                 Tools.attrlist,
                 Tools.count, 
                 Tools.defined,
                 Tools.dict,		# already defined in Python >= 2.2.x !
                 Tools.exists,
                 Tools.extract,
                 Tools.findattr,
                 Tools.forall, 
                 Tools.frange,          # undocumented
                 Tools.get, 
                 Tools.ifilter,
                 Tools.index, 
                 Tools.indices, 
                 Tools.invdict,
                 Tools.irange, 
                 Tools.iremove,
                 Tools.issequence,      # undocumented
                 Tools.lists, 
                 Tools.mapply,
                 Tools.method_mapply, 
                 #Tools.mget,           # old
                 #Tools.mgetattr,       # old
                 Tools.napply,
                 #Tools.optimization,   # moved to sys
                 Tools.projection,      # undocumented
                 Tools.range_len,
                 Tools.reval,
                 Tools.reverse, 
                 Tools.setdict,
                 Tools.sign,
                 Tools.sizeof, 
                 Tools.sortedby,        # undocumented
                 Tools.trange,
                 #Tools.trange_len,     # old
                 Tools.truth,
                 ('boolean', Tools.truth), # defined as bool() in Python >= 2.2.x !
                 Tools.tuples,
                 #Tools.verbosity,      # moved to sys
                 #Tools.xmap,           # no longer supported
                 ('binary', buffer),
                 )
                )

# Optional additional builtins
if DateTimeFrom is not None:
    install_objects(__builtins__, (('datetime', DateTimeFrom),))

# New APIs for the sys module
install_objects(sys.__dict__,
                (Tools.optimization, 
                 Tools.verbosity,
                 Tools.debugging,
                 Tools.interactive,
                 Tools.cur_frame,
                 Tools.makeref,
                 )
                )

# All other APIs are available through the Tools package, e.g
# Tools.docstring, etc.

NewBuiltins - Installs (most of) the mx.Tools add-ons for Python                   as Python builtins or in the sys module.      The installation is done upon import, so that you only need     to include the line 'import mx.Tools.NewBuiltins' at the top of your     script to have the add-ons available for use in the script.      Copyright (c) 2000, <NAME>; mailto:<EMAIL>     Copyright (c) 2000-2015, eGenix.com Software GmbH; mailto:<EMAIL>     See the documentation for further information on copyrights,     or contact the author. All Rights Reserved. # Optional intra-package tools # Enable debugging output # Helper Install all the given objects in namespace.          Doesn't overwrite anything already defined in namespace. ### Note that undocumented functions may well disappear in ### future releases !!! # New APIs and objects that go into __builtins__ # already defined in Python >= 2.2.x ! # already defined in Python >= 2.2.x ! # already defined in Python >= 2.2.x ! # undocumented # undocumented #Tools.mget,           # old #Tools.mgetattr,       # old #Tools.optimization,   # moved to sys # undocumented # undocumented #Tools.trange_len,     # old # defined as bool() in Python >= 2.2.x ! #Tools.verbosity,      # moved to sys #Tools.xmap,           # no longer supported # Optional additional builtins # New APIs for the sys module # All other APIs are available through the Tools package, e.g # Tools.docstring, etc.