diff --git a/Makefile b/Makefile index 887a67e..6763f65 100644 --- a/Makefile +++ b/Makefile @@ -1,58 +1,52 @@ # This file has been auto-generated. # All changes will be lost, see Projectfile. # -# Updated at 2017-05-01 08:35:15.162008 +# Updated at 2017-05-02 20:38:38.468986 +PACKAGE ?= bonobo PYTHON ?= $(shell which python) PYTHON_BASENAME ?= $(shell basename $(PYTHON)) +PYTHON_DIRNAME ?= $(shell dirname $(PYTHON)) PYTHON_REQUIREMENTS_FILE ?= requirements.txt PYTHON_REQUIREMENTS_DEV_FILE ?= requirements-dev.txt QUICK ?= -VIRTUAL_ENV ?= .virtualenv-$(PYTHON_BASENAME) -PIP ?= $(VIRTUAL_ENV)/bin/pip +PIP ?= $(PYTHON_DIRNAME)/pip PIP_INSTALL_OPTIONS ?= -PYTEST ?= $(VIRTUAL_ENV)/bin/pytest -PYTEST_OPTIONS ?= --capture=no --cov=bonobo --cov-report html -SPHINX_OPTS ?= -SPHINX_BUILD ?= $(VIRTUAL_ENV)/bin/sphinx-build +PYTEST ?= $(PYTHON_DIRNAME)/pytest +PYTEST_OPTIONS ?= --capture=no --cov=$(PACKAGE) --cov-report html +SPHINX_BUILD ?= $(PYTHON_DIRNAME)/sphinx-build +SPHINX_OPTIONS ?= SPHINX_SOURCEDIR ?= docs SPHINX_BUILDDIR ?= $(SPHINX_SOURCEDIR)/_build -YAPF ?= $(VIRTUAL_ENV)/bin/yapf +YAPF ?= $(PYTHON_DIRNAME)/yapf YAPF_OPTIONS ?= -rip .PHONY: $(SPHINX_SOURCEDIR) clean format install install-dev lint test # Installs the local project dependencies. -install: $(VIRTUAL_ENV) +install: if [ -z "$(QUICK)" ]; then \ - $(PIP) install -U pip wheel $(PIP_INSTALL_OPTIONS) -r $(PYTHON_REQUIREMENTS_FILE) ; \ + $(PIP) install -U pip wheel $(PYTHON_PIP_INSTALL_OPTIONS) -r $(PYTHON_REQUIREMENTS_FILE) ; \ fi # Installs the local project dependencies, including development-only libraries. -install-dev: $(VIRTUAL_ENV) +install-dev: if [ -z "$(QUICK)" ]; then \ - $(PIP) install -U pip wheel $(PIP_INSTALL_OPTIONS) -r $(PYTHON_REQUIREMENTS_DEV_FILE) ; \ + $(PIP) install -U pip wheel $(PYTHON_PIP_INSTALL_OPTIONS) -r $(PYTHON_REQUIREMENTS_DEV_FILE) ; \ fi # Cleans up the local mess. clean: - rm -rf build - rm -rf dist - -# Setup the local virtualenv, or use the one provided by the current environment. -$(VIRTUAL_ENV): - virtualenv -p $(PYTHON) $(VIRTUAL_ENV) - $(PIP) install -U pip wheel - ln -fs $(VIRTUAL_ENV)/bin/activate activate-$(PYTHON_BASENAME) + rm -rf build dist *.egg-info lint: install-dev - $(VIRTUAL_ENV)/bin/pylint --py3k bonobo -f html > pylint.html + $(PYTHON_DIRNAME)/pylint --py3k $(PACKAGE) -f html > pylint.html test: install-dev $(PYTEST) $(PYTEST_OPTIONS) tests $(SPHINX_SOURCEDIR): install-dev - $(SPHINX_BUILD) -b html -D latex_paper_size=a4 $(SPHINX_OPTS) $(SPHINX_SOURCEDIR) $(SPHINX_BUILDDIR)/html + $(SPHINX_BUILD) -b html -D latex_paper_size=a4 $(SPHINX_OPTIONS) $(SPHINX_SOURCEDIR) $(SPHINX_BUILDDIR)/html format: install-dev $(YAPF) $(YAPF_OPTIONS) . diff --git a/README.rst b/README.rst index f3886e0..6db77a1 100644 --- a/README.rst +++ b/README.rst @@ -1,16 +1,12 @@ +========== 🐵 bonobo -========= +========== -Data-processing. By monkeys. For humans. +Data-processing for humans. .. image:: https://img.shields.io/pypi/v/bonobo.svg :target: https://pypi.python.org/pypi/bonobo :alt: PyPI - -.. image:: https://img.shields.io/pypi/wheel/bonobo.svg - :target: https://pypi.python.org/pypi/bonobo - :alt: Wheel - .. image:: https://img.shields.io/pypi/pyversions/bonobo.svg :target: https://pypi.python.org/pypi/bonobo :alt: Versions @@ -27,29 +23,30 @@ Data-processing. By monkeys. For humans. :target: https://ci.appveyor.com/project/hartym/bonobo?branch=0.3 :alt: Continuous Integration (Windows) - .. image:: https://landscape.io/github/python-bonobo/bonobo/0.3/landscape.svg?style=flat :target: https://landscape.io/github/python-bonobo/bonobo/0.3 :alt: Code Health from landscape +.. image:: https://codeclimate.com/github/python-bonobo/bonobo/badges/gpa.svg + :target: https://codeclimate.com/github/python-bonobo/bonobo + :alt: Code Climate + .. image:: https://img.shields.io/coveralls/python-bonobo/bonobo/0.3.svg :target: https://coveralls.io/github/python-bonobo/bonobo?branch=0.3 :alt: Coverage -Bonobo is a data-processing library for python 3.5+ that emphasises writing -simple, atomic, plain old python functions and chaining them using a basic -acyclic graph. The nodes will need a bit of plumbery to be runnable in -different means (iteratively, in threads, in processes, on different machines -...) but that should be as transparent as possible. +Bonobo is an extract-transform-load framework for python 3.5+ (see comparisons with other data tools). -The only thing asked of the developer is to write "pure" functions to -process data (create a new dict, don't change in place, etc.), and everything -should be fine from this point. +Bonobo uses plain old python objects (functions, generators and iterators), allows to link them in a directed graph and +execute them using a parallelized strategy, without having to worry about the underlying complexity. -It's a young rewrite of an old python2.7 tool that ran millions of -transformations per day for years on production, so as though it may not yet -be complete or fully stable (please, allow us to reach 1.0), the underlying -concepts work. +Developpers can focus on writing simple and atomic operations, that are by-design easy to unit-test, while the +framework focus on applying them concurrently to rows of data. + +One thing to note: write pure transformations and you'll be safe. + +Bonobo is a young rewrite of an old python2.7 tool that ran millions of transformations per day for years on production, +so as though it may not yet be complete or fully stable (please, allow us to reach 1.0), the basics are there. ---- diff --git a/bonobo/_version.py b/bonobo/_version.py index 020ed73..15e8324 100644 --- a/bonobo/_version.py +++ b/bonobo/_version.py @@ -1 +1 @@ -__version__ = '0.2.2' +__version__ = '0.3.0a1' diff --git a/setup.py b/setup.py index 8b02f65..24eec0b 100644 --- a/setup.py +++ b/setup.py @@ -11,14 +11,10 @@ tolines = lambda c: list(filter(None, map(lambda s: s.strip(), c.split('\n')))) def read(filename, flt=None): try: - with open(filename, 'rt') as f: + with open(filename) as f: content = f.read().strip() return flt(content) if callable(flt) else content except EnvironmentError: - # File not found? Let's say it's empty. - return '' - except UnicodeError: - # Problem decoding the file? Let's not stop on this (but it's a temp fix). return '' @@ -42,40 +38,44 @@ else: setup( name='bonobo', - description='Bonobo', + description= + ('Bonobo, a simple, modern and atomic extract-transform-load toolkit for ' + 'python 3.5+.'), license='Apache License, Version 2.0', install_requires=[ - 'colorama >=0.3,<1.0', 'fs >=2.0,<3.0', 'psutil >=5.2,<6.0', 'requests >=2.0,<3.0', 'stevedore >=1.21,<2.0' + 'colorama >=0.3,<1.0', 'fs >=2.0,<3.0', 'psutil >=5.2,<6.0', + 'requests >=2.0,<3.0', 'stevedore >=1.21,<2.0' ], version=version, long_description=read('README.rst'), classifiers=read('classifiers.txt', tolines), packages=find_packages(exclude=['ez_setup', 'example', 'test']), include_package_data=True, - data_files=[ - ( - 'share/jupyter/nbextensions/bonobo-jupyter', [ - 'bonobo/ext/jupyter/static/extension.js', 'bonobo/ext/jupyter/static/index.js', - 'bonobo/ext/jupyter/static/index.js.map' - ] - ) - ], + data_files=[('share/jupyter/nbextensions/bonobo-jupyter', [ + 'bonobo/ext/jupyter/static/extension.js', + 'bonobo/ext/jupyter/static/index.js', + 'bonobo/ext/jupyter/static/index.js.map' + ])], extras_require={ 'dev': [ - 'coverage >=4,<5', 'pylint >=1,<2', 'pytest >=3,<4', 'pytest-cov >=2,<3', 'pytest-timeout >=1,<2', 'sphinx', + 'coverage >=4,<5', 'pylint >=1,<2', 'pytest >=3,<4', + 'pytest-cov >=2,<3', 'pytest-timeout >=1,<2', 'sphinx', 'sphinx_rtd_theme', 'yapf' ], 'jupyter': ['jupyter >=1.0,<1.1', 'ipywidgets >=6.0.0.beta5'] }, entry_points={ 'bonobo.commands': [ - 'init = bonobo.commands.init:register', 'run = bonobo.commands.run:register', + 'init = bonobo.commands.init:register', + 'run = bonobo.commands.run:register', 'version = bonobo.commands.version:register' ], 'console_scripts': ['bonobo = bonobo.commands:entrypoint'], - 'edgy.project.features': ['bonobo = ' - 'bonobo.ext.edgy.project.feature:BonoboFeature'] + 'edgy.project.features': + ['bonobo = ' + 'bonobo.ext.edgy.project.feature:BonoboFeature'] }, url='https://www.bonobo-project.org/', - download_url='https://github.com/python-bonobo/bonobo/tarball/{version}'.format(version=version), -) + download_url= + 'https://github.com/python-bonobo/bonobo/tarball/{version}'.format( + version=version), )