You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@climate.apache.org by le...@apache.org on 2015/09/27 20:24:07 UTC
[2/3] climate git commit: CLIMATE-539 Get OCW on to PyPI
CLIMATE-539 Get OCW on to PyPI
Project: http://git-wip-us.apache.org/repos/asf/climate/repo
Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/3d5afe86
Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/3d5afe86
Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/3d5afe86
Branch: refs/heads/master
Commit: 3d5afe8618ec23ad2fa6cae2ccb10457cee3ed4e
Parents: 8334a83 29f6655
Author: Lewis John McGibbney <le...@jpl.nasa.gov>
Authored: Fri Sep 25 23:49:10 2015 -0700
Committer: Lewis John McGibbney <le...@jpl.nasa.gov>
Committed: Fri Sep 25 23:49:10 2015 -0700
----------------------------------------------------------------------
.DS_Store | Bin 6148 -> 0 bytes
.mailmap | 28 +
.pylintrc | 380 +++++
CHANGES.txt | 112 ++
KEYS | 84 ++
MANIFEST.in | 2 +
doap_CLIMATE.rdf | 14 +
docs/source/conf.py | 12 +-
docs/source/config/config_overview.rst | 85 ++
docs/source/config/config_writer.rst | 5 +
docs/source/config/dataset_information.rst | 89 ++
docs/source/config/evaluation_settings.rst | 56 +
docs/source/config/metrics_information.rst | 12 +
docs/source/config/plots_settings.rst | 44 +
docs/source/index.rst | 3 +
docs/source/ocw/metrics.rst | 34 +-
docs/source/ocw/overview.rst | 179 +++
docs/source/ocw/utils.rst | 5 +
easy-ocw/install-osx.sh | 8 +-
easy-ocw/install-ubuntu-12_04.sh | 189 ---
easy-ocw/install-ubuntu.sh | 195 +++
easy-ocw/ocw-pip-dependencies.txt | 2 +
examples/esgf_integration_examply.py | 40 +
examples/knmi_to_cru31_full_bias.py | 3 +-
examples/multi_model_evaluation.py | 151 ++
examples/multi_model_taylor_diagram.py | 144 ++
examples/simple_model_to_model_bias.py | 23 +-
.../simple_model_to_model_bias_DJF_and_JJA.py | 64 +
examples/subregions.py | 53 +
examples/subregions_portrait_diagram.py | 139 ++
examples/time_series_with_regions.py | 141 ++
ez_setup.py | 341 +++++
mccsearch/GrADsScripts/.DS_Store | Bin 6148 -> 0 bytes
mccsearch/GrADsScripts/accuTRMM.gs | 11 -
mccsearch/GrADsScripts/c3.gs | 11 -
.../GrADsScripts/cloudElementVars_template | 12 -
.../GrADsScripts/cloudElementVars_template2 | 11 -
mccsearch/GrADsScripts/cs1.gs | 83 -
mccsearch/GrADsScripts/cs3.gs | 10 -
mccsearch/code/mccSearch.py | 798 ++++------
mccsearch/code/mccSearchUI.py | 47 +-
mccsearch/docs/mccsearch.md | 11 +-
ocw-cli/cli_app.py | 1422 ++++++++++++++++++
ocw-cli/ocw_cli.py | 848 -----------
ocw-config-runner/configuration_parsing.py | 285 ++++
ocw-config-runner/configuration_writer.py | 302 ++++
ocw-config-runner/evaluation_creation.py | 178 +++
ocw-config-runner/example/portrait_diagram.yaml | 30 +
.../example/simple_model_to_model_bias.yaml | 35 +
ocw-config-runner/example/subregion.yaml | 30 +
.../example/taylor_diagram_example.yaml | 36 +
.../example/time_series_plot_example.yaml | 31 +
ocw-config-runner/ocw_evaluation_from_config.py | 72 +
ocw-config-runner/plot_generation.py | 204 +++
ocw-config-runner/tests/test_config_parsing.py | 806 ++++++++++
ocw-config-runner/tests/test_config_writer.py | 768 ++++++++++
.../tests/test_evaluation_creation.py | 49 +
ocw-ui/backend/bottlemet.py | 615 --------
ocw-vm/init-ocw-vm.sh | 4 +-
ocw/data_source/dap.py | 22 +-
ocw/data_source/esgf.py | 52 +-
ocw/data_source/local.py | 406 ++---
ocw/data_source/rcmed.py | 49 +-
ocw/dataset.py | 130 +-
ocw/dataset_processor.py | 368 ++++-
ocw/evaluation.py | 133 +-
ocw/metrics.py | 225 ++-
ocw/plotter.py | 396 +++--
ocw/statistical_downscaling.py | 111 ++
ocw/tests/test_dap.py | 11 +-
ocw/tests/test_dataset.py | 19 +-
ocw/tests/test_dataset_processor.py | 21 +-
ocw/tests/test_evaluation.py | 78 +
ocw/tests/test_local.py | 14 +
ocw/tests/test_metrics.py | 114 +-
ocw/tests/test_rcmed.py | 23 +-
ocw/tests/test_utils.py | 22 +-
ocw/utils.py | 259 ++--
rcmet/LICENSE.txt | 218 ---
rcmet/src/main/python/bin/rcmet.py | 265 ----
.../docs/Bottle Web Service Documentation.docx | Bin 179630 -> 0 bytes
rcmet/src/main/python/docs/Makefile | 153 --
.../main/python/docs/RCMET_documentation.docx | Bin 190254 -> 0 bytes
rcmet/src/main/python/docs/conf.py | 260 ----
rcmet/src/main/python/docs/index.rst | 22 -
rcmet/src/main/python/docs/make.bat | 190 ---
rcmet/src/main/python/docs/rcmes.cli.rst | 19 -
rcmet/src/main/python/docs/rcmes.rst | 22 -
rcmet/src/main/python/docs/rcmes.services.rst | 51 -
rcmet/src/main/python/docs/rcmes.storage.rst | 27 -
rcmet/src/main/python/docs/rcmes.toolkit.rst | 27 -
rcmet/src/main/python/docs/rcmes.utils.rst | 19 -
rcmet/src/main/python/rcmes/README | 8 -
rcmet/src/main/python/rcmes/__init__.py | 19 -
rcmet/src/main/python/rcmes/classes.py | 229 ---
rcmet/src/main/python/rcmes/cli/__init__.py | 27 -
.../python/rcmes/cli/do_rcmes_processing_sub.py | 734 ---------
.../main/python/rcmes/cli/rcmet20_cordexAF.py | 996 ------------
rcmet/src/main/python/rcmes/cli/rcmet_ui.py | 112 --
.../main/python/rcmes/resources/cordexAF.cfg | 30 -
.../python/rcmes/resources/cordexSubRegions.txt | 25 -
.../resources/watersheds/CAwsdCU_wgt_ep36_d01 | 189 ---
.../resources/watersheds/CAwsdCU_wgt_ep36_d02 | 1248 ---------------
.../resources/watersheds/CAwsdDWR_wgt_ep36_d01 | 341 -----
.../resources/watersheds/CAwsdDWR_wgt_ep36_d02 | 1364 -----------------
.../rcmes/resources/watersheds/shasta_d02.txt | 276 ----
rcmet/src/main/python/rcmes/storage/__init__.py | 18 -
rcmet/src/main/python/rcmes/storage/db.py | 359 -----
rcmet/src/main/python/rcmes/storage/files.py | 783 ----------
rcmet/src/main/python/rcmes/storage/rcmed.py | 129 --
rcmet/src/main/python/rcmes/toolkit/__init__.py | 18 -
.../main/python/rcmes/toolkit/do_data_prep.py | 366 -----
rcmet/src/main/python/rcmes/toolkit/metrics.py | 1080 -------------
.../main/python/rcmes/toolkit/metrics_kyo.py | 718 ---------
rcmet/src/main/python/rcmes/toolkit/plots.py | 226 ---
rcmet/src/main/python/rcmes/toolkit/process.py | 1007 -------------
.../src/main/python/rcmes/toolkit/visualize.py | 17 -
rcmet/src/main/python/rcmes/utils/__init__.py | 20 -
.../src/main/python/rcmes/utils/fortranfile.py | 274 ----
rcmet/src/main/python/rcmes/utils/misc.py | 1413 -----------------
rcmet/src/main/python/rcmes/utils/taylor.py | 126 --
.../tests/files/missingSubRegionParam.cfg | 3 -
.../tests/files/validSubRegionConfigFile.cfg | 3 -
.../main/python/tests/files/validSubRegions.cfg | 7 -
rcmet/src/main/python/tests/test_files.py | 87 --
rcmet/src/main/python/tests/test_metrics.py | 52 -
rcmet/src/main/python/tests/test_misc.py | 74 -
rcmet/src/main/python/tests/test_process.py | 44 -
rcmet/src/main/resources/PyLintREADME.txt | 26 -
rcmet/src/main/resources/pyLintRcFile.txt | 249 ---
rcmet/src/main/resources/rcmet_use_case.txt | 57 -
setup.cfg | 4 +
setup.py | 30 +-
133 files changed, 8838 insertions(+), 17022 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/climate/blob/3d5afe86/MANIFEST.in
----------------------------------------------------------------------
diff --cc MANIFEST.in
index 0000000,0000000..4e8da59
new file mode 100644
--- /dev/null
+++ b/MANIFEST.in
@@@ -1,0 -1,0 +1,2 @@@
++include distribute_setup.py
++recursive-include docs *.txt
http://git-wip-us.apache.org/repos/asf/climate/blob/3d5afe86/ez_setup.py
----------------------------------------------------------------------
diff --cc ez_setup.py
index 0000000,0000000..d7bfe97
new file mode 100644
--- /dev/null
+++ b/ez_setup.py
@@@ -1,0 -1,0 +1,341 @@@
++#!/usr/bin/env python
++# Licensed to the Apache Software Foundation (ASF) under one or more
++# contributor license agreements. See the NOTICE.txt file distributed with
++# this work for additional information regarding copyright ownership. The ASF
++# licenses this file to you 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.
++
++"""Bootstrap setuptools installation
++To use setuptools in your package's setup.py, include this
++file in the same directory and add this to the top of your setup.py::
++ from ez_setup import use_setuptools
++ use_setuptools()
++To require a specific version of setuptools, set a download
++mirror, or use an alternate download directory, simply supply
++the appropriate options to ``use_setuptools()``.
++This file can also be run as a script to install or upgrade setuptools.
++The code in this file is taken directly from the Apache OODT project.
++"""
++import os
++import shutil
++import sys
++import tempfile
++import zipfile
++import optparse
++import subprocess
++import platform
++import textwrap
++import contextlib
++
++from distutils import log
++
++try:
++ from urllib.request import urlopen
++except ImportError:
++ from urllib2 import urlopen
++
++try:
++ from site import USER_SITE
++except ImportError:
++ USER_SITE = None
++
++DEFAULT_VERSION = "8.2.1"
++DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/"
++
++def _python_cmd(*args):
++ """
++ Return True if the command succeeded.
++ """
++ args = (sys.executable,) + args
++ return subprocess.call(args) == 0
++
++
++def _install(archive_filename, install_args=()):
++ with archive_context(archive_filename):
++ # installing
++ log.warn('Installing Setuptools')
++ if not _python_cmd('setup.py', 'install', *install_args):
++ log.warn('Something went wrong during the installation.')
++ log.warn('See the error message above.')
++ # exitcode will be 2
++ return 2
++
++
++def _build_egg(egg, archive_filename, to_dir):
++ with archive_context(archive_filename):
++ # building an egg
++ log.warn('Building a Setuptools egg in %s', to_dir)
++ _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir)
++ # returning the result
++ log.warn(egg)
++ if not os.path.exists(egg):
++ raise IOError('Could not build the egg.')
++
++
++class ContextualZipFile(zipfile.ZipFile):
++ """
++ Supplement ZipFile class to support context manager for Python 2.6
++ """
++
++ def __enter__(self):
++ return self
++
++ def __exit__(self, type, value, traceback):
++ self.close()
++
++ def __new__(cls, *args, **kwargs):
++ """
++ Construct a ZipFile or ContextualZipFile as appropriate
++ """
++ if hasattr(zipfile.ZipFile, '__exit__'):
++ return zipfile.ZipFile(*args, **kwargs)
++ return super(ContextualZipFile, cls).__new__(cls)
++
++
++@contextlib.contextmanager
++def archive_context(filename):
++ # extracting the archive
++ tmpdir = tempfile.mkdtemp()
++ log.warn('Extracting in %s', tmpdir)
++ old_wd = os.getcwd()
++ try:
++ os.chdir(tmpdir)
++ with ContextualZipFile(filename) as archive:
++ archive.extractall()
++
++ # going in the directory
++ subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
++ os.chdir(subdir)
++ log.warn('Now working in %s', subdir)
++ yield
++
++ finally:
++ os.chdir(old_wd)
++ shutil.rmtree(tmpdir)
++
++
++def _do_download(version, download_base, to_dir, download_delay):
++ egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg'
++ % (version, sys.version_info[0], sys.version_info[1]))
++ if not os.path.exists(egg):
++ archive = download_setuptools(version, download_base,
++ to_dir, download_delay)
++ _build_egg(egg, archive, to_dir)
++ sys.path.insert(0, egg)
++
++ # Remove previously-imported pkg_resources if present (see
++ # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details).
++ if 'pkg_resources' in sys.modules:
++ del sys.modules['pkg_resources']
++
++ import setuptools
++ setuptools.bootstrap_install_from = egg
++
++
++def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
++ to_dir=os.curdir, download_delay=15):
++ to_dir = os.path.abspath(to_dir)
++ rep_modules = 'pkg_resources', 'setuptools'
++ imported = set(sys.modules).intersection(rep_modules)
++ try:
++ import pkg_resources
++ except ImportError:
++ return _do_download(version, download_base, to_dir, download_delay)
++ try:
++ pkg_resources.require("setuptools>=" + version)
++ return
++ except pkg_resources.DistributionNotFound:
++ return _do_download(version, download_base, to_dir, download_delay)
++ except pkg_resources.VersionConflict as VC_err:
++ if imported:
++ msg = textwrap.dedent("""
++ The required version of setuptools (>={version}) is not available,
++ and can't be installed while this script is running. Please
++ install a more recent version first, using
++ 'easy_install -U setuptools'.
++ (Currently using {VC_err.args[0]!r})
++ """).format(VC_err=VC_err, version=version)
++ sys.stderr.write(msg)
++ sys.exit(2)
++
++ # otherwise, reload ok
++ del pkg_resources, sys.modules['pkg_resources']
++ return _do_download(version, download_base, to_dir, download_delay)
++
++def _clean_check(cmd, target):
++ """
++ Run the command to download target. If the command fails, clean up before
++ re-raising the error.
++ """
++ try:
++ subprocess.check_call(cmd)
++ except subprocess.CalledProcessError:
++ if os.access(target, os.F_OK):
++ os.unlink(target)
++ raise
++
++def download_file_powershell(url, target):
++ """
++ Download the file at url to target using Powershell (which will validate
++ trust). Raise an exception if the command cannot complete.
++ """
++ target = os.path.abspath(target)
++ ps_cmd = (
++ "[System.Net.WebRequest]::DefaultWebProxy.Credentials = "
++ "[System.Net.CredentialCache]::DefaultCredentials; "
++ "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)"
++ % vars()
++ )
++ cmd = [
++ 'powershell',
++ '-Command',
++ ps_cmd,
++ ]
++ _clean_check(cmd, target)
++
++def has_powershell():
++ if platform.system() != 'Windows':
++ return False
++ cmd = ['powershell', '-Command', 'echo test']
++ with open(os.path.devnull, 'wb') as devnull:
++ try:
++ subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
++ except Exception:
++ return False
++ return True
++
++download_file_powershell.viable = has_powershell
++
++def download_file_curl(url, target):
++ cmd = ['curl', url, '--silent', '--output', target]
++ _clean_check(cmd, target)
++
++def has_curl():
++ cmd = ['curl', '--version']
++ with open(os.path.devnull, 'wb') as devnull:
++ try:
++ subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
++ except Exception:
++ return False
++ return True
++
++download_file_curl.viable = has_curl
++
++def download_file_wget(url, target):
++ cmd = ['wget', url, '--quiet', '--output-document', target]
++ _clean_check(cmd, target)
++
++def has_wget():
++ cmd = ['wget', '--version']
++ with open(os.path.devnull, 'wb') as devnull:
++ try:
++ subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
++ except Exception:
++ return False
++ return True
++
++download_file_wget.viable = has_wget
++
++def download_file_insecure(url, target):
++ """
++ Use Python to download the file, even though it cannot authenticate the
++ connection.
++ """
++ src = urlopen(url)
++ try:
++ # Read all the data in one block.
++ data = src.read()
++ finally:
++ src.close()
++
++ # Write all the data in one block to avoid creating a partial file.
++ with open(target, "wb") as dst:
++ dst.write(data)
++
++download_file_insecure.viable = lambda: True
++
++def get_best_downloader():
++ downloaders = (
++ download_file_powershell,
++ download_file_curl,
++ download_file_wget,
++ download_file_insecure,
++ )
++ viable_downloaders = (dl for dl in downloaders if dl.viable())
++ return next(viable_downloaders, None)
++
++def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
++ to_dir=os.curdir, delay=15, downloader_factory=get_best_downloader):
++ """
++ Download setuptools from a specified location and return its filename
++ `version` should be a valid setuptools version number that is available
++ as an sdist for download under the `download_base` URL (which should end
++ with a '/'). `to_dir` is the directory where the egg will be downloaded.
++ `delay` is the number of seconds to pause before an actual download
++ attempt.
++ ``downloader_factory`` should be a function taking no arguments and
++ returning a function for downloading a URL to a target.
++ """
++ # making sure we use the absolute path
++ to_dir = os.path.abspath(to_dir)
++ zip_name = "setuptools-%s.zip" % version
++ url = download_base + zip_name
++ saveto = os.path.join(to_dir, zip_name)
++ if not os.path.exists(saveto): # Avoid repeated downloads
++ log.warn("Downloading %s", url)
++ downloader = downloader_factory()
++ downloader(url, saveto)
++ return os.path.realpath(saveto)
++
++def _build_install_args(options):
++ """
++ Build the arguments to 'python setup.py install' on the setuptools package
++ """
++ return ['--user'] if options.user_install else []
++
++def _parse_args():
++ """
++ Parse the command line for options
++ """
++ parser = optparse.OptionParser()
++ parser.add_option(
++ '--user', dest='user_install', action='store_true', default=False,
++ help='install in user site package (requires Python 2.6 or later)')
++ parser.add_option(
++ '--download-base', dest='download_base', metavar="URL",
++ default=DEFAULT_URL,
++ help='alternative URL from where to download the setuptools package')
++ parser.add_option(
++ '--insecure', dest='downloader_factory', action='store_const',
++ const=lambda: download_file_insecure, default=get_best_downloader,
++ help='Use internal, non-validating downloader'
++ )
++ parser.add_option(
++ '--version', help="Specify which version to download",
++ default=DEFAULT_VERSION,
++ )
++ options, args = parser.parse_args()
++ # positional arguments are ignored
++ return options
++
++def main():
++ """Install or upgrade setuptools and EasyInstall"""
++ options = _parse_args()
++ archive = download_setuptools(
++ version=options.version,
++ download_base=options.download_base,
++ downloader_factory=options.downloader_factory,
++ )
++ return _install(archive, _build_install_args(options))
++
++if __name__ == '__main__':
++ sys.exit(main())
http://git-wip-us.apache.org/repos/asf/climate/blob/3d5afe86/setup.cfg
----------------------------------------------------------------------
diff --cc setup.cfg
index 3725441,0000000..f65f18a
mode 100644,000000..100644
--- a/setup.cfg
+++ b/setup.cfg
@@@ -1,17 -1,0 +1,21 @@@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE.txt file distributed with
+# this work for additional information regarding copyright ownership. The ASF
+# licenses this file to you 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.
+
+[metadata]
+description-file = README.md
++
++[egg_info]
++tag_build = .dev
++tag_svn_revision = 1
http://git-wip-us.apache.org/repos/asf/climate/blob/3d5afe86/setup.py
----------------------------------------------------------------------
diff --cc setup.py
index 0384612,d94cf0f..2fa0733
--- a/setup.py
+++ b/setup.py
@@@ -15,73 -15,15 +15,69 @@@
# specific language governing permissions and limitations
# under the License.
-from setuptools import setup
+import os.path
+from setuptools import find_packages, setup
+
+# Package data
+# ------------
-
- _name = 'ocw'
- _version = '0.5'
- _description = 'Apache Open Climate Workbench'
- _url = 'http://climate.apache.org/'
- _downloadURL = 'http://pypi.python.org/pypi/ocw/'
+_author = 'Apache Open Climate Workbench'
+_authorEmail = 'dev@climate.apache.org'
- _license = 'Apache License, Version 2.0'
- _namespaces = []
- _testSuite = 'ocw.tests'
- _zipSafe = True
- _keywords = ['climate analysis', 'workbench', 'rebinning', 'metrics', 'computation', 'visualization']
- _requirements = []
+_classifiers = [
+ 'Environment :: Console',
- 'Environment :: No Input/Output (Daemon)',
+ 'Intended Audience :: Developers',
+ 'Intended Audience :: Information Technology',
+ 'Intended Audience :: Science/Research',
- 'Topic :: Database :: Front-Ends',
- 'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
- 'Topic :: Internet :: WWW/HTTP :: HTTP Servers',
+ 'Topic :: Scientific/Engineering',
+ 'Development Status :: 5 - Production/Stable',
- 'Environment :: Web Environment',
+ 'License :: OSI Approved :: Apache Software License',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ 'Topic :: Internet :: WWW/HTTP',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+]
++_description = 'Apache Open Climate Workbench'
++_downloadURL = 'http://pypi.python.org/pypi/ocw/'
++_requirements = []
++_keywords = ['climate analysis', 'workbench', 'rebinning', 'metrics', 'computation', 'visualization']
++_license = 'Apache License, Version 2.0'
++_long_description = 'The Apache Open Climate Workbench provides tools for the evaluation and analysis of climate models.'
++_name = 'ocw'
++_namespaces = []
++_testSuite = 'ocw.tests'
++_url = 'http://climate.apache.org/'
++_version = '1.0.0'
++_zipSafe = True
+
+# Setup Metadata
+# --------------
+
+def _read(*rnames):
+ return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+_header = '*' * len(_name) + '\n' + _name + '\n' + '*' * len(_name)
+_longDescription = '\n\n'.join([
+ _header,
+ _read('README.md')
+])
+open('doc.txt', 'w').write(_longDescription)
setup(
- name='Apache Open Climate Workbench',
- version='1.0.0',
- url='http://climate.apache.org/index.html',
- author='Apache Open Climate Workbench',
- author_email='dev@climate.apache.org',
- packages=['ocw', 'ocw.data_source', 'ocw.tests', 'ocw.esgf'],
- license='Apache License, Version 2.0',
- long_description='The Apache Open Climate Workbench provides tools for the evaluation and analysis of climate models.'
+ author=_author,
+ author_email=_authorEmail,
+ classifiers=_classifiers,
+ description=_description,
+ download_url=_downloadURL,
+ include_package_data=True,
+ install_requires=_requirements,
+ keywords=_keywords,
+ license=_license,
+ long_description=_longDescription,
+ name=_name,
+ namespace_packages=_namespaces,
+ packages=find_packages(),
++ #_packages = ['ocw', 'ocw.data_source', 'ocw.tests', 'ocw.esgf']
+ test_suite=_testSuite,
+ url=_url,
+ version=_version,
+ zip_safe=_zipSafe,
)