mirror of https://github.com/pallets/flask.git
standardize project metadata
This commit is contained in:
parent
e666f7a69c
commit
24498afed5
13
MANIFEST.in
13
MANIFEST.in
|
@ -1,11 +1,8 @@
|
||||||
include Makefile CHANGES.rst CONTRIBUTING.rst LICENSE AUTHORS tox.ini
|
include CHANGES.rst
|
||||||
|
include CONTRIBUTING.rst
|
||||||
|
include tox.ini
|
||||||
graft artwork
|
graft artwork
|
||||||
graft tests
|
|
||||||
graft examples
|
|
||||||
graft docs
|
graft docs
|
||||||
|
|
||||||
global-exclude *.py[co]
|
|
||||||
|
|
||||||
prune docs/_build
|
prune docs/_build
|
||||||
prune docs/_themes
|
graft examples
|
||||||
|
graft tests
|
||||||
|
|
35
Makefile
35
Makefile
|
@ -1,35 +0,0 @@
|
||||||
.PHONY: all install-dev test coverage cov test-all tox docs audit release clean-pyc upload-docs ebook
|
|
||||||
|
|
||||||
all: test
|
|
||||||
|
|
||||||
install-dev:
|
|
||||||
pip install -q -e .[dev]
|
|
||||||
|
|
||||||
test: clean-pyc install-dev
|
|
||||||
pytest
|
|
||||||
|
|
||||||
coverage: clean-pyc install-dev
|
|
||||||
coverage run -m pytest
|
|
||||||
coverage report
|
|
||||||
coverage html
|
|
||||||
|
|
||||||
cov: coverage
|
|
||||||
|
|
||||||
test-all: install-dev
|
|
||||||
tox
|
|
||||||
|
|
||||||
tox: test-all
|
|
||||||
|
|
||||||
docs: clean-pyc install-dev
|
|
||||||
$(MAKE) -C docs html
|
|
||||||
|
|
||||||
audit:
|
|
||||||
python setup.py audit
|
|
||||||
|
|
||||||
release:
|
|
||||||
python scripts/make-release.py
|
|
||||||
|
|
||||||
clean-pyc:
|
|
||||||
find . -name '*.pyc' -exec rm -f {} +
|
|
||||||
find . -name '*.pyo' -exec rm -f {} +
|
|
||||||
find . -name '*~' -exec rm -f {} +
|
|
|
@ -32,9 +32,9 @@ A Simple Example
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
@app.route('/')
|
@app.route("/")
|
||||||
def hello():
|
def hello():
|
||||||
return 'Hello, World!'
|
return "Hello, World!"
|
||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
|
@ -59,12 +59,10 @@ Links
|
||||||
|
|
||||||
* Website: https://www.palletsprojects.com/p/flask/
|
* Website: https://www.palletsprojects.com/p/flask/
|
||||||
* Documentation: http://flask.pocoo.org/docs/
|
* Documentation: http://flask.pocoo.org/docs/
|
||||||
* License: `BSD <https://github.com/pallets/flask/blob/master/LICENSE>`_
|
|
||||||
* Releases: https://pypi.org/project/Flask/
|
* Releases: https://pypi.org/project/Flask/
|
||||||
* Code: https://github.com/pallets/flask
|
* Code: https://github.com/pallets/flask
|
||||||
* Issue tracker: https://github.com/pallets/flask/issues
|
* Issue tracker: https://github.com/pallets/flask/issues
|
||||||
* Test status: https://dev.azure.com/pallets/pallets/_build?definitionId=2
|
* Test status: https://dev.azure.com/pallets/pallets/_build?definitionId=2
|
||||||
* Test coverage: https://codecov.io/gh/pallets/flask
|
|
||||||
* Official chat: https://discord.gg/t6rrQZH
|
* Official chat: https://discord.gg/t6rrQZH
|
||||||
|
|
||||||
.. _WSGI: https://wsgi.readthedocs.io
|
.. _WSGI: https://wsgi.readthedocs.io
|
||||||
|
|
|
@ -1,164 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
from datetime import date, datetime
|
|
||||||
from subprocess import PIPE, Popen
|
|
||||||
|
|
||||||
_date_strip_re = re.compile(r'(?<=\d)(st|nd|rd|th)')
|
|
||||||
|
|
||||||
|
|
||||||
def parse_changelog():
|
|
||||||
with open('CHANGES.rst') as f:
|
|
||||||
lineiter = iter(f)
|
|
||||||
for line in lineiter:
|
|
||||||
match = re.search('^Version\s+(.*)', line.strip())
|
|
||||||
|
|
||||||
if match is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
version = match.group(1).strip()
|
|
||||||
|
|
||||||
if next(lineiter).count('-') != len(match.group(0)):
|
|
||||||
continue
|
|
||||||
|
|
||||||
while 1:
|
|
||||||
change_info = next(lineiter).strip()
|
|
||||||
|
|
||||||
if change_info:
|
|
||||||
break
|
|
||||||
|
|
||||||
match = re.search(
|
|
||||||
r'released on (\w+\s+\d+\w+\s+\d+)(?:, codename (.*))?',
|
|
||||||
change_info,
|
|
||||||
flags=re.IGNORECASE
|
|
||||||
)
|
|
||||||
|
|
||||||
if match is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
datestr, codename = match.groups()
|
|
||||||
return version, parse_date(datestr), codename
|
|
||||||
|
|
||||||
|
|
||||||
def bump_version(version):
|
|
||||||
try:
|
|
||||||
parts = [int(i) for i in version.split('.')]
|
|
||||||
except ValueError:
|
|
||||||
fail('Current version is not numeric')
|
|
||||||
|
|
||||||
parts[-1] += 1
|
|
||||||
return '.'.join(map(str, parts))
|
|
||||||
|
|
||||||
|
|
||||||
def parse_date(string):
|
|
||||||
string = _date_strip_re.sub('', string)
|
|
||||||
return datetime.strptime(string, '%B %d %Y')
|
|
||||||
|
|
||||||
|
|
||||||
def set_filename_version(filename, version_number, pattern):
|
|
||||||
changed = []
|
|
||||||
|
|
||||||
def inject_version(match):
|
|
||||||
before, old, after = match.groups()
|
|
||||||
changed.append(True)
|
|
||||||
return before + version_number + after
|
|
||||||
|
|
||||||
with open(filename) as f:
|
|
||||||
contents = re.sub(
|
|
||||||
r"^(\s*%s\s*=\s*')(.+?)(')" % pattern,
|
|
||||||
inject_version, f.read(),
|
|
||||||
flags=re.DOTALL | re.MULTILINE
|
|
||||||
)
|
|
||||||
|
|
||||||
if not changed:
|
|
||||||
fail('Could not find %s in %s', pattern, filename)
|
|
||||||
|
|
||||||
with open(filename, 'w') as f:
|
|
||||||
f.write(contents)
|
|
||||||
|
|
||||||
|
|
||||||
def set_init_version(version):
|
|
||||||
info('Setting __init__.py version to %s', version)
|
|
||||||
set_filename_version('flask/__init__.py', version, '__version__')
|
|
||||||
|
|
||||||
|
|
||||||
def build():
|
|
||||||
cmd = [sys.executable, 'setup.py', 'sdist', 'bdist_wheel']
|
|
||||||
Popen(cmd).wait()
|
|
||||||
|
|
||||||
|
|
||||||
def fail(message, *args):
|
|
||||||
print('Error:', message % args, file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
def info(message, *args):
|
|
||||||
print(message % args, file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
def get_git_tags():
|
|
||||||
return set(
|
|
||||||
Popen(['git', 'tag'], stdout=PIPE).communicate()[0].splitlines()
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def git_is_clean():
|
|
||||||
return Popen(['git', 'diff', '--quiet']).wait() == 0
|
|
||||||
|
|
||||||
|
|
||||||
def make_git_commit(message, *args):
|
|
||||||
message = message % args
|
|
||||||
Popen(['git', 'commit', '-am', message]).wait()
|
|
||||||
|
|
||||||
|
|
||||||
def make_git_tag(tag):
|
|
||||||
info('Tagging "%s"', tag)
|
|
||||||
Popen(['git', 'tag', tag]).wait()
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
os.chdir(os.path.join(os.path.dirname(__file__), '..'))
|
|
||||||
|
|
||||||
rv = parse_changelog()
|
|
||||||
|
|
||||||
if rv is None:
|
|
||||||
fail('Could not parse changelog')
|
|
||||||
|
|
||||||
version, release_date, codename = rv
|
|
||||||
dev_version = bump_version(version) + '.dev'
|
|
||||||
|
|
||||||
info(
|
|
||||||
'Releasing %s (codename %s, release date %s)',
|
|
||||||
version, codename, release_date.strftime('%d/%m/%Y')
|
|
||||||
)
|
|
||||||
tags = get_git_tags()
|
|
||||||
|
|
||||||
if version in tags:
|
|
||||||
fail('Version "%s" is already tagged', version)
|
|
||||||
|
|
||||||
if release_date.date() != date.today():
|
|
||||||
fail(
|
|
||||||
'Release date is not today (%s != %s)',
|
|
||||||
release_date.date(), date.today()
|
|
||||||
)
|
|
||||||
|
|
||||||
if not git_is_clean():
|
|
||||||
fail('You have uncommitted changes in git')
|
|
||||||
|
|
||||||
try:
|
|
||||||
import wheel # noqa: F401
|
|
||||||
except ImportError:
|
|
||||||
fail('You need to install the wheel package.')
|
|
||||||
|
|
||||||
set_init_version(version)
|
|
||||||
make_git_commit('Bump version number to %s', version)
|
|
||||||
make_git_tag(version)
|
|
||||||
build()
|
|
||||||
set_init_version(dev_version)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
12
setup.cfg
12
setup.cfg
|
@ -1,14 +1,10 @@
|
||||||
[aliases]
|
[metadata]
|
||||||
release = egg_info -Db ''
|
license_file = LICENSE.rst
|
||||||
|
|
||||||
[bdist_wheel]
|
[bdist_wheel]
|
||||||
universal = 1
|
universal = true
|
||||||
|
|
||||||
[metadata]
|
|
||||||
license_file = LICENSE
|
|
||||||
|
|
||||||
[tool:pytest]
|
[tool:pytest]
|
||||||
minversion = 3.0
|
|
||||||
testpaths = tests
|
testpaths = tests
|
||||||
|
|
||||||
[coverage:run]
|
[coverage:run]
|
||||||
|
@ -21,4 +17,4 @@ source =
|
||||||
source =
|
source =
|
||||||
flask
|
flask
|
||||||
.tox/*/lib/python*/site-packages/flask
|
.tox/*/lib/python*/site-packages/flask
|
||||||
.tox/pypy/site-packages/flask
|
.tox/*/site-packages/flask
|
||||||
|
|
|
@ -1,81 +1,76 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import io
|
import io
|
||||||
import re
|
import re
|
||||||
from collections import OrderedDict
|
|
||||||
|
|
||||||
|
from setuptools import find_packages
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
|
|
||||||
with io.open('README.rst', 'rt', encoding='utf8') as f:
|
with io.open("README.rst", "rt", encoding="utf8") as f:
|
||||||
readme = f.read()
|
readme = f.read()
|
||||||
|
|
||||||
with io.open('flask/__init__.py', 'rt', encoding='utf8') as f:
|
with io.open("flask/__init__.py", "rt", encoding="utf8") as f:
|
||||||
version = re.search(r'__version__ = \'(.*?)\'', f.read()).group(1)
|
version = re.search(r"__version__ = \'(.*?)\'", f.read()).group(1)
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='Flask',
|
name="Flask",
|
||||||
version=version,
|
version=version,
|
||||||
url='https://www.palletsprojects.com/p/flask/',
|
url="https://palletsprojects.com/p/flask/",
|
||||||
project_urls=OrderedDict((
|
project_urls={
|
||||||
('Documentation', 'http://flask.pocoo.org/docs/'),
|
"Documentation": "http://flask.palletsprojects.com/",
|
||||||
('Code', 'https://github.com/pallets/flask'),
|
"Code": "https://github.com/pallets/flask",
|
||||||
('Issue tracker', 'https://github.com/pallets/flask/issues'),
|
"Issue tracker": "https://github.com/pallets/flask/issues",
|
||||||
)),
|
},
|
||||||
license='BSD',
|
license="BSD-3-Clause",
|
||||||
author='Armin Ronacher',
|
author="Armin Ronacher",
|
||||||
author_email='armin.ronacher@active-4.com',
|
author_email="armin.ronacher@active-4.com",
|
||||||
maintainer='Pallets team',
|
maintainer="Pallets",
|
||||||
maintainer_email='contact@palletsprojects.com',
|
maintainer_email="contact@palletsprojects.com",
|
||||||
description='A simple framework for building complex web applications.',
|
description="A simple framework for building complex web applications.",
|
||||||
long_description=readme,
|
long_description=readme,
|
||||||
packages=['flask', 'flask.json'],
|
classifiers=[
|
||||||
|
"Development Status :: 5 - Production/Stable",
|
||||||
|
"Environment :: Web Environment",
|
||||||
|
"Framework :: Flask",
|
||||||
|
"Intended Audience :: Developers",
|
||||||
|
"License :: OSI Approved :: BSD License",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
|
"Programming Language :: Python",
|
||||||
|
"Programming Language :: Python :: 2",
|
||||||
|
"Programming Language :: Python :: 2.7",
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
"Programming Language :: Python :: 3.4",
|
||||||
|
"Programming Language :: Python :: 3.5",
|
||||||
|
"Programming Language :: Python :: 3.6",
|
||||||
|
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
|
||||||
|
"Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
|
||||||
|
"Topic :: Software Development :: Libraries :: Application Frameworks",
|
||||||
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||||
|
],
|
||||||
|
packages=find_packages(),
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
zip_safe=False,
|
python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*",
|
||||||
platforms='any',
|
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'Werkzeug>=0.14',
|
"Werkzeug>=0.14",
|
||||||
'Jinja2>=2.10',
|
"Jinja2>=2.10",
|
||||||
'itsdangerous>=0.24',
|
"itsdangerous>=0.24",
|
||||||
'click>=5.1',
|
"click>=5.1",
|
||||||
],
|
],
|
||||||
extras_require={
|
extras_require={
|
||||||
'dotenv': ['python-dotenv'],
|
"dotenv": ["python-dotenv"],
|
||||||
'dev': [
|
"dev": [
|
||||||
'pytest>=3',
|
"pytest",
|
||||||
'coverage',
|
"coverage",
|
||||||
'tox',
|
"tox",
|
||||||
'sphinx',
|
"sphinx",
|
||||||
'pallets-sphinx-themes',
|
"pallets-sphinx-themes",
|
||||||
'sphinxcontrib-log-cabinet',
|
"sphinxcontrib-log-cabinet",
|
||||||
|
"sphinx-issues",
|
||||||
],
|
],
|
||||||
'docs': [
|
"docs": [
|
||||||
'sphinx',
|
"sphinx",
|
||||||
'pallets-sphinx-themes',
|
"pallets-sphinx-themes",
|
||||||
'sphinxcontrib-log-cabinet',
|
"sphinxcontrib-log-cabinet",
|
||||||
]
|
"sphinx-issues",
|
||||||
},
|
|
||||||
classifiers=[
|
|
||||||
'Development Status :: 5 - Production/Stable',
|
|
||||||
'Environment :: Web Environment',
|
|
||||||
'Framework :: Flask',
|
|
||||||
'Intended Audience :: Developers',
|
|
||||||
'License :: OSI Approved :: BSD License',
|
|
||||||
'Operating System :: OS Independent',
|
|
||||||
'Programming Language :: Python',
|
|
||||||
'Programming Language :: Python :: 2',
|
|
||||||
'Programming Language :: Python :: 2.7',
|
|
||||||
'Programming Language :: Python :: 3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
|
||||||
'Programming Language :: Python :: 3.5',
|
|
||||||
'Programming Language :: Python :: 3.6',
|
|
||||||
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
|
|
||||||
'Topic :: Internet :: WWW/HTTP :: WSGI :: Application',
|
|
||||||
'Topic :: Software Development :: Libraries :: Application Frameworks',
|
|
||||||
'Topic :: Software Development :: Libraries :: Python Modules',
|
|
||||||
],
|
|
||||||
entry_points={
|
|
||||||
'console_scripts': [
|
|
||||||
'flask = flask.cli:main',
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
entry_points={"console_scripts": ["flask = flask.cli:main"]},
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue