Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-Flask-Cors for openSUSE:Factory checked in at 2023-10-04 22:30:46 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-Flask-Cors (Old) and /work/SRC/openSUSE:Factory/.python-Flask-Cors.new.28202 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Flask-Cors" Wed Oct 4 22:30:46 2023 rev:10 rq:1114847 version:4.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-Flask-Cors/python-Flask-Cors.changes 2023-06-14 16:32:05.371482479 +0200 +++ /work/SRC/openSUSE:Factory/.python-Flask-Cors.new.28202/python-Flask-Cors.changes 2023-10-04 22:31:21.883453068 +0200 @@ -1,0 +2,7 @@ +Mon Oct 2 10:55:56 UTC 2023 - pgaj...@suse.com + +- version update to 4.0.0 + * Remove support for Python versions older than 3.8 by @WAKayser in #330 + * Add GHA tooling by @corydolphin in #331 + +------------------------------------------------------------------- Old: ---- Flask-Cors-3.0.10.tar.gz New: ---- Flask-Cors-4.0.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-Flask-Cors.spec ++++++ --- /var/tmp/diff_new_pack.mjVpOb/_old 2023-10-04 22:31:23.547513213 +0200 +++ /var/tmp/diff_new_pack.mjVpOb/_new 2023-10-04 22:31:23.555513502 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-Flask-Cors # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-Flask-Cors -Version: 3.0.10 +Version: 4.0.0 Release: 0 Summary: A Flask extension adding a decorator for CORS support License: MIT @@ -27,11 +27,9 @@ BuildRequires: %{python_module Flask >= 0.9} BuildRequires: %{python_module pytest} BuildRequires: %{python_module setuptools} -BuildRequires: %{python_module six} BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-Flask >= 0.9 -Requires: python-six BuildArch: noarch %python_subpackages ++++++ Flask-Cors-3.0.10.tar.gz -> Flask-Cors-4.0.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/Flask_Cors.egg-info/PKG-INFO new/Flask-Cors-4.0.0/Flask_Cors.egg-info/PKG-INFO --- old/Flask-Cors-3.0.10/Flask_Cors.egg-info/PKG-INFO 2021-01-06 01:25:40.000000000 +0100 +++ new/Flask-Cors-4.0.0/Flask_Cors.egg-info/PKG-INFO 2023-06-26 07:38:34.000000000 +0200 @@ -1,145 +1,146 @@ -Metadata-Version: 1.1 +Metadata-Version: 2.1 Name: Flask-Cors -Version: 3.0.10 +Version: 4.0.0 Summary: A Flask extension adding a decorator for CORS support Home-page: https://github.com/corydolphin/flask-cors Author: Cory Dolphin Author-email: corydolp...@gmail.com License: MIT -Description: Flask-CORS - ========== - - |Build Status| |Latest Version| |Supported Python versions| - |License| - - A Flask extension for handling Cross Origin Resource Sharing (CORS), making cross-origin AJAX possible. - - This package has a simple philosophy: when you want to enable CORS, you wish to enable it for all use cases on a domain. - This means no mucking around with different allowed headers, methods, etc. - - By default, submission of cookies across domains is disabled due to the security implications. - Please see the documentation for how to enable credential'ed requests, and please make sure you add some sort of `CSRF <http://en.wikipedia.org/wiki/Cross-site_request_forgery>`__ protection before doing so! - - Installation - ------------ - - Install the extension with using pip, or easy\_install. - - .. code:: bash - - $ pip install -U flask-cors - - Usage - ----- - - This package exposes a Flask extension which by default enables CORS support on all routes, for all origins and methods. - It allows parameterization of all CORS headers on a per-resource level. - The package also contains a decorator, for those who prefer this approach. - - Simple Usage - ~~~~~~~~~~~~ - - In the simplest case, initialize the Flask-Cors extension with default arguments in order to allow CORS for all domains on all routes. - See the full list of options in the `documentation <https://flask-cors.corydolphin.com/en/latest/api.html#extension>`__. - - .. code:: python - - - from flask import Flask - from flask_cors import CORS - - app = Flask(__name__) - CORS(app) - - @app.route("/") - def helloWorld(): - return "Hello, cross-origin-world!" - - Resource specific CORS - ^^^^^^^^^^^^^^^^^^^^^^ - - Alternatively, you can specify CORS options on a resource and origin level of granularity by passing a dictionary as the `resources` option, mapping paths to a set of options. - See the full list of options in the `documentation <https://flask-cors.corydolphin.com/en/latest/api.html#extension>`__. - - .. code:: python - - app = Flask(__name__) - cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) - - @app.route("/api/v1/users") - def list_users(): - return "user example" - - Route specific CORS via decorator - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - This extension also exposes a simple decorator to decorate flask routes with. - Simply add ``@cross_origin()`` below a call to Flask's ``@app.route(..)`` to allow CORS on a given route. - See the full list of options in the `decorator documentation <https://flask-cors.corydolphin.com/en/latest/api.html#decorator>`__. - - .. code:: python - - @app.route("/") - @cross_origin() - def helloWorld(): - return "Hello, cross-origin-world!" - - Documentation - ------------- - - For a full list of options, please see the full `documentation <https://flask-cors.corydolphin.com/en/latest/api.html>`__ - - Troubleshooting - --------------- - - If things aren't working as you expect, enable logging to help understand what is going on under the hood, and why. - - .. code:: python - - logging.getLogger('flask_cors').level = logging.DEBUG - - - Tests - ----- - - A simple set of tests is included in ``test/``. - To run, install nose, and simply invoke ``nosetests`` or ``python setup.py test`` to exercise the tests. - - Contributing - ------------ - - Questions, comments or improvements? - Please create an issue on `Github <https://github.com/corydolphin/flask-cors>`__, tweet at `@corydolphin <https://twitter.com/corydolphin>`__ or send me an email. - I do my best to include every contribution proposed in any way that I can. - - Credits - ------- - - This Flask extension is based upon the `Decorator for the HTTP Access Control <http://flask.pocoo.org/snippets/56/>`__ written by Armin Ronacher. - - .. |Build Status| image:: https://api.travis-ci.org/corydolphin/flask-cors.svg?branch=master - :target: https://travis-ci.org/corydolphin/flask-cors - .. |Latest Version| image:: https://img.shields.io/pypi/v/Flask-Cors.svg - :target: https://pypi.python.org/pypi/Flask-Cors/ - .. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/Flask-Cors.svg - :target: https://img.shields.io/pypi/pyversions/Flask-Cors.svg - .. |License| image:: http://img.shields.io/:license-mit-blue.svg - :target: https://pypi.python.org/pypi/Flask-Cors/ - Platform: any Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content Classifier: Topic :: Software Development :: Libraries :: Python Modules +License-File: LICENSE + +Flask-CORS +========== + +|Build Status| |Latest Version| |Supported Python versions| +|License| + +A Flask extension for handling Cross Origin Resource Sharing (CORS), making cross-origin AJAX possible. + +This package has a simple philosophy: when you want to enable CORS, you wish to enable it for all use cases on a domain. +This means no mucking around with different allowed headers, methods, etc. + +By default, submission of cookies across domains is disabled due to the security implications. +Please see the documentation for how to enable credential'ed requests, and please make sure you add some sort of `CSRF <http://en.wikipedia.org/wiki/Cross-site_request_forgery>`__ protection before doing so! + +Installation +------------ + +Install the extension with using pip, or easy\_install. + +.. code:: bash + + $ pip install -U flask-cors + +Usage +----- + +This package exposes a Flask extension which by default enables CORS support on all routes, for all origins and methods. +It allows parameterization of all CORS headers on a per-resource level. +The package also contains a decorator, for those who prefer this approach. + +Simple Usage +~~~~~~~~~~~~ + +In the simplest case, initialize the Flask-Cors extension with default arguments in order to allow CORS for all domains on all routes. +See the full list of options in the `documentation <https://flask-cors.corydolphin.com/en/latest/api.html#extension>`__. + +.. code:: python + + + from flask import Flask + from flask_cors import CORS + + app = Flask(__name__) + CORS(app) + + @app.route("/") + def helloWorld(): + return "Hello, cross-origin-world!" + +Resource specific CORS +^^^^^^^^^^^^^^^^^^^^^^ + +Alternatively, you can specify CORS options on a resource and origin level of granularity by passing a dictionary as the `resources` option, mapping paths to a set of options. +See the full list of options in the `documentation <https://flask-cors.corydolphin.com/en/latest/api.html#extension>`__. + +.. code:: python + + app = Flask(__name__) + cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) + + @app.route("/api/v1/users") + def list_users(): + return "user example" + +Route specific CORS via decorator +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This extension also exposes a simple decorator to decorate flask routes with. +Simply add ``@cross_origin()`` below a call to Flask's ``@app.route(..)`` to allow CORS on a given route. +See the full list of options in the `decorator documentation <https://flask-cors.corydolphin.com/en/latest/api.html#decorator>`__. + +.. code:: python + + @app.route("/") + @cross_origin() + def helloWorld(): + return "Hello, cross-origin-world!" + +Documentation +------------- + +For a full list of options, please see the full `documentation <https://flask-cors.corydolphin.com/en/latest/api.html>`__ + +Troubleshooting +--------------- + +If things aren't working as you expect, enable logging to help understand what is going on under the hood, and why. + +.. code:: python + + logging.getLogger('flask_cors').level = logging.DEBUG + + +Tests +----- + +A simple set of tests is included in ``test/``. +To run, install nose, and simply invoke ``nosetests`` or ``python setup.py test`` to exercise the tests. + +If nosetests does not work for you, due to it no longer working with newer python versions. +You can use pytest to run the tests instead. + +Contributing +------------ + +Questions, comments or improvements? +Please create an issue on `Github <https://github.com/corydolphin/flask-cors>`__, tweet at `@corydolphin <https://twitter.com/corydolphin>`__ or send me an email. +I do my best to include every contribution proposed in any way that I can. + +Credits +------- + +This Flask extension is based upon the `Decorator for the HTTP Access Control <https://web.archive.org/web/20190128010149/http://flask.pocoo.org/snippets/56/>`__ written by Armin Ronacher. + +.. |Build Status| image:: https://api.travis-ci.org/corydolphin/flask-cors.svg?branch=master + :target: https://travis-ci.org/corydolphin/flask-cors +.. |Latest Version| image:: https://img.shields.io/pypi/v/Flask-Cors.svg + :target: https://pypi.python.org/pypi/Flask-Cors/ +.. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/Flask-Cors.svg + :target: https://img.shields.io/pypi/pyversions/Flask-Cors.svg +.. |License| image:: http://img.shields.io/:license-mit-blue.svg + :target: https://pypi.python.org/pypi/Flask-Cors/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/Flask_Cors.egg-info/requires.txt new/Flask-Cors-4.0.0/Flask_Cors.egg-info/requires.txt --- old/Flask-Cors-3.0.10/Flask_Cors.egg-info/requires.txt 2021-01-06 01:25:40.000000000 +0100 +++ new/Flask-Cors-4.0.0/Flask_Cors.egg-info/requires.txt 2023-06-26 07:38:34.000000000 +0200 @@ -1,2 +1 @@ Flask>=0.9 -Six diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/PKG-INFO new/Flask-Cors-4.0.0/PKG-INFO --- old/Flask-Cors-3.0.10/PKG-INFO 2021-01-06 01:25:40.000000000 +0100 +++ new/Flask-Cors-4.0.0/PKG-INFO 2023-06-26 07:38:34.166286000 +0200 @@ -1,145 +1,146 @@ -Metadata-Version: 1.1 +Metadata-Version: 2.1 Name: Flask-Cors -Version: 3.0.10 +Version: 4.0.0 Summary: A Flask extension adding a decorator for CORS support Home-page: https://github.com/corydolphin/flask-cors Author: Cory Dolphin Author-email: corydolp...@gmail.com License: MIT -Description: Flask-CORS - ========== - - |Build Status| |Latest Version| |Supported Python versions| - |License| - - A Flask extension for handling Cross Origin Resource Sharing (CORS), making cross-origin AJAX possible. - - This package has a simple philosophy: when you want to enable CORS, you wish to enable it for all use cases on a domain. - This means no mucking around with different allowed headers, methods, etc. - - By default, submission of cookies across domains is disabled due to the security implications. - Please see the documentation for how to enable credential'ed requests, and please make sure you add some sort of `CSRF <http://en.wikipedia.org/wiki/Cross-site_request_forgery>`__ protection before doing so! - - Installation - ------------ - - Install the extension with using pip, or easy\_install. - - .. code:: bash - - $ pip install -U flask-cors - - Usage - ----- - - This package exposes a Flask extension which by default enables CORS support on all routes, for all origins and methods. - It allows parameterization of all CORS headers on a per-resource level. - The package also contains a decorator, for those who prefer this approach. - - Simple Usage - ~~~~~~~~~~~~ - - In the simplest case, initialize the Flask-Cors extension with default arguments in order to allow CORS for all domains on all routes. - See the full list of options in the `documentation <https://flask-cors.corydolphin.com/en/latest/api.html#extension>`__. - - .. code:: python - - - from flask import Flask - from flask_cors import CORS - - app = Flask(__name__) - CORS(app) - - @app.route("/") - def helloWorld(): - return "Hello, cross-origin-world!" - - Resource specific CORS - ^^^^^^^^^^^^^^^^^^^^^^ - - Alternatively, you can specify CORS options on a resource and origin level of granularity by passing a dictionary as the `resources` option, mapping paths to a set of options. - See the full list of options in the `documentation <https://flask-cors.corydolphin.com/en/latest/api.html#extension>`__. - - .. code:: python - - app = Flask(__name__) - cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) - - @app.route("/api/v1/users") - def list_users(): - return "user example" - - Route specific CORS via decorator - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - This extension also exposes a simple decorator to decorate flask routes with. - Simply add ``@cross_origin()`` below a call to Flask's ``@app.route(..)`` to allow CORS on a given route. - See the full list of options in the `decorator documentation <https://flask-cors.corydolphin.com/en/latest/api.html#decorator>`__. - - .. code:: python - - @app.route("/") - @cross_origin() - def helloWorld(): - return "Hello, cross-origin-world!" - - Documentation - ------------- - - For a full list of options, please see the full `documentation <https://flask-cors.corydolphin.com/en/latest/api.html>`__ - - Troubleshooting - --------------- - - If things aren't working as you expect, enable logging to help understand what is going on under the hood, and why. - - .. code:: python - - logging.getLogger('flask_cors').level = logging.DEBUG - - - Tests - ----- - - A simple set of tests is included in ``test/``. - To run, install nose, and simply invoke ``nosetests`` or ``python setup.py test`` to exercise the tests. - - Contributing - ------------ - - Questions, comments or improvements? - Please create an issue on `Github <https://github.com/corydolphin/flask-cors>`__, tweet at `@corydolphin <https://twitter.com/corydolphin>`__ or send me an email. - I do my best to include every contribution proposed in any way that I can. - - Credits - ------- - - This Flask extension is based upon the `Decorator for the HTTP Access Control <http://flask.pocoo.org/snippets/56/>`__ written by Armin Ronacher. - - .. |Build Status| image:: https://api.travis-ci.org/corydolphin/flask-cors.svg?branch=master - :target: https://travis-ci.org/corydolphin/flask-cors - .. |Latest Version| image:: https://img.shields.io/pypi/v/Flask-Cors.svg - :target: https://pypi.python.org/pypi/Flask-Cors/ - .. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/Flask-Cors.svg - :target: https://img.shields.io/pypi/pyversions/Flask-Cors.svg - .. |License| image:: http://img.shields.io/:license-mit-blue.svg - :target: https://pypi.python.org/pypi/Flask-Cors/ - Platform: any Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content Classifier: Topic :: Software Development :: Libraries :: Python Modules +License-File: LICENSE + +Flask-CORS +========== + +|Build Status| |Latest Version| |Supported Python versions| +|License| + +A Flask extension for handling Cross Origin Resource Sharing (CORS), making cross-origin AJAX possible. + +This package has a simple philosophy: when you want to enable CORS, you wish to enable it for all use cases on a domain. +This means no mucking around with different allowed headers, methods, etc. + +By default, submission of cookies across domains is disabled due to the security implications. +Please see the documentation for how to enable credential'ed requests, and please make sure you add some sort of `CSRF <http://en.wikipedia.org/wiki/Cross-site_request_forgery>`__ protection before doing so! + +Installation +------------ + +Install the extension with using pip, or easy\_install. + +.. code:: bash + + $ pip install -U flask-cors + +Usage +----- + +This package exposes a Flask extension which by default enables CORS support on all routes, for all origins and methods. +It allows parameterization of all CORS headers on a per-resource level. +The package also contains a decorator, for those who prefer this approach. + +Simple Usage +~~~~~~~~~~~~ + +In the simplest case, initialize the Flask-Cors extension with default arguments in order to allow CORS for all domains on all routes. +See the full list of options in the `documentation <https://flask-cors.corydolphin.com/en/latest/api.html#extension>`__. + +.. code:: python + + + from flask import Flask + from flask_cors import CORS + + app = Flask(__name__) + CORS(app) + + @app.route("/") + def helloWorld(): + return "Hello, cross-origin-world!" + +Resource specific CORS +^^^^^^^^^^^^^^^^^^^^^^ + +Alternatively, you can specify CORS options on a resource and origin level of granularity by passing a dictionary as the `resources` option, mapping paths to a set of options. +See the full list of options in the `documentation <https://flask-cors.corydolphin.com/en/latest/api.html#extension>`__. + +.. code:: python + + app = Flask(__name__) + cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) + + @app.route("/api/v1/users") + def list_users(): + return "user example" + +Route specific CORS via decorator +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This extension also exposes a simple decorator to decorate flask routes with. +Simply add ``@cross_origin()`` below a call to Flask's ``@app.route(..)`` to allow CORS on a given route. +See the full list of options in the `decorator documentation <https://flask-cors.corydolphin.com/en/latest/api.html#decorator>`__. + +.. code:: python + + @app.route("/") + @cross_origin() + def helloWorld(): + return "Hello, cross-origin-world!" + +Documentation +------------- + +For a full list of options, please see the full `documentation <https://flask-cors.corydolphin.com/en/latest/api.html>`__ + +Troubleshooting +--------------- + +If things aren't working as you expect, enable logging to help understand what is going on under the hood, and why. + +.. code:: python + + logging.getLogger('flask_cors').level = logging.DEBUG + + +Tests +----- + +A simple set of tests is included in ``test/``. +To run, install nose, and simply invoke ``nosetests`` or ``python setup.py test`` to exercise the tests. + +If nosetests does not work for you, due to it no longer working with newer python versions. +You can use pytest to run the tests instead. + +Contributing +------------ + +Questions, comments or improvements? +Please create an issue on `Github <https://github.com/corydolphin/flask-cors>`__, tweet at `@corydolphin <https://twitter.com/corydolphin>`__ or send me an email. +I do my best to include every contribution proposed in any way that I can. + +Credits +------- + +This Flask extension is based upon the `Decorator for the HTTP Access Control <https://web.archive.org/web/20190128010149/http://flask.pocoo.org/snippets/56/>`__ written by Armin Ronacher. + +.. |Build Status| image:: https://api.travis-ci.org/corydolphin/flask-cors.svg?branch=master + :target: https://travis-ci.org/corydolphin/flask-cors +.. |Latest Version| image:: https://img.shields.io/pypi/v/Flask-Cors.svg + :target: https://pypi.python.org/pypi/Flask-Cors/ +.. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/Flask-Cors.svg + :target: https://img.shields.io/pypi/pyversions/Flask-Cors.svg +.. |License| image:: http://img.shields.io/:license-mit-blue.svg + :target: https://pypi.python.org/pypi/Flask-Cors/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/README.rst new/Flask-Cors-4.0.0/README.rst --- old/Flask-Cors-3.0.10/README.rst 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/README.rst 2023-06-26 07:38:24.000000000 +0200 @@ -97,6 +97,9 @@ A simple set of tests is included in ``test/``. To run, install nose, and simply invoke ``nosetests`` or ``python setup.py test`` to exercise the tests. +If nosetests does not work for you, due to it no longer working with newer python versions. +You can use pytest to run the tests instead. + Contributing ------------ @@ -107,7 +110,7 @@ Credits ------- -This Flask extension is based upon the `Decorator for the HTTP Access Control <http://flask.pocoo.org/snippets/56/>`__ written by Armin Ronacher. +This Flask extension is based upon the `Decorator for the HTTP Access Control <https://web.archive.org/web/20190128010149/http://flask.pocoo.org/snippets/56/>`__ written by Armin Ronacher. .. |Build Status| image:: https://api.travis-ci.org/corydolphin/flask-cors.svg?branch=master :target: https://travis-ci.org/corydolphin/flask-cors diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/docs/api.rst new/Flask-Cors-4.0.0/docs/api.rst --- old/Flask-Cors-3.0.10/docs/api.rst 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/docs/api.rst 2023-06-26 07:38:24.000000000 +0200 @@ -70,7 +70,7 @@ :lines: 29- -Using the `cross_origins` decorator +Using the `cross_origin` decorator ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. literalinclude:: ../examples/view_based_example.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/docs/configuration.rst new/Flask-Cors-4.0.0/docs/configuration.rst --- old/Flask-Cors-3.0.10/docs/configuration.rst 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/docs/configuration.rst 2023-06-26 07:38:24.000000000 +0200 @@ -21,7 +21,7 @@ CORS_ALLOW_HEADERS (:py:class:`~typing.List` or :py:class:`str`) Headers to accept from the client. - Headers in the :http:header:`Access-Control-Request-Headers` request header (usually part of the preflight OPTIONS request) maching headers in this list will be included in the :http:header:`Access-Control-Allow-Headers` response header. + Headers in the :http:header:`Access-Control-Request-Headers` request header (usually part of the preflight OPTIONS request) matching headers in this list will be included in the :http:header:`Access-Control-Allow-Headers` response header. CORS_ALWAYS_SEND (:py:class:`bool`) Usually, if a request doesn't include an :http:header:`Origin` header, the client did not request CORS. @@ -114,7 +114,7 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ It's good practice to keep your application configuration settings in one place. -This is also possible with Flask-CORS using the same configuration options in the Flas application's config object. +This is also possible with Flask-CORS using the same configuration options in the Flask application's config object. Default settings ^^^^^^^^^^^^^^^^ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/examples/app_based_example.py new/Flask-Cors-4.0.0/examples/app_based_example.py --- old/Flask-Cors-3.0.10/examples/app_based_example.py 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/examples/app_based_example.py 2023-06-26 07:38:24.000000000 +0200 @@ -143,7 +143,7 @@ @app.errorhandler(500) def server_error(e): logging.exception('An error occurred during a request. %s', e) - return "An internal error occured", 500 + return "An internal error occurred", 500 if __name__ == "__main__": diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/flask_cors/__init__.py new/Flask-Cors-4.0.0/flask_cors/__init__.py --- old/Flask-Cors-3.0.10/flask_cors/__init__.py 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/flask_cors/__init__.py 2023-06-26 07:38:24.000000000 +0200 @@ -24,4 +24,4 @@ rootlogger.addHandler(NullHandler()) if rootlogger.level == logging.NOTSET: - rootlogger.setLevel(logging.WARN) \ No newline at end of file + rootlogger.setLevel(logging.WARN) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/flask_cors/core.py new/Flask-Cors-4.0.0/flask_cors/core.py --- old/Flask-Cors-3.0.10/flask_cors/core.py 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/flask_cors/core.py 2023-06-26 07:38:24.000000000 +0200 @@ -9,14 +9,8 @@ """ import re import logging -try: - # on python 3 - from collections.abc import Iterable -except ImportError: - # on python 2.7 and pypy - from collections import Iterable +from collections.abc import Iterable from datetime import timedelta -from six import string_types from flask import request, current_app from werkzeug.datastructures import Headers, MultiDict @@ -29,10 +23,12 @@ ACL_EXPOSE_HEADERS = 'Access-Control-Expose-Headers' ACL_CREDENTIALS = 'Access-Control-Allow-Credentials' ACL_MAX_AGE = 'Access-Control-Max-Age' +ACL_RESPONSE_PRIVATE_NETWORK = 'Access-Control-Allow-Private-Network' # Request Header ACL_REQUEST_METHOD = 'Access-Control-Request-Method' ACL_REQUEST_HEADERS = 'Access-Control-Request-Headers' +ACL_REQUEST_HEADER_PRIVATE_NETWORK = 'Access-Control-Request-Private-Network' ALL_METHODS = ['GET', 'HEAD', 'POST', 'OPTIONS', 'PUT', 'PATCH', 'DELETE'] CONFIG_OPTIONS = ['CORS_ORIGINS', 'CORS_METHODS', 'CORS_ALLOW_HEADERS', @@ -80,7 +76,7 @@ key=pattern_length, reverse=True) - elif isinstance(resources, string_types): + elif isinstance(resources, str): return [(re_fix(resources), {})] elif isinstance(resources, Iterable): @@ -186,7 +182,11 @@ headers[ACL_EXPOSE_HEADERS] = options.get('expose_headers') if options.get('supports_credentials'): - headers[ACL_CREDENTIALS] = 'true' # case sensative + headers[ACL_CREDENTIALS] = 'true' # case sensitive + + if ACL_REQUEST_HEADER_PRIVATE_NETWORK in request_headers \ + and request_headers.get(ACL_REQUEST_HEADER_PRIVATE_NETWORK) == 'true': + headers[ACL_RESPONSE_PRIVATE_NETWORK] = 'true' # This is a preflight request # http://www.w3.org/TR/cors/#resource-preflight-requests @@ -223,7 +223,7 @@ def set_cors_headers(resp, options): """ - Performs the actual evaluation of Flas-CORS options and actually + Performs the actual evaluation of Flask-CORS options and actually modifies the response object. This function is used both in the decorator and the after_request @@ -323,9 +323,8 @@ """ if obj is None: return None - elif(not isinstance(obj, string_types) - and isinstance(obj, Iterable)): - return ', '.join(str(item) for item in sorted(obj)) + elif not isinstance(obj, str) and isinstance(obj, Iterable): + return ", ".join(str(item) for item in sorted(obj)) else: return str(obj) @@ -340,7 +339,7 @@ """ Wraps scalars or string types as a list, or returns the iterable instance. """ - if isinstance(inst, string_types): + if isinstance(inst, str): return [inst] elif not isinstance(inst, Iterable): return [inst] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/flask_cors/decorator.py new/Flask-Cors-4.0.0/flask_cors/decorator.py --- old/Flask-Cors-3.0.10/flask_cors/decorator.py 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/flask_cors/decorator.py 2023-06-26 07:38:24.000000000 +0200 @@ -9,9 +9,11 @@ :copyright: (c) 2016 by Cory Dolphin. :license: MIT, see LICENSE for more details. """ +import logging from functools import update_wrapper from flask import make_response, request, current_app -from .core import * + +from .core import get_cors_options, set_cors_headers, FLASK_CORS_EVALUATED LOG = logging.getLogger(__name__) @@ -21,8 +23,8 @@ In the simplest case, simply use the default parameters to allow all origins in what is the most permissive configuration. If this method modifies state or performs authentication which may be brute-forced, you - should add some degree of protection, such as Cross Site Forgery - Request protection. + should add some degree of protection, such as Cross Site Request Forgery + protection. :param origins: The origin, or list of origins to allow requests from. @@ -59,7 +61,7 @@ `Access-Control-Allow-Credentials` header in responses. This allows cookies and credentials to be submitted across domains. - :note: This option cannot be used in conjuction with a '*' origin + :note: This option cannot be used in conjunction with a '*' origin Default : False :type supports_credentials: bool diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/flask_cors/extension.py new/Flask-Cors-4.0.0/flask_cors/extension.py --- old/Flask-Cors-3.0.10/flask_cors/extension.py 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/flask_cors/extension.py 2023-06-26 07:38:24.000000000 +0200 @@ -8,12 +8,19 @@ :copyright: (c) 2016 by Cory Dolphin. :license: MIT, see LICENSE for more details. """ +import logging +from urllib.parse import unquote_plus from flask import request -from .core import * -try: - from urllib.parse import unquote_plus -except ImportError: - from urllib import unquote_plus + +from .core import ( + parse_resources, + get_cors_options, + get_regexp_pattern, + ACL_ORIGIN, + try_match, + set_cors_headers +) + LOG = logging.getLogger(__name__) @@ -61,7 +68,11 @@ :param origins: The origin, or list of origins to allow requests from. The origin(s) may be regular expressions, case-sensitive strings, - or else an asterisk + or else an asterisk. + + :note: origins must include the schema and the port (if not port 80), + e.g., + `CORS(app, origins=["http://localhost:8000", "https://example.com"])`. Default : '*' :type origins: list, string or regex @@ -149,7 +160,7 @@ for (pattern, opts) in resources ] - # Create a human readable form of these resources by converting the compiled + # Create a human-readable form of these resources by converting the compiled # regular expressions into strings. resources_human = {get_regexp_pattern(pattern): opts for (pattern,opts) in resources} LOG.debug("Configuring CORS with resources: %s", resources_human) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/flask_cors/version.py new/Flask-Cors-4.0.0/flask_cors/version.py --- old/Flask-Cors-3.0.10/flask_cors/version.py 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/flask_cors/version.py 2023-06-26 07:38:24.000000000 +0200 @@ -1 +1 @@ -__version__ = '3.0.10' +__version__ = '4.0.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/requirements.txt new/Flask-Cors-4.0.0/requirements.txt --- old/Flask-Cors-3.0.10/requirements.txt 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/requirements.txt 2023-06-26 07:38:24.000000000 +0200 @@ -1,2 +1 @@ Flask>=0.9 -Six diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/setup.py new/Flask-Cors-4.0.0/setup.py --- old/Flask-Cors-3.0.10/setup.py 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/setup.py 2023-06-26 07:38:24.000000000 +0200 @@ -33,23 +33,20 @@ platforms='any', install_requires=install_requires, tests_require=[ - 'nose', + 'pytest', 'packaging' ], - test_suite='nose.collector', + test_suite='tests', classifiers=[ 'Environment :: Web Environment', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT 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', - '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 :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/tests/decorator/test_exception_interception.py new/Flask-Cors-4.0.0/tests/decorator/test_exception_interception.py --- old/Flask-Cors-3.0.10/tests/decorator/test_exception_interception.py 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/tests/decorator/test_exception_interception.py 2023-06-26 07:38:24.000000000 +0200 @@ -117,7 +117,7 @@ ''' If a 500 handler is setup by the user, responses should have CORS matching rules applied, regardless of whether or not - intercept_exceptions is enbaled. + intercept_exceptions is enabled. ''' return_string = "Simple error handler" @@ -168,7 +168,7 @@ ''' If a 500 handler is setup by the user, responses should have CORS matching rules applied, regardless of whether or not - intercept_exceptions is enbaled. + intercept_exceptions is enabled. ''' return_string = "Simple error handler" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Cors-3.0.10/tests/extension/test_app_extension.py new/Flask-Cors-4.0.0/tests/extension/test_app_extension.py --- old/Flask-Cors-3.0.10/tests/extension/test_app_extension.py 2021-01-06 01:25:15.000000000 +0100 +++ new/Flask-Cors-4.0.0/tests/extension/test_app_extension.py 2023-06-26 07:38:24.000000000 +0200 @@ -338,7 +338,7 @@ class AppExtensionCompiledRegexp(FlaskCorsTestCase): def test_compiled_regex(self): ''' - Ensure we do not error if the user sepcifies an bad regular + Ensure we do not error if the user specifies an bad regular expression. ''' import re @@ -363,7 +363,7 @@ class AppExtensionBadRegexp(FlaskCorsTestCase): def test_value_error(self): ''' - Ensure we do not error if the user sepcifies an bad regular + Ensure we do not error if the user specifies an bad regular expression. '''