-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
119 additions
and
88 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,8 @@ | |
# Generated by ~/code/xcookie/xcookie/builders/setup.py | ||
# based on part ~/code/xcookie/xcookie/rc/setup.py.in | ||
import sys | ||
from os.path import exists | ||
import re | ||
from os.path import exists, dirname, join | ||
from setuptools import find_packages | ||
from setuptools import setup | ||
|
||
|
@@ -11,7 +12,7 @@ def parse_version(fpath): | |
""" | ||
Statically parse the version number from a python file | ||
""" | ||
value = static_parse('__version__', fpath) | ||
value = static_parse("__version__", fpath) | ||
return value | ||
|
||
|
||
|
@@ -22,16 +23,19 @@ def static_parse(varname, fpath): | |
import ast | ||
|
||
if not exists(fpath): | ||
raise ValueError('fpath={!r} does not exist'.format(fpath)) | ||
with open(fpath, 'r') as file_: | ||
raise ValueError("fpath={!r} does not exist".format(fpath)) | ||
with open(fpath, "r") as file_: | ||
sourcecode = file_.read() | ||
pt = ast.parse(sourcecode) | ||
|
||
class StaticVisitor(ast.NodeVisitor): | ||
def visit_Assign(self, node): | ||
for target in node.targets: | ||
if getattr(target, 'id', None) == varname: | ||
self.static_value = node.value.s | ||
if getattr(target, "id", None) == varname: | ||
try: | ||
self.static_value = node.value.value | ||
except AttributeError: | ||
self.static_value = node.value.s | ||
|
||
visitor = StaticVisitor() | ||
visitor.visit(pt) | ||
|
@@ -40,7 +44,7 @@ def visit_Assign(self, node): | |
except AttributeError: | ||
import warnings | ||
|
||
value = 'Unknown {}'.format(varname) | ||
value = "Unknown {}".format(varname) | ||
warnings.warn(value) | ||
return value | ||
|
||
|
@@ -53,114 +57,113 @@ def parse_description(): | |
pandoc --from=markdown --to=rst --output=README.rst README.md | ||
python -c "import setup; print(setup.parse_description())" | ||
""" | ||
from os.path import dirname, join, exists | ||
|
||
readme_fpath = join(dirname(__file__), 'README.rst') | ||
readme_fpath = join(dirname(__file__), "README.rst") | ||
# This breaks on pip install, so check that it exists. | ||
if exists(readme_fpath): | ||
with open(readme_fpath, 'r') as f: | ||
with open(readme_fpath, "r") as f: | ||
text = f.read() | ||
return text | ||
return '' | ||
return "" | ||
|
||
|
||
def parse_requirements(fname='requirements.txt', versions='loose'): | ||
def parse_requirements(fname="requirements.txt", versions=False): | ||
""" | ||
Parse the package dependencies listed in a requirements file but strips | ||
specific versioning information. | ||
Args: | ||
fname (str): path to requirements file | ||
versions (bool | str, default=False): | ||
versions (bool | str): | ||
If true include version specs. | ||
If strict, then pin to the minimum version. | ||
Returns: | ||
List[str]: list of requirements items | ||
""" | ||
from os.path import exists, dirname, join | ||
import re | ||
CommandLine: | ||
python -c "import setup, ubelt; print(ubelt.urepr(setup.parse_requirements()))" | ||
""" | ||
require_fpath = fname | ||
|
||
def parse_line(line, dpath=''): | ||
def parse_line(line, dpath=""): | ||
""" | ||
Parse information from a line in a requirements text file | ||
line = 'git+https://a.com/somedep@sometag#egg=SomeDep' | ||
line = '-e git+https://a.com/somedep@sometag#egg=SomeDep' | ||
""" | ||
# Remove inline comments | ||
comment_pos = line.find(' #') | ||
comment_pos = line.find(" #") | ||
if comment_pos > -1: | ||
line = line[:comment_pos] | ||
|
||
if line.startswith('-r '): | ||
if line.startswith("-r "): | ||
# Allow specifying requirements in other files | ||
target = join(dpath, line.split(' ')[1]) | ||
target = join(dpath, line.split(" ")[1]) | ||
for info in parse_require_file(target): | ||
yield info | ||
else: | ||
# See: https://www.python.org/dev/peps/pep-0508/ | ||
info = {'line': line} | ||
if line.startswith('-e '): | ||
info['package'] = line.split('#egg=')[1] | ||
info = {"line": line} | ||
if line.startswith("-e "): | ||
info["package"] = line.split("#egg=")[1] | ||
else: | ||
if '--find-links' in line: | ||
if "--find-links" in line: | ||
# setuptools does not seem to handle find links | ||
line = line.split('--find-links')[0] | ||
if ';' in line: | ||
pkgpart, platpart = line.split(';') | ||
line = line.split("--find-links")[0] | ||
if ";" in line: | ||
pkgpart, platpart = line.split(";") | ||
# Handle platform specific dependencies | ||
# setuptools.readthedocs.io/en/latest/setuptools.html | ||
# #declaring-platform-specific-dependencies | ||
plat_deps = platpart.strip() | ||
info['platform_deps'] = plat_deps | ||
info["platform_deps"] = plat_deps | ||
else: | ||
pkgpart = line | ||
platpart = None | ||
|
||
# Remove versioning from the package | ||
pat = '(' + '|'.join(['>=', '==', '>']) + ')' | ||
pat = "(" + "|".join([">=", "==", ">"]) + ")" | ||
parts = re.split(pat, pkgpart, maxsplit=1) | ||
parts = [p.strip() for p in parts] | ||
|
||
info['package'] = parts[0] | ||
info["package"] = parts[0] | ||
if len(parts) > 1: | ||
op, rest = parts[1:] | ||
version = rest # NOQA | ||
info['version'] = (op, version) | ||
info["version"] = (op, version) | ||
yield info | ||
|
||
def parse_require_file(fpath): | ||
dpath = dirname(fpath) | ||
with open(fpath, 'r') as f: | ||
with open(fpath, "r") as f: | ||
for line in f.readlines(): | ||
line = line.strip() | ||
if line and not line.startswith('#'): | ||
if line and not line.startswith("#"): | ||
for info in parse_line(line, dpath=dpath): | ||
yield info | ||
|
||
def gen_packages_items(): | ||
if exists(require_fpath): | ||
for info in parse_require_file(require_fpath): | ||
parts = [info['package']] | ||
if versions and 'version' in info: | ||
if versions == 'strict': | ||
parts = [info["package"]] | ||
if versions and "version" in info: | ||
if versions == "strict": | ||
# In strict mode, we pin to the minimum version | ||
if info['version']: | ||
if info["version"]: | ||
# Only replace the first >= instance | ||
verstr = ''.join(info['version']).replace('>=', '==', 1) | ||
verstr = "".join(info["version"]).replace(">=", "==", 1) | ||
parts.append(verstr) | ||
else: | ||
parts.extend(info['version']) | ||
if not sys.version.startswith('3.4'): | ||
parts.extend(info["version"]) | ||
if not sys.version.startswith("3.4"): | ||
# apparently package_deps are broken in 3.4 | ||
plat_deps = info.get('platform_deps') | ||
plat_deps = info.get("platform_deps") | ||
if plat_deps is not None: | ||
parts.append(';' + plat_deps) | ||
item = ''.join(parts) | ||
yield item | ||
parts.append(";" + plat_deps) | ||
item = "".join(parts) | ||
if item: | ||
yield item | ||
|
||
packages = list(gen_packages_items()) | ||
return packages | ||
|
@@ -196,55 +199,83 @@ def gen_packages_items(): | |
# return requirements | ||
|
||
|
||
NAME = 'xcookie' | ||
INIT_PATH = 'xcookie/__init__.py' | ||
VERSION = parse_version('xcookie/__init__.py') | ||
|
||
if __name__ == '__main__': | ||
NAME = "xcookie" | ||
INIT_PATH = "xcookie/__init__.py" | ||
VERSION = parse_version(INIT_PATH) | ||
if __name__ == "__main__": | ||
setupkw = {} | ||
|
||
setupkw['install_requires'] = parse_requirements('requirements/runtime.txt') | ||
setupkw['extras_require'] = { | ||
'all': parse_requirements('requirements.txt'), | ||
'tests': parse_requirements('requirements/tests.txt'), | ||
'optional': parse_requirements('requirements/optional.txt'), | ||
'all-strict': parse_requirements('requirements.txt', versions='strict'), | ||
'runtime-strict': parse_requirements( | ||
'requirements/runtime.txt', versions='strict' | ||
setupkw["install_requires"] = parse_requirements( | ||
"requirements/runtime.txt", versions="loose" | ||
) | ||
setupkw["extras_require"] = { | ||
"all": parse_requirements("requirements.txt", versions="loose"), | ||
"runtime": parse_requirements("requirements/runtime.txt", versions="loose"), | ||
"tests": parse_requirements("requirements/tests.txt", versions="loose"), | ||
"optional": parse_requirements("requirements/optional.txt", versions="loose"), | ||
"docs": parse_requirements("requirements/docs.txt", versions="loose"), | ||
"gdal-strict": parse_requirements("requirements/gdal.txt", versions="strict"), | ||
"gdal": parse_requirements("requirements/gdal.txt", versions="loose"), | ||
"graphics": parse_requirements("requirements/graphics.txt", versions="loose"), | ||
"headless": parse_requirements("requirements/headless.txt", versions="loose"), | ||
"postgresql": parse_requirements( | ||
"requirements/postgresql.txt", versions="loose" | ||
), | ||
"all-strict": parse_requirements("requirements.txt", versions="strict"), | ||
"runtime-strict": parse_requirements( | ||
"requirements/runtime.txt", versions="strict" | ||
), | ||
'tests-strict': parse_requirements('requirements/tests.txt', versions='strict'), | ||
'optional-strict': parse_requirements( | ||
'requirements/optional.txt', versions='strict' | ||
"tests-strict": parse_requirements("requirements/tests.txt", versions="strict"), | ||
"optional-strict": parse_requirements( | ||
"requirements/optional.txt", versions="strict" | ||
), | ||
"docs-strict": parse_requirements("requirements/docs.txt", versions="strict"), | ||
"gdal-strict-strict": parse_requirements( | ||
"requirements/gdal-strict.txt", versions="strict" | ||
), | ||
"graphics-strict": parse_requirements( | ||
"requirements/graphics.txt", versions="strict" | ||
), | ||
"headless-strict": parse_requirements( | ||
"requirements/headless.txt", versions="strict" | ||
), | ||
"postgresql-strict": parse_requirements( | ||
"requirements/postgresql.txt", versions="strict" | ||
), | ||
} | ||
|
||
setupkw['name'] = NAME | ||
setupkw['version'] = VERSION | ||
setupkw['author'] = 'Jon Crall' | ||
setupkw['author_email'] = '[email protected]' | ||
setupkw['url'] = 'https://github.com/Erotemic/xcookie' | ||
setupkw['description'] = 'The xcookie cookie-cutter Module' | ||
setupkw['long_description'] = parse_description() | ||
setupkw['long_description_content_type'] = 'text/x-rst' | ||
setupkw['license'] = 'Apache 2' | ||
setupkw['packages'] = find_packages('.') | ||
setupkw['python_requires'] = '>=3.7' | ||
setupkw['classifiers'] = [ | ||
'Development Status :: 1 - Planning', | ||
'Intended Audience :: Developers', | ||
'Topic :: Software Development :: Libraries :: Python Modules', | ||
'Topic :: Utilities', | ||
'License :: OSI Approved :: Apache Software License', | ||
'Programming Language :: Python :: 3.7', | ||
'Programming Language :: Python :: 3.8', | ||
'Programming Language :: Python :: 3.9', | ||
'Programming Language :: Python :: 3.10', | ||
'Programming Language :: Python :: 3.11', | ||
setupkw["name"] = NAME | ||
setupkw["version"] = VERSION | ||
setupkw["author"] = "Jon Crall" | ||
setupkw["author_email"] = "[email protected]" | ||
setupkw["url"] = "https://github.com/Erotemic/xcookie" | ||
setupkw["description"] = "The xcookie cookie-cutter Module" | ||
setupkw["long_description"] = parse_description() | ||
setupkw["long_description_content_type"] = "text/x-rst" | ||
setupkw["license"] = "Apache 2" | ||
setupkw["packages"] = find_packages(".") | ||
setupkw["python_requires"] = ">=3.7" | ||
setupkw["classifiers"] = [ | ||
"Development Status :: 1 - Planning", | ||
"Intended Audience :: Developers", | ||
"Topic :: Software Development :: Libraries :: Python Modules", | ||
"Topic :: Utilities", | ||
"License :: OSI Approved :: Apache Software License", | ||
"Programming Language :: Python :: 3.7", | ||
"Programming Language :: Python :: 3.8", | ||
"Programming Language :: Python :: 3.9", | ||
"Programming Language :: Python :: 3.10", | ||
"Programming Language :: Python :: 3.11", | ||
"Programming Language :: Python :: 3.12", | ||
"Programming Language :: Python :: 3.13", | ||
] | ||
setupkw['package_data'] = {'xcookie': ['py.typed', '*.pyi'], 'xcookie.rc': ['*.in']} | ||
setupkw['entry_points'] = { | ||
'console_scripts': [ | ||
'xcookie=xcookie.__main__:main', | ||
setupkw["package_data"] = { | ||
"": ["requirements/*.txt"], | ||
"xcookie": ["py.typed", "*.pyi"], | ||
"xcookie.rc": ["*.in"], | ||
} | ||
setupkw["entry_points"] = { | ||
"console_scripts": [ | ||
"xcookie=xcookie.__main__:main", | ||
], | ||
} | ||
setup(**setupkw) |