Skip to content

Commit 47e7302

Browse files
authored
Merge pull request #4 from ocefpaf/docs
Docs and tests
2 parents 3d8cee2 + ffe6f8b commit 47e7302

12 files changed

+309
-29
lines changed

.travis.yml

+27-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1-
# http://lint.travis-ci.org/
2-
31
language: python
42

53
sudo: false
64

5+
env:
6+
global:
7+
- secure: "mn3RZC/TCt+zx8HK1LYFplCAWiSE+19mJ6S7JgVRggbpizbSln73/KtTXvLvZbJHwxK1n5m8yK6gFS3gZBpFKdOnQtkkT+yinaEYFV7eX+3kPxv4KX97spIHHMGKl/jIrewMbLBe4Drz8XcAUdWDWA4iFPrA1tVDhbnGTiZ2NEvMdn4Q4QXWfYhOzfJizSLnjqiuiNYI9cFVERf6mD5S5aVqRd2OivKR85FbCZPzAn6gcxl5XKIzvqFhMTffXXhe1vq4/pWuu+2vj5sb36gAKoh8fPW+WvieuAtKY4VqCZ4GPIA7iMLxqDXkGXD2s5KsBPXN0j9f5zyL7KCDqmYgw08gxa9GM+eEdtC2lQLtGpV2mmoau3hG6FevJkD9qraORoQiul4ZmBwCqznqDvE61MkbMnA0XCutLb/bhFlcrUrLRvCkiF5xpm8t6NNWKI5kqP1MQUlRFCxoaUn+xdwAGKbwXdyC+w9HhZR9lNuotfg0XVLCVTeP3GIWIhuZJMiJsfCpm71HnaFXsq7B9J0mq4wEinIBDeNCJxAZN2phQHH5ElBkl+EyDy+8p3czLLSQ/WhfHVW7Ylv3oRNab5YTFFTKTVY5plGx6nbzHQG6YS9wAPTGEeHyPGheLI0/fpZZ/8m4WLBx/VUYAPpkYe42a8xpdbeoz6lx7Xj3jAmo+Lg="
8+
79
matrix:
810
fast_finish: true
911
include:
1012
- python: 2.7
1113
env: TEST_TARGET=default
1214
- python: 3.6
1315
env: TEST_TARGET=default
16+
- python: 3.6
17+
env: TEST_TARGET=coding_standards
18+
- python: 3.6
19+
env: TEST_TARGET=docs
1420

1521
before_install:
1622
- wget http://bit.ly/miniconda -O miniconda.sh
@@ -23,13 +29,28 @@ before_install:
2329
- source activate TEST
2430

2531
install:
26-
- python setup.py sdist && version=$(python setup.py --version) && pushd dist && pip install erddapy-${version}.tar.gz && popd
32+
- python setup.py sdist && version=$(python setup.py --version) && pushd dist && pip install erddapy-${version}.tar.gz && popd
2733

2834
script:
29-
- if [[ $TEST_TARGET != 'docs' ]]; then
35+
- if [[ $TEST_TARGET == 'default' ]]; then
3036
cp -r tests/ /tmp && cd /tmp ;
37+
py.test -vv tests ;
3138
fi
3239

33-
- if [[ $TEST_TARGET == 'default' ]]; then
34-
py.test -vv tests ;
40+
- if [[ $TEST_TARGET == 'coding_standards' ]]; then
41+
flake8 --max-line-length=105 erddapy --exclude=_version.py ;
3542
fi
43+
44+
- if [[ $TEST_TARGET == 'docs' ]]; then
45+
set -e ;
46+
conda install doctr ;
47+
pushd docs ;
48+
make clean html linkcheck ;
49+
popd ;
50+
python -m doctr deploy --sync .;
51+
python -m doctr deploy --sync --no-require-master --built-docs docs/build/html "docs-$TRAVIS_BRANCH" ;
52+
fi
53+
54+
doctr:
55+
require-master: true
56+
sync: False

docs/Makefile

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Minimal makefile for Sphinx documentation
2+
#
3+
4+
# You can set these variables from the command line.
5+
SPHINXOPTS =
6+
SPHINXBUILD = python -msphinx
7+
SPHINXPROJ = erddapy
8+
SOURCEDIR = source
9+
BUILDDIR = build
10+
11+
# Put it first so that "make" without argument is like "make help".
12+
help:
13+
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14+
15+
.PHONY: help Makefile
16+
17+
# Catch-all target: route all unknown targets to Sphinx using the new
18+
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19+
%: Makefile
20+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

docs/source/_static/logo.png

8.83 KB
Loading

docs/source/conf.py

+182
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
#
4+
# erddapy documentation build configuration file, created by
5+
# sphinx-quickstart on Mon Oct 9 21:28:42 2017.
6+
#
7+
# This file is execfile()d with the current directory set to its
8+
# containing dir.
9+
#
10+
# Note that not all possible configuration values are present in this
11+
# autogenerated file.
12+
#
13+
# All configuration values have a default; values that are commented out
14+
# serve to show the default.
15+
16+
# If extensions (or modules to document with autodoc) are in another directory,
17+
# add these directories to sys.path here. If the directory is relative to the
18+
# documentation root, use os.path.abspath to make it absolute, like shown here.
19+
#
20+
# import os
21+
# import sys
22+
# sys.path.insert(0, os.path.abspath('.'))
23+
24+
25+
# -- General configuration ------------------------------------------------
26+
27+
# If your documentation needs a minimal Sphinx version, state it here.
28+
#
29+
# needs_sphinx = '1.0'
30+
31+
# Add any Sphinx extension module names here, as strings. They can be
32+
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
33+
# ones.
34+
extensions = [
35+
'sphinx.ext.autodoc',
36+
'sphinx.ext.viewcode',
37+
'sphinx.ext.napoleon',
38+
'nbsphinx',
39+
]
40+
41+
# Add any paths that contain templates here, relative to this directory.
42+
templates_path = ['_templates']
43+
44+
# The suffix(es) of source filenames.
45+
# You can specify multiple suffix as a list of string:
46+
#
47+
# source_suffix = ['.rst', '.md']
48+
source_suffix = '.rst'
49+
50+
# The master toctree document.
51+
master_doc = 'index'
52+
53+
# General information about the project.
54+
project = 'erddapy'
55+
copyright = '2017, Filipe Fernandes'
56+
author = 'Filipe Fernandes'
57+
58+
# The version info for the project you're documenting, acts as replacement for
59+
# |version| and |release|, also used in various other places throughout the
60+
# built documents.
61+
#
62+
from erddapy._version import get_versions
63+
version = release = get_versions()['version']
64+
del get_versions
65+
66+
# The language for content autogenerated by Sphinx. Refer to documentation
67+
# for a list of supported languages.
68+
#
69+
# This is also used if you do content translation via gettext catalogs.
70+
# Usually you set "language" from the command line for these cases.
71+
language = None
72+
73+
# List of patterns, relative to source directory, that match files and
74+
# directories to ignore when looking for source files.
75+
# This patterns also effect to html_static_path and html_extra_path
76+
exclude_patterns = []
77+
78+
# The name of the Pygments (syntax highlighting) style to use.
79+
pygments_style = 'sphinx'
80+
81+
# If true, `todo` and `todoList` produce output, else they produce nothing.
82+
todo_include_todos = False
83+
84+
85+
# -- Options for HTML output ----------------------------------------------
86+
87+
# The theme to use for HTML and HTML Help pages. See the documentation for
88+
# a list of builtin themes.
89+
#
90+
html_theme = 'alabaster'
91+
92+
# Theme options are theme-specific and customize the look and feel of a theme
93+
# further. For a list of options available for each theme, see the
94+
# documentation.
95+
#
96+
html_theme_options = {
97+
'logo': 'logo.png',
98+
'logo_name': 'erddapy',
99+
'github_user': 'pyoceans',
100+
'github_repo': 'erddapy',
101+
'github_banner': True,
102+
'travis_button': True,
103+
'fixed_sidebar': True,
104+
}
105+
106+
107+
# Add any paths that contain custom static files (such as style sheets) here,
108+
# relative to this directory. They are copied after the builtin static files,
109+
# so a file named "default.css" will overwrite the builtin "default.css".
110+
html_static_path = ['_static']
111+
112+
# Custom sidebar templates, must be a dictionary that maps document names
113+
# to template names.
114+
#
115+
# This is required for the alabaster theme
116+
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
117+
html_sidebars = {
118+
'**': [
119+
'about.html',
120+
'navigation.html',
121+
'relations.html', # needs 'show_related': True theme option to display
122+
'searchbox.html',
123+
'donate.html',
124+
]
125+
}
126+
127+
128+
# -- Options for HTMLHelp output ------------------------------------------
129+
130+
# Output file base name for HTML help builder.
131+
htmlhelp_basename = 'erddapydoc'
132+
133+
134+
# -- Options for LaTeX output ---------------------------------------------
135+
136+
latex_elements = {
137+
# The paper size ('letterpaper' or 'a4paper').
138+
#
139+
# 'papersize': 'letterpaper',
140+
141+
# The font size ('10pt', '11pt' or '12pt').
142+
#
143+
# 'pointsize': '10pt',
144+
145+
# Additional stuff for the LaTeX preamble.
146+
#
147+
# 'preamble': '',
148+
149+
# Latex figure (float) alignment
150+
#
151+
# 'figure_align': 'htbp',
152+
}
153+
154+
# Grouping the document tree into LaTeX files. List of tuples
155+
# (source start file, target name, title,
156+
# author, documentclass [howto, manual, or own class]).
157+
latex_documents = [
158+
(master_doc, 'erddapy.tex', 'erddapy Documentation',
159+
'Filipe Fernandes', 'manual'),
160+
]
161+
162+
163+
# -- Options for manual page output ---------------------------------------
164+
165+
# One entry per manual page. List of tuples
166+
# (source start file, name, description, authors, manual section).
167+
man_pages = [
168+
(master_doc, 'erddapy', 'erddapy Documentation',
169+
[author], 1)
170+
]
171+
172+
173+
# -- Options for Texinfo output -------------------------------------------
174+
175+
# Grouping the document tree into Texinfo files. List of tuples
176+
# (source start file, target name, title, author,
177+
# dir menu entry, description, category)
178+
texinfo_documents = [
179+
(master_doc, 'erddapy', 'erddapy Documentation',
180+
author, 'erddapy', 'One line description of project.',
181+
'Miscellaneous'),
182+
]
File renamed without changes.

docs/source/index.rst

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
erddapy
2+
=======
3+
4+
.. toctree::
5+
:maxdepth: 3
6+
:caption: Contents:
7+
8+
erddapy_tour.ipynb
9+
10+
Indices and tables
11+
==================
12+
13+
* :ref:`genindex`
14+
* :ref:`modindex`
15+
* :ref:`search`

erddapy/erddapy.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
from __future__ import (absolute_import, division, print_function)
22

3-
from urllib.parse import quote_plus
3+
try:
4+
from urllib.parse import quote_plus
5+
except ImportError:
6+
from urllib import quote_plus
47

5-
from erddapy.utilities import _clean_response, _check_url_response
8+
from erddapy.utilities import _check_url_response, _clean_response
69

710

811
class ERDDAP(object):

erddapy/utilities.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from __future__ import (absolute_import, division, print_function)
22

33

4+
import io
5+
from tempfile import NamedTemporaryFile
6+
47
import requests
58

69

@@ -20,14 +23,11 @@ def _check_url_response(url):
2023

2124

2225
def _urlopen(url):
23-
import io
24-
import requests
2526
return io.BytesIO(requests.get(url).content)
2627

2728

2829
def open_dataset(url, **kwargs):
2930
import xarray as xr
30-
from tempfile import NamedTemporaryFile
3131
data = _urlopen(url).read()
3232
with NamedTemporaryFile(suffix='.nc', prefix='erddapy_') as tmp:
3333
tmp.write(data)

github_deploy_key.enc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
gAAAAABZ3MDN30ZbgP4oTvDvcuJKwd3OfAV0B-Sc3fOYvXmU2zkDkvkG8K16OWgX_nG4mHrm_MBvu5dFkUkyKo7IUNXEyQcCwXeP4psYbwj4GZnRvln1Gs8f4rZGHIamHoTKhQYuEMxl1eJosm7MFL4eSiBvqseWI2e_C5AHzHrhKosezLm_ZpLILb3HJ8VcK3PScbpXU-MUW9twX4gc4qfqP9yK0xHSBXn_0yLOoyMhEv74srEe4xeGD9iUvF0uMJjlPx-_6XfBk9y2QicYPdv7iEUUVAXe4qlFJd4QxjPPFWkp8beM2_kb-_eY9o9SdBRF0tDgxMVjn8nUa9D2DG1V77_X61IKCDjPo8jaBQywriApRJjgyCxU79SGtgeDhBpx1qoPF8vy8DmhxGiwG_NlMgIICHZ1tNrB3slTc86oZp3KXhyrBTaP3ds87-dP0ktOvDPTwRBDH2qSSQF_X5ySyVj2umO03ij1Yxy97i_Pjcn28s34O2L_gU46ksc_2r4i-fip_9bU5MiDgDALv1TrcLIMofk-bUt_AC-Mj205-TRUXB4heIxTMLLRWf6iJzjarSbDLM5uNxFowJ85gCwjcOiHwYGG6mIsoTPxymft6CLxvPHJiKOrz_7oarJexfNqJ9iIqe6as-LW_ZWWh_wvaJdMSW_KQSuW5YB-DFdPPpp2DHEX5Gh_uo62Y9rkACo35mK3eaOlXEo1KIuxInEJnrlRUqkbf-iLc72eAz4cdjeSv_ePbmDwcKaCxR-0Xla9v-63Pm_SeM3v2FuMQk80-Z24a-gktytT3YqdlC2mO6aDzWbq7efQ18RPkGK5tZ5T7x9pKjn7YMQ9_H6zaSLCs_BJXRYEm5SworLc9lLUuETwKnxg5mPqv9RMUoOz3Gy-wJiUfj34xk3RRIe8f-_XpFLYAN3C6M8EtrvaCNb3bj2hbhqmZSxI2WAMeB-fgEs5FoM5NEjR0RJtYG5Zn4qkcGwZosuQwyql5n6YQJxUivk6qdnQzn0xM-uuC8TtgwmwrhUS6bUxe6dAeg1ayYccW3mGFB5NttX4RSlxPsw7DO8ylkIiL-Zd2F5XFR7JcCSowXOp1WEqVmIvMPAnasTBO8xEwnU0mSbF3X_-2lOIdMKS5MjdGG0qbV1Ev5aldJa3-AEg7AW11XxYjELGs__UvMrbihkW4FKNBcUFYQaDEZPfCRi3wzQi7VzslN3KjN-zM8gP79GaWx3wxJLrasHhagysqO5sAZg73wp-1gc51lTaUL8d_8mlZe5L9w9W4XfM2txaMEWW9hPDdPZY1uoAUnUm8YgJIYPxcvf2CO_Tvnx61N1P5BYWlOPl7HzuCBQ5v5Y2qhCoHmOwMB4QuOmS6iNF69spLHe_w9l06IZURJiyiIy8IXoDjATI2TNVy43QScF7cS1Xx0ckIhyEui6j16JC4Q0dai6HIFiH1Afxtfcj8sTSADig3l5Esi0Id6I8EfZ-Lvvr1RW4O0F4h8bdEG-wpN-i2gtJDb6cF3ua9HnIC-08k_oF6N9abUrDpAq_sBpnXIGaGZobvmsRO-cF8Hl9td2WKDvb6BN3LBHLW5OFiNloSotMbJcgayFL3dkq-zQTcEFit2Sje98PTRhszO_w30aHUKEVPkAoKLLp9WBjRK6XH0IbyPqS56WEevOKI-9uyOZMvAYkeg6gytEuqPpW3P6UJmffo3Egn4P7xG1wRSXZb8q7bR33zlDfdiiVNrqdyJwXE1ZkgfAkEIZ-uC_W-M_lYMuADrkDgs8dzdlvx209j3-SEIAodTqGylMDy_WLjpveVSDL1LLl-ZPtvzgcRUSaN-0QCHNXJpFRIMQv8yK_f9N3CH6TFiykNXhteMbji87ovvQrUoc23L1VT-q9-fgJBD6pKS4_R_x1EJ3WY7lhHdxcRE53Lzp6Ef0njN9lvgn5Qcr1j3Duu4mjOndLH_datluGnFAsPyB9Rj51efkG9jNS3812PpC3x9fbe99tAHPHojNxWBAtNTTXHVOZpNqz2SYRnZ787f3IEkzeUv4F4SkVqm9xxlRKfJz-B6NyiRqQON26rTVEzPEZLticZ6JPokilWMk8ejte1O209-Vkl0eNmea0UvIinaOuZnVe6zDtUCJy4rnRFPR94ptR_uZQvBi092Onexzm7nyPsExF5pT3DqXqhgymIEcsEHvEgv0iNkvGxekqakDj8nDRphfdOjpRQCOV26TxSUub-8vv3ADvBy2C7e46_N3xhvI7UZL8zScgejZKqGOe9DsCb4_ZWnY3mBHjYpqGNkILFgc_n7AlkqdKhvTbVa3-ERVypEVIzG8h_Ifi5gpzbjEUtWIsleD-PX0U_oxkJR5MriCHh_ZyW0Vhqav0z-Bhbu2IS4tQybj9KKi2i4OOnNOGwnHRocyy9Sm5mTn5AQCWXCYe_Ucnyz3j5f49CEsDTT8R3NcQhxs4rAgXzqQgWQVapgL0_lt9ljygQOlbeaZQUIjpuKuHUbRBf1kKexwmT-Zkk9AisOMw_yZCTn8q11ntVBOszF-8w9E6ABSW2b_v-RVhm-xEWKxQ3wK-amRQQUSaIEIY_MxBgFDRPWdzIo2C79tvi-k0xsoqkIIstR9M5le5kvVPdeEsC3WtIhZbTdW40OluwOp_fVu_uMpA8oP3AV_9biofK1R_gG2hzH2IJvRYJk3b7TOZ3edVEPvPx_yy-jWsVC_9Ato68TxeWX967zs6a8NZsnsGRnN4PRiWhWSS-cWIHZfdcTqRhQu6Hb_iYK8tBU9GV_HWmr8Q3z7hzDJWLxXoQJC6wva5rTJaD9Ivxmg7ZYyDF-kdBk_2Hy3vgc8OvmyK6MH25KCzgzRnIbfcEFhyA8JN3zh6HfNZa-wZYVU23HyQP4Kyxrg1qwR9WRokfHfaZ6fbANNLA4kcyB9w33sRGN8j6SvzhtbD01DX943u1h5AhPmL8I3YSx_fe5HEJuPV_bDqA7WePPB3mZvOge_vkyTJnHd3YIlK2RSWlcVd0HwL0x-McPRTnnzs5RlzVsc1yoZSEr1Ah755WYR8M5a87QSMCqJRKW7f6Tq_Y6v8tipK27itNlCnNWtjvIpJTo24S1BZR5rrRFO_N00vnCPpDjNsMg-isPjmVEsbpzDFUm4YfCQ0gqbjtBmspDju62_Zf4OZQNJq4zx_tuDVkVIy9i6HDf_w-aU_HMdbv88_usnjnnpLg1UNkRJnqrrlzceQ3imzwqGnMnPF9lyDkvwIMBkCIG-OqF4ZphlkE_hfDJPrYo_5tP2PsLgMbNu30e1-TVAl6txeTe0tm2pITkrecG9iThlewKNQTtf-ToqGp-rcOpgFA_VG5ya5BLZ3L8vD0rKzrDFdMHcIJMQD5ifiQ3anlrqJ3NZaEUK5-RaouHLLlXTyzKM3lkmJp2marBesGagZRlxXfDiDAIJjy9ax6Pmy3EUK6zqYyC9tNaCed_uXIxbEASLP1QshC9c6hZRFPiAv6nD_ihGsf5_5dWMOA8AwCrMNwD6wFZRcgd1w4CwBzocGPru2E49R5UYh8bjdVApAgBKoDchTCXdfN4uXEz9O07F_zDAwAnzR7UmFIJ3BFltmtWAxzFPZt7JTPrQAS9u-pXRO-Sf1-eGg98wk7GVwpsu-ZaHzpvmWKyY3uNeHolIIjB8GSM6shXuI18LMy98RvPlVtcVMoahAaRIZSm0JhffF8TIlZPUWLouUsXZXZN8UZihE3Usf3Z1ul-MIBKbv6mCAOGQvfsppag_ccMGYrGvi0hmOoKvDDNCxyxrMhBqN-0N0cpth1Xnbdms-yGJy00Tek6IJi0z1SGqNFoULXSldJeRMqDXZlayf4yOKAEk4i6WV7YbQZlai-QDJ0vnnQFfSGq_0miVydPhG9A20lFncE_sDwIoYKEkfHyR45WpeUm8f5z2Gy7eGIEt8tPxtvdvy67tUPpPfg-_Ww5a9097LB0eGqqLO6T0BTM_wyEX56qSzMolla6z5OY3o1xIq7q14wyM6kByZYzbeYKUPm35ifU60x_rllN3zdfdVgMRaALKpKKdownfRfGYUXE7EY_ra7Fo2BYroVSGxOI2FVNJ5y4FguQVVIroR9Ubc4gV-dNEig65ghJ5VoLcONA-Vg3XHxyq4XCxVpy66suyCHXgaBMIvjvJSe_X37s4K4txFNp6by4PPGtndiZmFHZnTYDgQKtzuub5MKxejo4AOHYgaSWdjKsfVLBorSfoTUFskXk1ZPLipsb59FBVfBrrYc7crNB5mwFP2DIdDKpbUtZSQwsEbywYQ7eHSOHGZKhExVHRpvz758YT10t6_iNjW_1TlQMSHeZFBZuOtTO_fsNPBS1-ccHT2VUeOpwwY5J0BnY8vnvnIYYmceraE0Uu22kL55FnBB3FkjeegWK9QSrIEnAp1RpK0pVQ=

requirements-dev.txt

+3
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ flake8-mutable
66
flake8-print
77
flake8-quotes
88
netcdf4
9+
nbsphinx
10+
sphinx
11+
pytest

setup.py

+20-18
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
# -*- coding: utf-8 -*-
2-
31
from __future__ import (absolute_import, division, print_function)
42

53
import os
6-
from setuptools import setup
4+
from codecs import open
5+
from setuptools import find_packages, setup
76

87
import versioneer
98

@@ -22,28 +21,31 @@ def read(*parts):
2221
install_requires = [t.strip() for t in tests_require]
2322

2423

25-
config = dict(
26-
name='erddapy',
27-
version=versioneer.get_version(),
28-
description='Python interface for ERDDAP',
29-
long_description=long_description,
30-
author='Filipe Fernandes',
31-
author_email='[email protected]',
32-
url='https://github.com/ocefpaf/erddapy',
33-
keywords=['ERDDAP', 'Scientific Python', 'Remote data access'],
34-
classifiers=[
24+
config = {
25+
'name': 'erddapy',
26+
'version': versioneer.get_version(),
27+
'description': 'Python interface for ERDDAP',
28+
'long_description': long_description,
29+
'author': 'Filipe Fernandes',
30+
'author_email': '[email protected]',
31+
'url': 'https://github.com/ocefpaf/erddapy',
32+
'keywords': ['ERDDAP', 'Scientific Python', 'Remote data access'],
33+
'classifiers': [
3534
'Programming Language :: Python :: 2.7',
3635
'Programming Language :: Python :: 3.4',
3736
'Programming Language :: Python :: 3.5',
3837
'Programming Language :: Python :: 3.6',
3938
'Topic :: Scientific/Engineering :: GIS',
4039
'License :: OSI Approved :: BSD License',
4140
'Development Status :: 4 - Beta'],
42-
tests_require=['pytest'],
43-
license=LICENSE,
44-
install_requires=install_requires,
45-
cmdclass=versioneer.get_cmdclass(),
46-
)
41+
'packages': find_packages(),
42+
'extras_require': {
43+
'testing': ['pytest'],
44+
},
45+
'license': LICENSE,
46+
'install_requires': install_requires,
47+
'cmdclass': versioneer.get_cmdclass(),
48+
}
4749

4850

4951
setup(**config)

0 commit comments

Comments
 (0)