[Python-modules-commits] [itypes] 01/03: Import Upstream version 1.1.0
Pierre-Elliott Bécue
peb-guest at moszumanska.debian.org
Wed Jan 10 00:15:58 UTC 2018
This is an automated email from the git hooks/post-receive script.
peb-guest pushed a commit to branch master
in repository itypes.
commit 517b3f2f2d74c9fae3a33553f395350f61c4c33b
Author: Pierre-Elliott Bécue <becue at crans.org>
Date: Wed Jan 10 01:13:29 2018 +0100
Import Upstream version 1.1.0
---
PKG-INFO | 17 +++
itypes.egg-info/PKG-INFO | 17 +++
itypes.egg-info/SOURCES.txt | 6 +
itypes.egg-info/dependency_links.txt | 1 +
itypes.egg-info/top_level.txt | 1 +
itypes.py | 221 +++++++++++++++++++++++++++++++++++
setup.cfg | 5 +
setup.py | 47 ++++++++
8 files changed, 315 insertions(+)
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..6a0bb0b
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,17 @@
+Metadata-Version: 1.1
+Name: itypes
+Version: 1.1.0
+Summary: Simple immutable types for python.
+Home-page: http://github.com/tomchristie/itypes
+Author: Tom Christie
+Author-email: tom at tomchristie.com
+License: BSD
+Description: UNKNOWN
+Platform: UNKNOWN
+Classifier: Development Status :: 3 - Alpha
+Classifier: Environment :: Web Environment
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Topic :: Internet :: WWW/HTTP
diff --git a/itypes.egg-info/PKG-INFO b/itypes.egg-info/PKG-INFO
new file mode 100644
index 0000000..6a0bb0b
--- /dev/null
+++ b/itypes.egg-info/PKG-INFO
@@ -0,0 +1,17 @@
+Metadata-Version: 1.1
+Name: itypes
+Version: 1.1.0
+Summary: Simple immutable types for python.
+Home-page: http://github.com/tomchristie/itypes
+Author: Tom Christie
+Author-email: tom at tomchristie.com
+License: BSD
+Description: UNKNOWN
+Platform: UNKNOWN
+Classifier: Development Status :: 3 - Alpha
+Classifier: Environment :: Web Environment
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Topic :: Internet :: WWW/HTTP
diff --git a/itypes.egg-info/SOURCES.txt b/itypes.egg-info/SOURCES.txt
new file mode 100644
index 0000000..70c25fa
--- /dev/null
+++ b/itypes.egg-info/SOURCES.txt
@@ -0,0 +1,6 @@
+itypes.py
+setup.py
+itypes.egg-info/PKG-INFO
+itypes.egg-info/SOURCES.txt
+itypes.egg-info/dependency_links.txt
+itypes.egg-info/top_level.txt
\ No newline at end of file
diff --git a/itypes.egg-info/dependency_links.txt b/itypes.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/itypes.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/itypes.egg-info/top_level.txt b/itypes.egg-info/top_level.txt
new file mode 100644
index 0000000..ada05e6
--- /dev/null
+++ b/itypes.egg-info/top_level.txt
@@ -0,0 +1 @@
+itypes
diff --git a/itypes.py b/itypes.py
new file mode 100644
index 0000000..2dc18f2
--- /dev/null
+++ b/itypes.py
@@ -0,0 +1,221 @@
+# coding: utf-8
+from collections import Mapping, Sequence
+
+
+__version__ = '1.1.0'
+
+
+def to_mutable(instance):
+ if isinstance(instance, Dict):
+ return {
+ key: to_mutable(value)
+ for key, value in instance.items()
+ }
+ elif isinstance(instance, List):
+ return [
+ to_mutable(value)
+ for value in instance
+ ]
+ return instance
+
+
+def to_immutable(value):
+ if isinstance(value, dict):
+ return Dict(value)
+ elif isinstance(value, list):
+ return List(value)
+ return value
+
+
+def _to_hashable(instance):
+ if isinstance(instance, Dict):
+ items = sorted(instance.items(), key=lambda item: item[0])
+ return (
+ (key, _to_hashable(value))
+ for key, value in items
+ )
+ elif isinstance(instance, List):
+ return [
+ _to_hashable(value)
+ for value in instance
+ ]
+ return instance
+
+
+def _set_in(node, keys, value):
+ if not keys:
+ return value
+ elif len(keys) == 1:
+ return node.set(keys[0], value)
+
+ key = keys[0]
+ child = node[key]
+ if not isinstance(child, (Dict, List)):
+ msg = "Expected a container type at key '%s', but got '%s'"
+ raise KeyError(msg % type(child))
+ child = child.set_in(keys[1:], value)
+ return node.set(key, child)
+
+
+def _delete_in(node, keys):
+ if not keys:
+ return
+ elif len(keys) == 1:
+ return node.delete(keys[0])
+
+ key = keys[0]
+ child = node[key]
+ if not isinstance(child, (Dict, List)):
+ msg = "Expected a container type at key '%s', but got '%s'"
+ raise KeyError(msg % type(child))
+ child = child.delete_in(keys[1:])
+ return node.set(key, child)
+
+
+def _get_in(node, keys, default=None):
+ if not keys:
+ return default
+
+ key = keys[0]
+ try:
+ child = node[key]
+ except (KeyError, IndexError):
+ return default
+
+ if len(keys) == 1:
+ return child
+ return child.get_in(keys[1:], default=default)
+
+
+class Object(object):
+ def __setattr__(self, key, value):
+ if key.startswith('_'):
+ return object.__setattr__(self, key, value)
+ msg = "'%s' object doesn't support property assignment."
+ raise TypeError(msg % self.__class__.__name__)
+
+
+class Dict(Mapping):
+ def __init__(self, *args, **kwargs):
+ self._data = {
+ key: to_immutable(value)
+ for key, value in dict(*args, **kwargs).items()
+ }
+
+ def __setattr__(self, key, value):
+ if key.startswith('_'):
+ return object.__setattr__(self, key, value)
+ msg = "'%s' object doesn't support property assignment."
+ raise TypeError(msg % self.__class__.__name__)
+
+ def __getitem__(self, key):
+ return self._data[key]
+
+ def __iter__(self):
+ return iter(self._data)
+
+ def __len__(self):
+ return len(self._data)
+
+ def __eq__(self, other):
+ if isinstance(other, self.__class__):
+ return self._data == other._data
+ return self._data == other
+
+ def __hash__(self):
+ return hash(_to_hashable(self))
+
+ def __repr__(self):
+ return "%s(%s)" % (
+ self.__class__.__name__,
+ to_mutable(self)
+ )
+
+ def __str__(self):
+ return str(self._data)
+
+ def set(self, key, value):
+ data = dict(self._data)
+ data[key] = value
+ if hasattr(self, 'clone'):
+ return self.clone(data)
+ return type(self)(data)
+
+ def delete(self, key):
+ data = dict(self._data)
+ data.pop(key)
+ if hasattr(self, 'clone'):
+ return self.clone(data)
+ return type(self)(data)
+
+ def get_in(self, keys, default=None):
+ return _get_in(self, keys, default=default)
+
+ def set_in(self, keys, value):
+ return _set_in(self, keys, value)
+
+ def delete_in(self, keys):
+ return _delete_in(self, keys)
+
+
+class List(Sequence):
+ def __init__(self, *args):
+ self._data = [
+ to_immutable(value)
+ for value in list(*args)
+ ]
+
+ def __setattr__(self, key, value):
+ if key == '_data':
+ return object.__setattr__(self, key, value)
+ msg = "'%s' object doesn't support property assignment."
+ raise TypeError(msg % self.__class__.__name__)
+
+ def __getitem__(self, key):
+ return self._data[key]
+
+ def __iter__(self):
+ return iter(self._data)
+
+ def __len__(self):
+ return len(self._data)
+
+ def __eq__(self, other):
+ if isinstance(other, self.__class__):
+ return self._data == other._data
+ return self._data == other
+
+ def __hash__(self):
+ return hash(_to_hashable(self))
+
+ def __repr__(self):
+ return "%s(%s)" % (
+ self.__class__.__name__,
+ to_mutable(self)
+ )
+
+ def __str__(self):
+ return str(self._data)
+
+ def set(self, key, value):
+ data = list(self._data)
+ data[key] = value
+ if hasattr(self, 'clone'):
+ return self.clone(data)
+ return type(self)(data)
+
+ def delete(self, key):
+ data = list(self._data)
+ data.pop(key)
+ if hasattr(self, 'clone'):
+ return self.clone(data)
+ return type(self)(data)
+
+ def get_in(self, keys, default=None):
+ return _get_in(self, keys, default=default)
+
+ def set_in(self, keys, value):
+ return _set_in(self, keys, value)
+
+ def delete_in(self, keys):
+ return _delete_in(self, keys)
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..861a9f5
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,5 @@
+[egg_info]
+tag_build =
+tag_date = 0
+tag_svn_revision = 0
+
diff --git a/setup.py b/setup.py
new file mode 100755
index 0000000..623003b
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from setuptools import setup
+import re
+import os
+import sys
+
+
+def get_version():
+ """
+ Return package version as listed in `__version__` in `init.py`.
+ """
+ init_py = open('itypes.py').read()
+ return re.search("__version__ = ['\"]([^'\"]+)['\"]", init_py).group(1)
+
+
+version = get_version()
+
+
+if sys.argv[-1] == 'publish':
+ os.system("python setup.py sdist upload")
+ print("You probably want to also tag the version now:")
+ print(" git tag -a %s -m 'version %s'" % (version, version))
+ print(" git push --tags")
+ sys.exit()
+
+
+setup(
+ name='itypes',
+ version=version,
+ url='http://github.com/tomchristie/itypes',
+ license='BSD',
+ description='Simple immutable types for python.',
+ author='Tom Christie',
+ author_email='tom at tomchristie.com',
+ py_modules=['itypes'],
+ classifiers=[
+ 'Development Status :: 3 - Alpha',
+ 'Environment :: Web Environment',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: BSD License',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ 'Topic :: Internet :: WWW/HTTP',
+ ]
+)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/itypes.git
More information about the Python-modules-commits
mailing list