summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-05 13:30:13 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-05 13:30:13 +0000
commita8c0ca74548a999a84f42261d7e427be0bc198e2 (patch)
tree32f302c2d9a67d05a4721a6bfcf8f3cbb9dbc27f
parent9033ee96ae29c75e90a9660fd4092e6c614db6ce (diff)
automatic import of python-bandersnatchopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-bandersnatch.spec673
-rw-r--r--sources1
3 files changed, 675 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..02abf1a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/bandersnatch-6.3.0.tar.gz
diff --git a/python-bandersnatch.spec b/python-bandersnatch.spec
new file mode 100644
index 0000000..9e8699d
--- /dev/null
+++ b/python-bandersnatch.spec
@@ -0,0 +1,673 @@
+%global _empty_manifest_terminate_build 0
+Name: python-bandersnatch
+Version: 6.3.0
+Release: 1
+Summary: Mirroring tool that implements the client (mirror) side of PEP 381
+License: Academic Free License, version 3
+URL: https://github.com/pypa/bandersnatch/
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/f4/3a/5ab09d852955a1acae22d6ce79b4a91eca7f8684e3b2fa953d6b7d750348/bandersnatch-6.3.0.tar.gz
+BuildArch: noarch
+
+Requires: python3-aiohttp
+Requires: python3-aiohttp-socks
+Requires: python3-aiohttp-xmlrpc
+Requires: python3-filelock
+Requires: python3-humanfriendly
+Requires: python3-packaging
+Requires: python3-setuptools
+Requires: python3-s3path
+Requires: python3-bandersnatch-safety-db
+Requires: python3-keystoneauth1
+Requires: python3-openstackclient
+Requires: python3-swiftclient
+Requires: python3-uvloop
+
+%description
+[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
+[![Actions Status](https://github.com/pypa/bandersnatch/workflows/bandersnatch_ci/badge.svg)](https://github.com/pypa/bandersnatch/actions)
+[![codecov.io](https://codecov.io/github/pypa/bandersnatch/coverage.svg?branch=master)](https://codecov.io/github/pypa/bandersnatch)
+[![Documentation Status](https://readthedocs.org/projects/bandersnatch/badge/?version=latest)](http://bandersnatch.readthedocs.io/en/latest/?badge=latest)
+[![Downloads](https://pepy.tech/badge/bandersnatch)](https://pepy.tech/project/bandersnatch)
+
+______________________________________________________________________
+
+This is a PyPI mirror client according to `PEP 381` + `PEP 503` + `PEP 691`
+<http://www.python.org/dev/peps/pep-0381/>.
+
+- bandersnatch >=6.0 implements PEP691
+- bandersnatch >=4.0 supports *Linux*, *MacOSX* + *Windows*
+- [Documentation](https://bandersnatch.readthedocs.io/en/latest/)
+
+**bandersnatch maintainers** are looking for more **help**! Please refer to our
+[MAINTAINER](https://github.com/pypa/bandersnatch/blob/master/MAINTAINERS.md)
+documentation to see the roles and responsibilities. We would also
+ask you read our **Mission Statement** to ensure it aligns with your thoughts for
+this project.
+
+- If interested contact @cooperlees
+
+## Installation
+
+The following instructions will place the bandersnatch executable in a
+virtualenv under `bandersnatch/bin/bandersnatch`.
+
+- bandersnatch **requires** `>= Python 3.8.0`
+
+## Docker
+
+This will pull latest build. Please use a specific tag if desired.
+
+- Docker image includes `/bandersnatch/src/runner.py` to periodically
+ run a `bandersnatch mirror`
+ - Please `/bandersnatch/src/runner.py --help` for usage
+- With docker, we recommend bind mounting in a read only `bandersnatch.conf`
+ - Defaults to `/conf/bandersnatch.conf`
+
+```shell
+docker pull pypa/bandersnatch
+docker run pypa/bandersnatch bandersnatch --help
+```
+
+### pip
+
+This installs the latest stable, released version.
+
+```shell
+python3 -m venv bandersnatch
+bandersnatch/bin/pip install bandersnatch
+bandersnatch/bin/bandersnatch --help
+```
+
+## Quickstart
+
+- Run `bandersnatch mirror` - it will create an empty configuration file
+ for you in `/etc/bandersnatch.conf`.
+- Review `/etc/bandersnatch.conf` and adapt to your needs.
+- Run `bandersnatch mirror` again. It will populate your mirror with the
+ current status of all PyPI packages.
+ Current mirror package size can be seen here: <https://pypi.org/stats/>
+- A `blocklist` or `allowlist` can be created to cut down your mirror size.
+ You might want to [Analyze PyPI downloads](https://packaging.python.org/guides/analyzing-pypi-package-downloads/)
+ to determine which packages to add to your list.
+- Run `bandersnatch mirror` regularly to update your mirror with any
+ intermediate changes.
+
+### Webserver
+
+Configure your webserver to serve the `web/` sub-directory of the mirror.
+For PEP691 support we need to respect the format the client requests.
+
+For an [nginx](https://www.nginx.com/) example, please look at our
+[banderx](https://github.com/pypa/bandersnatch/tree/main/src/banderx)
+docker container and [nginx.conf](https://github.com/pypa/bandersnatch/blob/main/src/banderx/nginx.conf)
+example configuration.
+
+- Note that it is a good idea to have your webserver publish the HTML index
+ files correctly with UTF-8 as the charset. The index pages will work without
+ it but if humans look at the pages the characters will end up looking funny.
+
+- Make sure that the webserver uses UTF-8 to look up unicode path names. nginx
+ gets this right by default - not sure about others.
+
+For more information visit out [official documentation](https://bandersnatch.readthedocs.io/)
+for instructions on how to use a NGINX example Docker Image.
+
+If you are looking to an docker-compose example head over [here](https://github.com/pypa/bandersnatch/tree/main/src/bandersnatch_docker_compose)
+
+### Cron jobs
+
+You need to set up one cron job to run the mirror itself.
+
+Here's a sample that you could place in `/etc/cron.d/bandersnatch`:
+
+```cron
+ LC_ALL=en_US.utf8
+ */2 * * * * root bandersnatch mirror |& logger -t bandersnatch[mirror]
+```
+
+This assumes that you have a `logger` utility installed that will convert the
+output of the commands to syslog entries.
+
+[SystemD Timers](https://www.freedesktop.org/software/systemd/man/systemd.timer.html)
+are also another alternative in today's modern world.
+
+### Maintenance
+
+bandersnatch does not keep much local state in addition to the mirrored data.
+In general you can just keep rerunning `bandersnatch mirror` to make it fix
+errors.
+
+If you want to force bandersnatch to check everything against the master PyPI:
+
+- run `bandersnatch mirror --force-check` to move status files if they exist in your mirror directory in order get a full sync.
+
+Be aware that full syncs likely take hours depending on PyPI's performance and your network latency and bandwidth.
+
+#### Other Commands
+
+- `bandersnatch delete --help` - Allows you to specify package(s) to be removed from your mirror (*dangerous*)
+- `bandersnatch verify --help` - Crawls your repo and fixes any missed files + deletes any unowned files found (*dangerous*)
+
+### Operational notes
+
+#### Case-sensitive filesystem needed
+
+You need to run bandersnatch on a case-sensitive filesystem.
+
+OS X natively does this OK even though the filesystem is not strictly
+case-sensitive and bandersnatch will work fine when running on OS X. However,
+tarring a bandersnatch data directory and moving it to, e.g. Linux with a
+case-sensitive filesystem will lead to inconsistencies. You can fix those by
+deleting the status files and have bandersnatch run a full check on your data.
+
+#### Windows requires elevated prompt
+
+Bandersnatch makes use of symbolic links. On Windows, this permission is turned off by default for non-admin users. In order to run bandersnatch on Windows either call it from an elevated command prompt (i.e. right-click, run-as Administrator) or give yourself symlink permissions in the group policy editor.
+
+#### Many sub-directories needed
+
+The PyPI has a quite extensive list of packages that we need to maintain in a
+flat directory. Filesystems with small limits on the number of sub-directories
+per directory can run into a problem like this:
+
+```console
+ 2013-07-09 16:11:33,331 ERROR: Error syncing package: zweb@802449
+ OSError: [Errno 31] Too many links: '../pypi/web/simple/zweb'
+```
+
+Specifically we recommend to avoid using ext3. Ext4 and newer does not have the
+limitation of 32k sub-directories.
+
+#### Client Compatibility
+
+A bandersnatch static mirror is compatible only to the "static", cacheable
+parts of PyPI that are needed to support package installation. It does not
+support more dynamic APIs of PyPI that maybe be used by various clients for
+other purposes.
+
+An example of an unsupported API is [PyPI's XML-RPC interface](https://warehouse.readthedocs.io/api-reference/xml-rpc/), which is used when running `pip search`.
+
+### Bandersnatch Mission
+
+The bandersnatch project strives to:
+
+- Mirror all static objects of the Python Package Index (<https://pypi.org/>)
+- bandersnatch's main goal is to support the main global index to local syncing **only**
+- This will allow organizations to have lower latency access to PyPI and
+ save bandwidth on their WAN connections and more importantly the PyPI CDN
+- Custom features and requests may be accepted if they can be of a *plugin* form
+ - e.g. refer to the `blocklist` and `allowlist` plugins
+
+### Contact
+
+If you have questions or comments, please submit a bug report to
+<https://github.com/pypa/bandersnatch/issues/new>
+
+- Discord: #bandersnatch now sit in the *PyPA Discord* server. To join visit <https://discord.com/invite/pypa>
+
+### Code of Conduct
+
+Everyone interacting in the bandersnatch project's codebases, issue trackers,
+chat rooms, and mailing lists is expected to follow the
+[PSF Code of Conduct](https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md).
+
+### Kudos
+
+This client is based on the original pep381client by *Martin v. Loewis*.
+
+*Richard Jones* was very patient answering questions at PyCon 2013 and made the
+protocol more reliable by implementing some PyPI enhancements.
+
+*Christian Theune* for creating and maintaining `bandersnatch` for many years!
+
+
+%package -n python3-bandersnatch
+Summary: Mirroring tool that implements the client (mirror) side of PEP 381
+Provides: python-bandersnatch
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-bandersnatch
+[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
+[![Actions Status](https://github.com/pypa/bandersnatch/workflows/bandersnatch_ci/badge.svg)](https://github.com/pypa/bandersnatch/actions)
+[![codecov.io](https://codecov.io/github/pypa/bandersnatch/coverage.svg?branch=master)](https://codecov.io/github/pypa/bandersnatch)
+[![Documentation Status](https://readthedocs.org/projects/bandersnatch/badge/?version=latest)](http://bandersnatch.readthedocs.io/en/latest/?badge=latest)
+[![Downloads](https://pepy.tech/badge/bandersnatch)](https://pepy.tech/project/bandersnatch)
+
+______________________________________________________________________
+
+This is a PyPI mirror client according to `PEP 381` + `PEP 503` + `PEP 691`
+<http://www.python.org/dev/peps/pep-0381/>.
+
+- bandersnatch >=6.0 implements PEP691
+- bandersnatch >=4.0 supports *Linux*, *MacOSX* + *Windows*
+- [Documentation](https://bandersnatch.readthedocs.io/en/latest/)
+
+**bandersnatch maintainers** are looking for more **help**! Please refer to our
+[MAINTAINER](https://github.com/pypa/bandersnatch/blob/master/MAINTAINERS.md)
+documentation to see the roles and responsibilities. We would also
+ask you read our **Mission Statement** to ensure it aligns with your thoughts for
+this project.
+
+- If interested contact @cooperlees
+
+## Installation
+
+The following instructions will place the bandersnatch executable in a
+virtualenv under `bandersnatch/bin/bandersnatch`.
+
+- bandersnatch **requires** `>= Python 3.8.0`
+
+## Docker
+
+This will pull latest build. Please use a specific tag if desired.
+
+- Docker image includes `/bandersnatch/src/runner.py` to periodically
+ run a `bandersnatch mirror`
+ - Please `/bandersnatch/src/runner.py --help` for usage
+- With docker, we recommend bind mounting in a read only `bandersnatch.conf`
+ - Defaults to `/conf/bandersnatch.conf`
+
+```shell
+docker pull pypa/bandersnatch
+docker run pypa/bandersnatch bandersnatch --help
+```
+
+### pip
+
+This installs the latest stable, released version.
+
+```shell
+python3 -m venv bandersnatch
+bandersnatch/bin/pip install bandersnatch
+bandersnatch/bin/bandersnatch --help
+```
+
+## Quickstart
+
+- Run `bandersnatch mirror` - it will create an empty configuration file
+ for you in `/etc/bandersnatch.conf`.
+- Review `/etc/bandersnatch.conf` and adapt to your needs.
+- Run `bandersnatch mirror` again. It will populate your mirror with the
+ current status of all PyPI packages.
+ Current mirror package size can be seen here: <https://pypi.org/stats/>
+- A `blocklist` or `allowlist` can be created to cut down your mirror size.
+ You might want to [Analyze PyPI downloads](https://packaging.python.org/guides/analyzing-pypi-package-downloads/)
+ to determine which packages to add to your list.
+- Run `bandersnatch mirror` regularly to update your mirror with any
+ intermediate changes.
+
+### Webserver
+
+Configure your webserver to serve the `web/` sub-directory of the mirror.
+For PEP691 support we need to respect the format the client requests.
+
+For an [nginx](https://www.nginx.com/) example, please look at our
+[banderx](https://github.com/pypa/bandersnatch/tree/main/src/banderx)
+docker container and [nginx.conf](https://github.com/pypa/bandersnatch/blob/main/src/banderx/nginx.conf)
+example configuration.
+
+- Note that it is a good idea to have your webserver publish the HTML index
+ files correctly with UTF-8 as the charset. The index pages will work without
+ it but if humans look at the pages the characters will end up looking funny.
+
+- Make sure that the webserver uses UTF-8 to look up unicode path names. nginx
+ gets this right by default - not sure about others.
+
+For more information visit out [official documentation](https://bandersnatch.readthedocs.io/)
+for instructions on how to use a NGINX example Docker Image.
+
+If you are looking to an docker-compose example head over [here](https://github.com/pypa/bandersnatch/tree/main/src/bandersnatch_docker_compose)
+
+### Cron jobs
+
+You need to set up one cron job to run the mirror itself.
+
+Here's a sample that you could place in `/etc/cron.d/bandersnatch`:
+
+```cron
+ LC_ALL=en_US.utf8
+ */2 * * * * root bandersnatch mirror |& logger -t bandersnatch[mirror]
+```
+
+This assumes that you have a `logger` utility installed that will convert the
+output of the commands to syslog entries.
+
+[SystemD Timers](https://www.freedesktop.org/software/systemd/man/systemd.timer.html)
+are also another alternative in today's modern world.
+
+### Maintenance
+
+bandersnatch does not keep much local state in addition to the mirrored data.
+In general you can just keep rerunning `bandersnatch mirror` to make it fix
+errors.
+
+If you want to force bandersnatch to check everything against the master PyPI:
+
+- run `bandersnatch mirror --force-check` to move status files if they exist in your mirror directory in order get a full sync.
+
+Be aware that full syncs likely take hours depending on PyPI's performance and your network latency and bandwidth.
+
+#### Other Commands
+
+- `bandersnatch delete --help` - Allows you to specify package(s) to be removed from your mirror (*dangerous*)
+- `bandersnatch verify --help` - Crawls your repo and fixes any missed files + deletes any unowned files found (*dangerous*)
+
+### Operational notes
+
+#### Case-sensitive filesystem needed
+
+You need to run bandersnatch on a case-sensitive filesystem.
+
+OS X natively does this OK even though the filesystem is not strictly
+case-sensitive and bandersnatch will work fine when running on OS X. However,
+tarring a bandersnatch data directory and moving it to, e.g. Linux with a
+case-sensitive filesystem will lead to inconsistencies. You can fix those by
+deleting the status files and have bandersnatch run a full check on your data.
+
+#### Windows requires elevated prompt
+
+Bandersnatch makes use of symbolic links. On Windows, this permission is turned off by default for non-admin users. In order to run bandersnatch on Windows either call it from an elevated command prompt (i.e. right-click, run-as Administrator) or give yourself symlink permissions in the group policy editor.
+
+#### Many sub-directories needed
+
+The PyPI has a quite extensive list of packages that we need to maintain in a
+flat directory. Filesystems with small limits on the number of sub-directories
+per directory can run into a problem like this:
+
+```console
+ 2013-07-09 16:11:33,331 ERROR: Error syncing package: zweb@802449
+ OSError: [Errno 31] Too many links: '../pypi/web/simple/zweb'
+```
+
+Specifically we recommend to avoid using ext3. Ext4 and newer does not have the
+limitation of 32k sub-directories.
+
+#### Client Compatibility
+
+A bandersnatch static mirror is compatible only to the "static", cacheable
+parts of PyPI that are needed to support package installation. It does not
+support more dynamic APIs of PyPI that maybe be used by various clients for
+other purposes.
+
+An example of an unsupported API is [PyPI's XML-RPC interface](https://warehouse.readthedocs.io/api-reference/xml-rpc/), which is used when running `pip search`.
+
+### Bandersnatch Mission
+
+The bandersnatch project strives to:
+
+- Mirror all static objects of the Python Package Index (<https://pypi.org/>)
+- bandersnatch's main goal is to support the main global index to local syncing **only**
+- This will allow organizations to have lower latency access to PyPI and
+ save bandwidth on their WAN connections and more importantly the PyPI CDN
+- Custom features and requests may be accepted if they can be of a *plugin* form
+ - e.g. refer to the `blocklist` and `allowlist` plugins
+
+### Contact
+
+If you have questions or comments, please submit a bug report to
+<https://github.com/pypa/bandersnatch/issues/new>
+
+- Discord: #bandersnatch now sit in the *PyPA Discord* server. To join visit <https://discord.com/invite/pypa>
+
+### Code of Conduct
+
+Everyone interacting in the bandersnatch project's codebases, issue trackers,
+chat rooms, and mailing lists is expected to follow the
+[PSF Code of Conduct](https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md).
+
+### Kudos
+
+This client is based on the original pep381client by *Martin v. Loewis*.
+
+*Richard Jones* was very patient answering questions at PyCon 2013 and made the
+protocol more reliable by implementing some PyPI enhancements.
+
+*Christian Theune* for creating and maintaining `bandersnatch` for many years!
+
+
+%package help
+Summary: Development documents and examples for bandersnatch
+Provides: python3-bandersnatch-doc
+%description help
+[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
+[![Actions Status](https://github.com/pypa/bandersnatch/workflows/bandersnatch_ci/badge.svg)](https://github.com/pypa/bandersnatch/actions)
+[![codecov.io](https://codecov.io/github/pypa/bandersnatch/coverage.svg?branch=master)](https://codecov.io/github/pypa/bandersnatch)
+[![Documentation Status](https://readthedocs.org/projects/bandersnatch/badge/?version=latest)](http://bandersnatch.readthedocs.io/en/latest/?badge=latest)
+[![Downloads](https://pepy.tech/badge/bandersnatch)](https://pepy.tech/project/bandersnatch)
+
+______________________________________________________________________
+
+This is a PyPI mirror client according to `PEP 381` + `PEP 503` + `PEP 691`
+<http://www.python.org/dev/peps/pep-0381/>.
+
+- bandersnatch >=6.0 implements PEP691
+- bandersnatch >=4.0 supports *Linux*, *MacOSX* + *Windows*
+- [Documentation](https://bandersnatch.readthedocs.io/en/latest/)
+
+**bandersnatch maintainers** are looking for more **help**! Please refer to our
+[MAINTAINER](https://github.com/pypa/bandersnatch/blob/master/MAINTAINERS.md)
+documentation to see the roles and responsibilities. We would also
+ask you read our **Mission Statement** to ensure it aligns with your thoughts for
+this project.
+
+- If interested contact @cooperlees
+
+## Installation
+
+The following instructions will place the bandersnatch executable in a
+virtualenv under `bandersnatch/bin/bandersnatch`.
+
+- bandersnatch **requires** `>= Python 3.8.0`
+
+## Docker
+
+This will pull latest build. Please use a specific tag if desired.
+
+- Docker image includes `/bandersnatch/src/runner.py` to periodically
+ run a `bandersnatch mirror`
+ - Please `/bandersnatch/src/runner.py --help` for usage
+- With docker, we recommend bind mounting in a read only `bandersnatch.conf`
+ - Defaults to `/conf/bandersnatch.conf`
+
+```shell
+docker pull pypa/bandersnatch
+docker run pypa/bandersnatch bandersnatch --help
+```
+
+### pip
+
+This installs the latest stable, released version.
+
+```shell
+python3 -m venv bandersnatch
+bandersnatch/bin/pip install bandersnatch
+bandersnatch/bin/bandersnatch --help
+```
+
+## Quickstart
+
+- Run `bandersnatch mirror` - it will create an empty configuration file
+ for you in `/etc/bandersnatch.conf`.
+- Review `/etc/bandersnatch.conf` and adapt to your needs.
+- Run `bandersnatch mirror` again. It will populate your mirror with the
+ current status of all PyPI packages.
+ Current mirror package size can be seen here: <https://pypi.org/stats/>
+- A `blocklist` or `allowlist` can be created to cut down your mirror size.
+ You might want to [Analyze PyPI downloads](https://packaging.python.org/guides/analyzing-pypi-package-downloads/)
+ to determine which packages to add to your list.
+- Run `bandersnatch mirror` regularly to update your mirror with any
+ intermediate changes.
+
+### Webserver
+
+Configure your webserver to serve the `web/` sub-directory of the mirror.
+For PEP691 support we need to respect the format the client requests.
+
+For an [nginx](https://www.nginx.com/) example, please look at our
+[banderx](https://github.com/pypa/bandersnatch/tree/main/src/banderx)
+docker container and [nginx.conf](https://github.com/pypa/bandersnatch/blob/main/src/banderx/nginx.conf)
+example configuration.
+
+- Note that it is a good idea to have your webserver publish the HTML index
+ files correctly with UTF-8 as the charset. The index pages will work without
+ it but if humans look at the pages the characters will end up looking funny.
+
+- Make sure that the webserver uses UTF-8 to look up unicode path names. nginx
+ gets this right by default - not sure about others.
+
+For more information visit out [official documentation](https://bandersnatch.readthedocs.io/)
+for instructions on how to use a NGINX example Docker Image.
+
+If you are looking to an docker-compose example head over [here](https://github.com/pypa/bandersnatch/tree/main/src/bandersnatch_docker_compose)
+
+### Cron jobs
+
+You need to set up one cron job to run the mirror itself.
+
+Here's a sample that you could place in `/etc/cron.d/bandersnatch`:
+
+```cron
+ LC_ALL=en_US.utf8
+ */2 * * * * root bandersnatch mirror |& logger -t bandersnatch[mirror]
+```
+
+This assumes that you have a `logger` utility installed that will convert the
+output of the commands to syslog entries.
+
+[SystemD Timers](https://www.freedesktop.org/software/systemd/man/systemd.timer.html)
+are also another alternative in today's modern world.
+
+### Maintenance
+
+bandersnatch does not keep much local state in addition to the mirrored data.
+In general you can just keep rerunning `bandersnatch mirror` to make it fix
+errors.
+
+If you want to force bandersnatch to check everything against the master PyPI:
+
+- run `bandersnatch mirror --force-check` to move status files if they exist in your mirror directory in order get a full sync.
+
+Be aware that full syncs likely take hours depending on PyPI's performance and your network latency and bandwidth.
+
+#### Other Commands
+
+- `bandersnatch delete --help` - Allows you to specify package(s) to be removed from your mirror (*dangerous*)
+- `bandersnatch verify --help` - Crawls your repo and fixes any missed files + deletes any unowned files found (*dangerous*)
+
+### Operational notes
+
+#### Case-sensitive filesystem needed
+
+You need to run bandersnatch on a case-sensitive filesystem.
+
+OS X natively does this OK even though the filesystem is not strictly
+case-sensitive and bandersnatch will work fine when running on OS X. However,
+tarring a bandersnatch data directory and moving it to, e.g. Linux with a
+case-sensitive filesystem will lead to inconsistencies. You can fix those by
+deleting the status files and have bandersnatch run a full check on your data.
+
+#### Windows requires elevated prompt
+
+Bandersnatch makes use of symbolic links. On Windows, this permission is turned off by default for non-admin users. In order to run bandersnatch on Windows either call it from an elevated command prompt (i.e. right-click, run-as Administrator) or give yourself symlink permissions in the group policy editor.
+
+#### Many sub-directories needed
+
+The PyPI has a quite extensive list of packages that we need to maintain in a
+flat directory. Filesystems with small limits on the number of sub-directories
+per directory can run into a problem like this:
+
+```console
+ 2013-07-09 16:11:33,331 ERROR: Error syncing package: zweb@802449
+ OSError: [Errno 31] Too many links: '../pypi/web/simple/zweb'
+```
+
+Specifically we recommend to avoid using ext3. Ext4 and newer does not have the
+limitation of 32k sub-directories.
+
+#### Client Compatibility
+
+A bandersnatch static mirror is compatible only to the "static", cacheable
+parts of PyPI that are needed to support package installation. It does not
+support more dynamic APIs of PyPI that maybe be used by various clients for
+other purposes.
+
+An example of an unsupported API is [PyPI's XML-RPC interface](https://warehouse.readthedocs.io/api-reference/xml-rpc/), which is used when running `pip search`.
+
+### Bandersnatch Mission
+
+The bandersnatch project strives to:
+
+- Mirror all static objects of the Python Package Index (<https://pypi.org/>)
+- bandersnatch's main goal is to support the main global index to local syncing **only**
+- This will allow organizations to have lower latency access to PyPI and
+ save bandwidth on their WAN connections and more importantly the PyPI CDN
+- Custom features and requests may be accepted if they can be of a *plugin* form
+ - e.g. refer to the `blocklist` and `allowlist` plugins
+
+### Contact
+
+If you have questions or comments, please submit a bug report to
+<https://github.com/pypa/bandersnatch/issues/new>
+
+- Discord: #bandersnatch now sit in the *PyPA Discord* server. To join visit <https://discord.com/invite/pypa>
+
+### Code of Conduct
+
+Everyone interacting in the bandersnatch project's codebases, issue trackers,
+chat rooms, and mailing lists is expected to follow the
+[PSF Code of Conduct](https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md).
+
+### Kudos
+
+This client is based on the original pep381client by *Martin v. Loewis*.
+
+*Richard Jones* was very patient answering questions at PyCon 2013 and made the
+protocol more reliable by implementing some PyPI enhancements.
+
+*Christian Theune* for creating and maintaining `bandersnatch` for many years!
+
+
+%prep
+%autosetup -n bandersnatch-6.3.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-bandersnatch -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 6.3.0-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..f2ae358
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+138ab3f4e5b2c53cce06f02df6baf8b2 bandersnatch-6.3.0.tar.gz