')
-
- def test_complex_custom_formatting(self):
- class User(object):
- def __init__(self, id, username):
- self.id = id
- self.username = username
- def __html_format__(self, format_spec):
- if format_spec == 'link':
- return Markup('{1}').format(
- self.id,
- self.__html__(),
- )
- elif format_spec:
- raise ValueError('Invalid format spec')
- return self.__html__()
- def __html__(self):
- return Markup('{0}').format(self.username)
-
- user = User(1, 'foo')
- assert Markup('User: {0:link}').format(user) == \
- Markup('
User: foo')
-
- def test_all_set(self):
- import markupsafe as markup
- for item in markup.__all__:
- getattr(markup, item)
-
- def test_escape_silent(self):
- assert escape_silent(None) == Markup()
- assert escape(None) == Markup(None)
- assert escape_silent('') == Markup(u'<foo>')
-
- def test_splitting(self):
- self.assertEqual(Markup('a b').split(), [
- Markup('a'),
- Markup('b')
- ])
- self.assertEqual(Markup('a b').rsplit(), [
- Markup('a'),
- Markup('b')
- ])
- self.assertEqual(Markup('a\nb').splitlines(), [
- Markup('a'),
- Markup('b')
- ])
-
- def test_mul(self):
- self.assertEqual(Markup('a') * 3, Markup('aaa'))
-
-
-class MarkupLeakTestCase(unittest.TestCase):
-
- def test_markup_leaks(self):
- counts = set()
- for count in range(20):
- for item in range(1000):
- escape("foo")
- escape("")
- escape(u"foo")
- escape(u"")
- counts.add(len(gc.get_objects()))
- assert len(counts) == 1, 'ouch, c extension seems to leak objects'
-
-
-def suite():
- suite = unittest.TestSuite()
- suite.addTest(unittest.makeSuite(MarkupTestCase))
-
- # this test only tests the c extension
- if not hasattr(escape, 'func_code'):
- suite.addTest(unittest.makeSuite(MarkupLeakTestCase))
-
- return suite
-
-
-if __name__ == '__main__':
- unittest.main(defaultTest='suite')
-
-# vim:sts=4:sw=4:et:
diff --git a/licences/COPYING.LESSER b/licences/COPYING.LESSER
deleted file mode 100644
index 6600f1c98d9..00000000000
--- a/licences/COPYING.LESSER
+++ /dev/null
@@ -1,165 +0,0 @@
-GNU LESSER GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
- This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
- 0. Additional Definitions.
-
- As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
- "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
- An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
- A "Combined Work" is a work produced by combining or linking an
-Application with the Library. The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
- The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
- The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
- 1. Exception to Section 3 of the GNU GPL.
-
- You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
- 2. Conveying Modified Versions.
-
- If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
- a) under this License, provided that you make a good faith effort to
- ensure that, in the event an Application does not supply the
- function or data, the facility still operates, and performs
- whatever part of its purpose remains meaningful, or
-
- b) under the GNU GPL, with none of the additional permissions of
- this License applicable to that copy.
-
- 3. Object Code Incorporating Material from Library Header Files.
-
- The object code form of an Application may incorporate material from
-a header file that is part of the Library. You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
- a) Give prominent notice with each copy of the object code that the
- Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the object code with a copy of the GNU GPL and this license
- document.
-
- 4. Combined Works.
-
- You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
- a) Give prominent notice with each copy of the Combined Work that
- the Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the Combined Work with a copy of the GNU GPL and this license
- document.
-
- c) For a Combined Work that displays copyright notices during
- execution, include the copyright notice for the Library among
- these notices, as well as a reference directing the user to the
- copies of the GNU GPL and this license document.
-
- d) Do one of the following:
-
- 0) Convey the Minimal Corresponding Source under the terms of this
- License, and the Corresponding Application Code in a form
- suitable for, and under terms that permit, the user to
- recombine or relink the Application with a modified version of
- the Linked Version to produce a modified Combined Work, in the
- manner specified by section 6 of the GNU GPL for conveying
- Corresponding Source.
-
- 1) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (a) uses at run time
- a copy of the Library already present on the user's computer
- system, and (b) will operate properly with a modified version
- of the Library that is interface-compatible with the Linked
- Version.
-
- e) Provide Installation Information, but only if you would otherwise
- be required to provide such information under section 6 of the
- GNU GPL, and only to the extent that such information is
- necessary to install and execute a modified version of the
- Combined Work produced by recombining or relinking the
- Application with a modified version of the Linked Version. (If
- you use option 4d0, the Installation Information must accompany
- the Minimal Corresponding Source and Corresponding Application
- Code. If you use option 4d1, you must provide the Installation
- Information in the manner specified by section 6 of the GNU GPL
- for conveying Corresponding Source.)
-
- 5. Combined Libraries.
-
- You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
- a) Accompany the combined library with a copy of the same work based
- on the Library, uncombined with any other library facilities,
- conveyed under the terms of this License.
-
- b) Give prominent notice with the combined library that part of it
- is a work based on the Library, and explaining where to find the
- accompanying uncombined form of the same work.
-
- 6. Revised Versions of the GNU Lesser General Public License.
-
- The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
- If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
diff --git a/licences/LICENSE-BSD-JINJA2 b/licences/LICENSE-BSD-JINJA2
deleted file mode 100644
index 10145a26434..00000000000
--- a/licences/LICENSE-BSD-JINJA2
+++ /dev/null
@@ -1,31 +0,0 @@
-Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details.
-
-Some rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
- * The names of the contributors may not be used to endorse or
- promote products derived from this software without specific
- prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/licences/LICENSE-BSD-MARKUPSAFE b/licences/LICENSE-BSD-MARKUPSAFE
deleted file mode 100644
index 5d2693890dd..00000000000
--- a/licences/LICENSE-BSD-MARKUPSAFE
+++ /dev/null
@@ -1,33 +0,0 @@
-Copyright (c) 2010 by Armin Ronacher and contributors. See AUTHORS
-for more details.
-
-Some rights reserved.
-
-Redistribution and use in source and binary forms of the software as well
-as documentation, with or without modification, are permitted provided
-that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
-* The names of the contributors may not be used to endorse or
- promote products derived from this software without specific
- prior written permission.
-
-THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
-NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 00000000000..74210ef60af
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,68 @@
+# THIS FILE IS PART OF THE CYLC SUITE ENGINE.
+# Copyright (C) 2008-2018 NIWA & British Crown (Met Office) & Contributors.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+[metadata]
+name = cylc
+author = Hilary Oliver
+author_email = cylc@googlegroups.com
+url=https://cylc.github.io/
+description =
+ Cylc (\"silk\") is a workflow engine for cycling systems -
+ it orchestrates distributed suites of interdependent
+ cycling tasks that may continue to run indefinitely.
+keywords =
+ cycling-workflows
+ hpc
+ job-scheduler
+ metascheduler
+ workflow-automation
+ workflow-engine
+ workflow-management
+ scheduling
+license = GPL
+license_file = COPYING
+platforms = any
+classifiers =
+ Environment :: Console
+ Environment :: Web Environment
+ Intended Audience :: Developers
+ Intended Audience :: System Administrators
+ Intended Audience :: Science/Research
+ License :: OSI Approved :: GNU General Public License v3 (GPLv3)
+ Operating System :: POSIX :: Linux
+ Programming Language :: Python
+ Programming Language :: Python :: 3.7
+ Programming Language :: Python :: 3 :: Only
+ Programming Language :: Python :: Implementation :: CPython
+ Topic :: Scientific/Engineering :: Atmospheric Science
+python_requires = >=3.7
+setup_requires=pytest-runner==4.4
+
+[bdist_wheel]
+universal = 1
+
+[bdist_rpm]
+requires =
+ python3-colorama
+ python-isodatetime
+ python3-jinja2
+ python3-josepy
+ python3-MarkupSafe
+ python3-zmq
+
+[aliases]
+# so that running python setup.py test invokes pytest
+test = pytest
diff --git a/setup.py b/setup.py
new file mode 100644
index 00000000000..810902ef172
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,149 @@
+#!/usr/bin/env python
+# coding=utf-8
+
+# THIS FILE IS PART OF THE CYLC SUITE ENGINE.
+# Copyright (C) 2008-2018 NIWA & British Crown (Met Office) & Contributors.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+import codecs
+import re
+from distutils.errors import DistutilsExecError
+from glob import glob
+from os.path import join, dirname, abspath
+from shutil import move, rmtree
+
+from setuptools import setup, find_packages
+SPHINX_AVAILABLE = False
+try:
+ from sphinx.setup_command import BuildDoc
+ SPHINX_AVAILABLE = True
+except ImportError:
+ pass
+
+here = abspath(dirname(__file__))
+
+
+def read(*parts):
+ with codecs.open(join(here, *parts), 'r') as fp:
+ return fp.read()
+
+
+def find_version(*file_paths):
+ version_file = read(*file_paths)
+ version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]",
+ version_file, re.M)
+ if version_match:
+ return version_match.group(1)
+ raise RuntimeError("Unable to find version string.")
+
+
+cmdclass = {}
+if SPHINX_AVAILABLE:
+
+ class MakeDocs(BuildDoc):
+ """Port of old `cylc-make-docs`. Removed in #2989.
+
+ This class extends the Sphinx command class for setuptools. With
+ a difference that it tries to mimic the behaviour of the previous
+ `cylc-make-docs`.
+
+ So first it will execute `make-commands.sh`, which builds the
+ commands help information, in the appendices.
+
+ Then, instead of calling one builder, this class will call the
+ builder fot he single HTML, and also the builder for the multiple
+ HTML documentation.
+
+ Finally, one more tweak in this class is to move the doctrees
+ folder (in the same level as the documentation) to within the
+ documentation folder, named `.doctrees`, as before with
+ `cylc-make-docs`.
+ """
+
+ def run(self): # type: () -> None
+ try:
+ self.spawn(["./doc/src/custom/make-commands.sh"])
+ except DistutilsExecError as e:
+ self.warn("Failed to run make-commands.sh")
+ raise e
+ self.do_run("html", "built-sphinx")
+ self.do_run("singlehtml", "built-sphinx-single")
+
+ def do_run(self, builder: str, output_dir: str):
+ """
+ Args:
+ builder (str): name of the Sphinx builder
+ output_dir (str): directory to write the documentation produced
+ """
+ self.builder = builder
+ self.builder_target_dirs = [
+ (builder, join(self.build_dir, output_dir))]
+ super().run()
+ # move doctrees to $build_dir/.doctrees
+ correct_doctrees = join(self.builder_target_dirs[0][1],
+ ".doctrees")
+ rmtree(correct_doctrees, ignore_errors=True)
+ move(self.doctree_dir, correct_doctrees)
+
+ cmdclass["build_sphinx"] = MakeDocs
+
+
+install_requires = [
+ 'colorama==0.4.*',
+ 'isodatetime==1!2.0.*',
+ 'jinja2>=2.10.1, <2.11.0',
+ 'markupsafe==1.1.*',
+ 'python-jose==3.0.*',
+ 'pyzmq==18.0.*'
+]
+tests_require = [
+ 'codecov==2.0.*',
+ 'coverage==4.5.*',
+ 'pytest-cov==2.6.*',
+ 'pytest==4.4.*',
+ 'pycodestyle==2.5.*',
+ 'testfixtures==6.6.*'
+]
+
+extra_requires = {
+ 'empy': ['EmPy==3.3.*'],
+ 'docs': ['sphinx==2.0.*'],
+ 'all': []
+}
+extra_requires['all'] += extra_requires['empy']
+extra_requires['all'] += extra_requires['docs']
+extra_requires['all'] += tests_require
+
+setup(
+ version=find_version("lib", "cylc", "__init__.py"),
+ long_description=open('README.md').read(),
+ long_description_content_type="text/markdown",
+ scripts=glob(join('bin', '*')),
+ packages=find_packages("lib/") + ["Jinja2Filters"],
+ package_dir={"": "lib"},
+ package_data={
+ '': ['*.txt', '*.md', '*.sh']
+ },
+ cmdclass=cmdclass,
+ include_package_data=False,
+ install_requires=install_requires,
+ tests_require=tests_require,
+ extras_require=extra_requires,
+ project_urls={
+ "Documentation": "https://cylc.github.io/documentation.html",
+ "Source": "https://github.com/cylc/cylc",
+ "Tracker": "https://github.com/cylc/cylc/issues"
+ }
+)