summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthon van der Neut <anthon@mnt.org>2015-01-14 20:36:54 +0100
committerAnthon van der Neut <anthon@mnt.org>2015-01-14 20:36:54 +0100
commit2ec4cd023bb82005c1959b429efce42e874a7386 (patch)
tree7d649a73906b1493b279490abd91e39f935df3b8
downloadruamel.base-2ec4cd023bb82005c1959b429efce42e874a7386.tar.gz
initial setup
-rw-r--r--.hgignore11
-rw-r--r--Makefile12
-rw-r--r--README.rst6
-rw-r--r--__init__.py33
-rw-r--r--setup.py151
-rw-r--r--test/test_base.py8
-rw-r--r--tox.ini7
7 files changed, 228 insertions, 0 deletions
diff --git a/.hgignore b/.hgignore
new file mode 100644
index 0000000..0cf8ac3
--- /dev/null
+++ b/.hgignore
@@ -0,0 +1,11 @@
+syntax: glob
+
+*.pyc
+*~
+*.bak
+*.o
+*.orig
+dist
+build
+*.egg-info
+.tox
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..d9a38fd
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,12 @@
+
+UTILNAME:=base
+PKGNAME:=ruamel.base
+VERSION:=$$(python setup.py --version)
+REGEN:=/home/bin/ruamel_util_new util --published Base --skip-hg
+
+include ~/.config/ruamel_util_new/Makefile.inc
+
+clean:
+ rm -rf build .tox $(PKGNAME).egg-info/ README.pdf
+ find . -name "*.pyc" -exec rm {} +
+ @find . -name "__pycache__" -print0 | xargs -r -0 rm -rf
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..3746069
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,6 @@
+
+ruamel.base
+
+- provides a single definition point for ``ruamel/__init__.py`` and
+ ``ruamel/*/__init__.py``
+- (future) place for elements common to multiple packages \ No newline at end of file
diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..2e68e44
--- /dev/null
+++ b/__init__.py
@@ -0,0 +1,33 @@
+# coding: utf-8
+
+
+def _convert_version(tup):
+ """create a PEP 386 pseudo-format conformant string from tuple tup"""
+ ret_val = str(tup[0]) # first is always digit
+ next_sep = "." # separator for next extension, can be "" or "."
+ for x in tup[1:]:
+ if isinstance(x, int):
+ ret_val += next_sep + str(x)
+ next_sep = '.'
+ continue
+ first_letter = x[0].lower()
+ next_sep = ''
+ if first_letter in 'abcr':
+ ret_val += 'rc' if first_letter == 'r' else first_letter
+ elif first_letter in 'pd':
+ ret_val += '.post' if first_letter == 'p' else '.dev'
+ return ret_val
+
+
+version_info = (0, 1)
+__version__ = _convert_version(version_info)
+
+del _convert_version
+
+
+def main():
+ # No direct import of base in order not to pollute namespace.
+ # If other utility 'bodies' exist in this directory a module level
+ # import here, would get you all of its initialisations/imports as well
+ from base import main as util_main
+ util_main()
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..2ff0475
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,151 @@
+#! /usr/bin/env python
+# coding: utf-8
+
+from __future__ import print_function
+
+import sys
+import os
+from textwrap import dedent
+
+name_space = 'ruamel'
+package_name = 'base'
+full_package_name = name_space + '.' + package_name
+
+exclude_files = [
+ 'setup.py',
+]
+
+
+def get_version():
+ v_i = 'version_info = '
+ for line in open('__init__.py'):
+ if not line.startswith(v_i):
+ continue
+ s_e = line[len(v_i):].strip()[1:-1].split(', ')
+ els = [x.strip()[1:-1] if x[0] in '\'"' else int(x) for x in s_e]
+ return els
+
+
+def _check_convert_version(tup):
+ """create a PEP 386 pseudo-format conformant string from tuple tup"""
+ ret_val = str(tup[0]) # first is always digit
+ next_sep = "." # separator for next extension, can be "" or "."
+ nr_digits = 0 # nr of adjacent digits in rest, to verify
+ post_dev = False # are we processig post/dev
+ for x in tup[1:]:
+ if isinstance(x, int):
+ nr_digits += 1
+ if nr_digits > 2:
+ raise ValueError("to many consecutive digits " + ret_val)
+ ret_val += next_sep + str(x)
+ next_sep = '.'
+ continue
+ first_letter = x[0].lower()
+ next_sep = ''
+ if first_letter in 'abcr':
+ if post_dev:
+ raise ValueError("release level specified after "
+ "post/dev:" + x)
+ nr_digits = 0
+ ret_val += 'rc' if first_letter == 'r' else first_letter
+ elif first_letter in 'pd':
+ nr_digits = 1 # only one can follow
+ post_dev = True
+ ret_val += '.post' if first_letter == 'p' else '.dev'
+ else:
+ raise ValueError('First letter of "' + x + '" not recognised')
+ return ret_val
+
+
+version_info = get_version()
+version_str = _check_convert_version(version_info)
+
+if __name__ == '__main__':
+ # put here so setup.py can be imported more easily
+ from setuptools import setup, find_packages, Extension
+ from setuptools.command import install_lib
+
+
+class MyInstallLib(install_lib.install_lib):
+ "create __init__.py on the fly"
+ def run(self):
+ install_lib.install_lib.run(self)
+ init_txt = dedent('''\
+ # coding: utf-8
+ # Copyright © 2013-2015 Anthon van der Neut, RUAMEL bvba
+ "generated __init__.py "
+ try:
+ __import__('pkg_resources').declare_namespace(__name__)
+ except ImportError:
+ pass
+ ''')
+ init_paths = ["ruamel/std",] # "ruamel/ext"]
+ for init_path_s in init_paths:
+ init_path = init_path_s.split('/')
+ for product_init in [
+ os.path.join(
+ *([self.install_dir] + init_path[:p+1] + ['__init__.py']))
+ for p in range(len(init_path))
+ ]:
+ if not os.path.exists(product_init):
+ d = os.path.dirname(product_init)
+ if not os.path.exists(d):
+ os.makedirs(d)
+ print('creating %s' % product_init)
+ with open(product_init, "w") as fp:
+ fp.write(init_txt)
+ setup = os.path.join(self.install_dir, 'setup.py')
+
+ def install(self):
+ fpp = full_package_name.split('.') # full package path
+ full_exclude_files = [os.path.join(*(fpp + [x]))
+ for x in exclude_files]
+ alt_files = []
+ outfiles = install_lib.install_lib.install(self)
+ for x in outfiles:
+ for full_exclude_file in full_exclude_files:
+ if full_exclude_file in x:
+ os.remove(x)
+ break
+ else:
+ alt_files.append(x)
+ return alt_files
+
+
+def main():
+ install_requires = [
+ ]
+ # if sys.version_info < (3, 4):
+ # install_requires.append("")
+ packages = [full_package_name] + [(full_package_name + '.' + x) for x
+ in find_packages(exclude=['tests'])]
+ setup(
+ name=full_package_name,
+ version=version_str,
+ description="common elements for ruamel packages, "
+ "hierarchy structure with __init__.py",
+ install_requires=install_requires,
+ long_description=open('README.rst').read(),
+ url='https://bitbucket.org/ruamel/' + package_name,
+ author='Anthon van der Neut',
+ author_email='a.van.der.neut@ruamel.eu',
+ license="MIT license",
+ package_dir={full_package_name: '.'},
+ namespace_packages=[name_space],
+ packages=packages,
+ cmdclass={'install_lib': MyInstallLib},
+ classifiers=[
+ 'Development Status :: 4 - Beta',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: MIT License',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ ]
+ )
+
+if __name__ == '__main__':
+ if len(sys.argv) > 1 and sys.argv[1] == 'sdist':
+ assert full_package_name == os.path.abspath(os.path.dirname(
+ __file__)).split('site-packages' + os.path.sep)[1].replace(
+ os.path.sep, '.')
+ main()
diff --git a/test/test_base.py b/test/test_base.py
new file mode 100644
index 0000000..d2c0125
--- /dev/null
+++ b/test/test_base.py
@@ -0,0 +1,8 @@
+
+
+# default for tox stub is to Fail
+def test_base():
+ import ruamel
+ import ruamel.std
+ # import ruamel.ext
+ assert True
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..4082297
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,7 @@
+[tox]
+envlist = py26,py27,py33,py34
+
+[testenv]
+commands = py.test test
+deps =
+ pytest