Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
**/__pycache__
**/.git
**/playground
**/build
6 changes: 3 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ python:
- "3.6"
cache: pip
install:
- pip install -r test-requirements.txt
- pip install -r requirements/test.txt -r requirements/docs.txt
- pip install -e .
script:
- pylint pythonflow
- py.test --cov pythonflow --cov-fail-under=100 --cov-report=term-missing
- make tests
- make docs
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ FROM python:3
MAINTAINER Till Hoffmann <[email protected]>

# Install requirements
COPY test-requirements.txt test-requirements.txt
RUN pip install -r test-requirements.txt
COPY requirements requirements
RUN pip install -r requirements/docs.txt -r requirements/test.txt

# Install the package
COPY . pythonflow
Expand Down
1 change: 1 addition & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
include version.json
27 changes: 16 additions & 11 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
.PHONY: docker_image tests nbserver bash
.PHONY: docker_image docker_nbserver tests lint_tests code_tests docs

docker_image : test-requirements.txt
docker_image : requirements/*.txt
docker build -t pythonflow .

tests : docker_image
docker run --rm pythonflow pylint pythonflow
docker run --rm pythonflow py.test --cov --cov-fail-under=100 --cov-report=term-missing

README.md : docker_image README.ipynb
docker run --rm -v "$$PWD":/pythonflow pythonflow jupyter nbconvert README.ipynb --execute --to markdown

nbserver : docker_image
docker_nbserver : docker_image
docker run --rm -v "$$PWD":/pythonflow -p 9000:8888 pythonflow jupyter notebook --allow-root --ip=0.0.0.0 --no-browser

bash :
docker_bash : docker_image
docker run --rm -v "$$PWD":/pythonflow -it pythonflow bash

tests : lint_tests code_tests

lint_tests :
pylint pythonflow

code_tests :
py.test --cov pythonflow --cov-fail-under=100 --cov-report=term-missing

docs :
sphinx-build -b doctest docs build
sphinx-build -nWT docs build
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Pythonflow: Dataflow programming for python.

Pythonflow is a simple implementation of [dataflow programming](https://en.wikipedia.org/wiki/Dataflow_programming>) for python. Users of [Tensorflow](https://www.tensorflow.org/) will immediately be familiar with the syntax.

At Spotify, we use Pythonflow in data preprocessing pipelines for machine learning models because

* it automatically caches computationally expensive operations,
* any part of the computational graph can be easily evaluated for debugging purposes,
* it allows us to distribute data preprocessing across multiple machines.
201 changes: 201 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Copyright 2017 Spotify AB
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# pythonflow documentation build configuration file, created by
# sphinx-quickstart on Wed Sep 6 16:03:02 2017.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import json
import os
import sys
sys.path.insert(0, os.path.abspath('..'))

with open('../version.json') as fp:
kwargs = json.load(fp)


# -- General configuration ------------------------------------------------

# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.doctest',
'sphinx.ext.coverage',
'sphinx.ext.viewcode',
'sphinx.ext.githubpages',
'sphinx.ext.autosummary',
'numpydoc'
]

# Add any paths that contain templates here, relative to this directory.
templates_path = []

# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'

# The master toctree document.
master_doc = 'index'

# General information about the project.
project = kwargs['name']
author = kwargs['author']
copyright = '2017 Spotify AB'

# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = kwargs['version']
# The full version, including alpha/beta/rc tags.
release = kwargs['version']

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This patterns also effect to html_static_path and html_extra_path
exclude_patterns = []

# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'

# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = False


# -- Options for HTML output ----------------------------------------------

# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'sphinx_rtd_theme'

# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = []

# Custom sidebar templates, must be a dictionary that maps document names
# to template names.
#
# This is required for the alabaster theme
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
html_sidebars = {
'**': [
'about.html',
'navigation.html',
'relations.html', # needs 'show_related': True theme option to display
'searchbox.html',
'donate.html',
]
}


# -- Options for HTMLHelp output ------------------------------------------

# Output file base name for HTML help builder.
htmlhelp_basename = 'pythonflowdoc'


# -- Options for LaTeX output ---------------------------------------------

latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',

# The font size ('10pt', '11pt' or '12pt').
#
# 'pointsize': '10pt',

# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',

# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}

# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'pythonflow.tex', 'pythonflow Documentation',
'Till Hoffmann', 'manual'),
]


# -- Options for manual page output ---------------------------------------

# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'pythonflow', 'pythonflow Documentation',
[author], 1)
]


# -- Options for Texinfo output -------------------------------------------

# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'pythonflow', 'pythonflow Documentation',
author, 'pythonflow', 'One line description of project.',
'Miscellaneous'),
]

# Disable class members (https://github.com/phn/pytpm/issues/3#issuecomment-12133978)
numpydoc_show_class_members = False

# Ignore some warnings (https://stackoverflow.com/a/30624034/1150961)
nitpick_ignore = [('py:class', 'object')]
Loading