Skip to content

Releases: pywharf/pywharf-pkg-repo

pywharf-0.2.3-py3-none-any.whl

11 Jul 18:22
7e791ac
Compare
Choose a tag to compare

name = "pywharf"
version = "0.2.3"
filetype = "bdist_wheel"
pyversion = "py3"
metadata_version = "2.1"
summary = "A private PyPI server powered by flexible backends."
home_page = "https://github.com/pywharf/pywharf"
author = "huntzhan"
author_email = "[email protected]"
maintainer = ""
maintainer_email = ""
license = "MIT"
description = "<div align="center">\n\n# pywharf\n\nThe private PyPI server powered by flexible backends.\n\nbuild-and-push\nlicense\n\n\n\n* pywharf\n\t* What is it?\n\t* Design\n\t* Usage\n\t\t* Install from PyPI\n\t\t* Using the docker image (recommended)\n\t\t* Run the server\n\t\t* Server API\n\t\t* Update index\n\t\t* Backend-specific commands\n\t\t* Environment mode\n\t* Backends\n\t\t* GitHub\n\t\t* File system\n\n------\n\n## What is it?\n\npywharf allows you to deploy a PyPI server privately and keep your artifacts safe by leveraging the power (confidentiality, integrity and availability) of your storage backend. The backend mechanism is designed to be flexible so that the developer could support a new storage backend at a low cost.\n\nSupported backends:\n\n- GitHub. (Yes, you can now host your Python package in GitHub by using pywharf. )\n- File system.\n- ... (Upcoming)\n\n## Design\n\n<div align="center"><img width="766" alt="Screen Shot 2020-03-24 at 8 19 12 PM" src="https://user-images.githubusercontent.com/5213906/77424853-c14e0480-6e0c-11ea-9a7f-879a68ada0a0.png\">\n\nThe pywharf server serves as an abstraction layer between Python package management tools (pip/poetry/twine) and the storage backends:\n\n* Package management tools communicate with pywharf server, following PEP 503 -- Simple Repository API for searching/downloading package, and Legacy API for uploading package.\n* pywharf server then performs file search/download/upload operations with some specific storage backend.\n\n## Usage\n\n### Install from PyPI\n\nshell\npip install pywharf==0.2.3\n\n\nThis should bring the execuable pywharf to your environment.\n\nshell\n$ pywharf --help\nSYNOPSIS\n pywharf <command> <command_flags>\n\nSUPPORTED COMMANDS\n server\n update_index\n github.init_pkg_repo\n github.gen_gh_pages\n\n\n### Using the docker image (recommended)\n\nDocker image: pywharf/pywharf:0.2.3. The image tag is the same as the package version in PyPI.\n\nshell\n$ docker run --rm pywharf/pywharf:0.2.3 --help\nSYNOPSIS\n pywharf <command> <command_flags>\n\nSUPPORTED COMMANDS\n server\n update_index\n github.init_pkg_repo\n github.gen_gh_pages\n\n\n### Run the server\n\nTo run the server, use the command pywharf server.\n\ntxt\nSYNOPSIS\n pywharf server ROOT <flags>\n\nPOSITIONAL ARGUMENTS\n ROOT (str):\n Path to the root folder. This folder is for logging,\n file-based lock and any other file I/O.\n\nFLAGS\n --config (Optional[str]):\n Path to the package repository config (TOML),\n or the file content if --config_or_admin_secret_can_be_text is set.\n Default to None.\n --admin_secret (Optional[str]):\n Path to the admin secrets config (TOML) with read/write permission.\n or the file content if --config_or_admin_secret_can_be_text is set.\n This field is required for local index synchronization.\n Default to None.\n --config_or_admin_secret_can_be_text (Optional[bool]):\n Enable passing the file content to --config or --admin_secret.\n Default to False.\n --auth_read_expires (int):\n The expiration time (in seconds) for read authentication.\n Default to 3600.\n --auth_write_expires (int):\n The expiration time (in seconds) for write authentication.\n Default to 300.\n --extra_index_url (str):\n Extra index url for redirection in case package not found.\n If set to empty string explicitly redirection will be suppressed.\n Default to 'https://pypi.org/simple/'.\n --debug (bool):\n Enable debug mode.\n Default to False.\n --host (str):\n The interface to bind to.\n Default to '0.0.0.0'.\n --port (int):\n The port to bind to.\n Default to 8888.\n **waitress_options (Dict[str, Any]):\n Optional arguments that `waitress.serve` takes.\n Details in https://docs.pylonsproject.org/projects/waitress/en/stable/arguments.html.\n Default to {}.\n\n\nIn short, the configuration passed to --config defines mappings from pkg_repo_name to backend-specific settings. In other words, a single server instance can be configured to connect to multiple backends.\n\nExampe of the configuration file passed to --config:\n\ntoml\n[pywharf-pkg-repo]\ntype = \"github\"\nowner = \"pywharf\"\nrepo = \"pywharf-pkg-repo\"\n\n[local-file-system]\ntype = \"file_system\"\nread_secret = \"foo\"\nwrite_secret = \"bar\"\n\n\nExampe of the admin secret file passed to --admin_secret:\n\ntoml\n[pywharf-pkg-repo]\ntype = \"github\"\nraw = \"<personal-access-token>\"\n\n[local-file-system]\ntype = \"file_system\"\nraw = \"foo\"\n\n\nExample run:\n\nshell\ndocker run --rm \\\n -v /path/to/root:/pywharf-root \\\n -v /path/to/config.toml:/config.toml \\\n -v /path/to/admin_secret.toml:/admin_secret.toml \\\n -p 8888:8888 \\\n pywharf/pywharf:0.2.3 \\\n server \\\n /pywharf-root \\\n --config=/config.toml \\\n --admin_secret=/admin_secret.toml\n\n\n### Server API\n\n#### Authentication in shell\n\nUser must provide the pkg_repo_name and their secret in most of the API calls so that the server can find which backend to operate and determine whether the operation is permitted or not. The pkg_repo_name and the secret should be provided in basic access authentication.\n\nSome package management tools will handle the authentication behind the screen, for example,\n\n* Twine: to set the environment variables TWINE_USERNAME and TWINE_PASSWORD. ref\n* Poetry: Configuring credentials.\n\nSome will not, for example,\n\n* Pip: you need to prepend <pkg_repo_name>:<secret>@ to the hostname in the URL manually like this https://[username[:password]@]pypi.company.com/simple. ref\n\n#### Authentication in browser\n\nYou need to visit /login page to submit pkg_repo_name and the secret, since most of the browsers today don't support prepending <username>:<password>@ to the hostname in the URL. The pkg_repo_name and the secret will be stored in the session cookies. To reset, visit /logout .\n\nExample: http://localhost:8888/login/\n\n<div align="center"><img width="600" alt="Screen Shot 2020-03-25 at 12 36 03 PM" src="https://user-images.githubusercontent.com/5213906/77502233-40871b00-6e95-11ea-8ac9-4844d7067ed2.png\">\n\n\n#### PEP-503, Legacy API\n\nThe server follows PEP 503 -- Simple Repository API and Legacy API to define APIs for searching/downloading/uploading package:\n\n* GET /simple/: List all distributions.\n* GET /simple/<distrib>/: List all packages in a distribution.\n* GET /simple/<distrib>/<filename>: Download a package file.\n* POST /simple/: Upload a package file.\n\nIn a nutshell, you need to set the "index url / repository url / ..." to http://<host>:<port>/simple/ for the package management tool.\n\n#### Server management\n\n##### GET /index_mtime\n\nGet the last index index synchronization timestamp.\n\nshell\n$ curl http://debug:foo@localhost:8888/index_mtime/\n1584379892\n\n\n##### POST /initialize\n\nSubmit configuration and (re-)initialize the server. User can change the package repository configuration on-the-fly with this API.\n\nshell\n# POST the file content.\n$ curl \\\n -d \"config=${CONFIG}&admin_secret=${ADMIN_SECRET}\" \\\n -X POST \\\n http://localhost:8888/initialize/\n\n# Or, POST the file.\n$ curl \\\n -F 'config=@/path/to/config.toml' \\\n -F 'admin_secret=@/path/to/admin_secret.toml' \\\n http://localhost:8888/initialize/\n\n\n### Update index\n\n<div align="center"><img width="636" alt="Screen Shot 2020-03-25 at 5 39 19 PM" src="https://user-images.githubusercontent.com/5213906/77522697-9a043f80-6ebf-11ea-95e6-9a086db7af2e.png\">\n\nIndex file is used to track all published packages in a specific time:\n\n* Remote index file: the index file sotred in the backend. By design, this file is only updated by a standalone update index service and will not be updated by the pywharf server.\n* Local index file: the index file synchronized from the remote index file by the pywharf server\n\nTo update the remote index file, use the command pywharf update_index:\n\n```txt\nSYNOPSIS\n pywharf update_index TYPE NAME \n\nPOSITIONAL ARGUMENTS\n TYPE (str):\n Backend type.\n NAME (str):\n Name of config.\n\nFLAGS\n --secret (Optional[str]):\n The secret with write permission.\n --secret_env (Optional[str]):\n Instead of passing the se...

Read more

pywharf_core-0.2.2-py3-none-any.whl

11 Jul 18:16
929ca4e
Compare
Choose a tag to compare

name = "pywharf-core"
version = "0.2.2"
filetype = "bdist_wheel"
pyversion = "py3"
metadata_version = "2.1"
summary = "A private PyPI server powered by flexible backends."
home_page = "https://github.com/pywharf/pywharf-core"
author = "huntzhan"
author_email = "[email protected]"
maintainer = ""
maintainer_email = ""
license = "MIT"
description = "# pywharf-core\n\nThe core of https://github.com/pywharf/pywharf\n\n"
keywords = "private,pypi,packaging,dependency"
classifiers = "License :: OSI Approved :: MIT License"
download_url = ""
comment = ""
md5_digest = "34ca97f51726b70f264b6faef693cdab"
sha256_digest = "d88b3e05c241d071352334d435ce3e98356dd717743b966007bd713f361e8c3d"
blake2_256_digest = "0971be21e3eb6174a6e52bc107c515681c4bd97a789af89d775af9c56064b590"
project_urls = "Repository, https://github.com/pywharf/pywharf-core"
requires_dist = "Jinja2 (>=2.11.1,<3.0.0)"
requires_python = ">=3.7,<4.0"
description_content_type = "text/markdown"
":action" = "file_upload"
protocol_version = "1"
distrib = "pywharf-core"
sha256 = "d88b3e05c241d071352334d435ce3e98356dd717743b966007bd713f361e8c3d"

pywharf_core-0.2.1-py3-none-any.whl

29 Jun 05:21
13010ab
Compare
Choose a tag to compare

name = "pywharf-core"
version = "0.2.1"
filetype = "bdist_wheel"
pyversion = "py3"
metadata_version = "2.1"
summary = "A private PyPI server powered by flexible backends."
home_page = "https://github.com/pywharf/pywharf-core"
author = "huntzhan"
author_email = "[email protected]"
maintainer = ""
maintainer_email = ""
license = "MIT"
description = "# pywharf-core\n\nThe core of https://github.com/pywharf/pywharf\n\n"
keywords = "private,pypi,packaging,dependency"
classifiers = "License :: OSI Approved :: MIT License"
download_url = ""
comment = ""
md5_digest = "306465474909a80079ddf4738b5a12f6"
sha256_digest = "f3df2522fd52ce8cdb5db0c3b9a5f591416f3b1af4e9e99ed33a6a2bbdd95c14"
blake2_256_digest = "9b689835700aa4fb6d365f9369cf2ad3ab8131eb6c0937677e9f31fa5b302e37"
project_urls = "Repository, https://github.com/pywharf/pywharf-core"
requires_dist = "Jinja2 (>=2.11.1,<3.0.0)"
requires_python = ">=3.7,<4.0"
description_content_type = "text/markdown"
":action" = "file_upload"
protocol_version = "1"
distrib = "pywharf-core"
sha256 = "f3df2522fd52ce8cdb5db0c3b9a5f591416f3b1af4e9e99ed33a6a2bbdd95c14"

pywharf-0.2.2a0-py3-none-any.whl

29 Jun 06:05
48f8064
Compare
Choose a tag to compare

name = "pywharf"
version = "0.2.2a0"
filetype = "bdist_wheel"
pyversion = "py3"
metadata_version = "2.1"
summary = "A private PyPI server powered by flexible backends."
home_page = "https://github.com/pywharf/pywharf"
author = "huntzhan"
author_email = "[email protected]"
maintainer = ""
maintainer_email = ""
license = "MIT"
description = "<div align="center">\n\n# pywharf\n\nThe private PyPI server powered by flexible backends.\n\nbuild-and-push\nlicense\n\n\n\n* pywharf\n\t* What is it?\n\t* Design\n\t* Usage\n\t\t* Install from PyPI\n\t\t* Using the docker image (recommended)\n\t\t* Run the server\n\t\t* Server API\n\t\t* Update index\n\t\t* Backend-specific commands\n\t\t* Environment mode\n\t* Backends\n\t\t* GitHub\n\t\t* File system\n\n------\n\n## What is it?\n\npywharf allows you to deploy a PyPI server privately and keep your artifacts safe by leveraging the power (confidentiality, integrity and availability) of your storage backend. The backend mechanism is designed to be flexible so that the developer could support a new storage backend at a low cost.\n\nSupported backends:\n\n- GitHub. (Yes, you can now host your Python package in GitHub by using pywharf. )\n- File system.\n- ... (Upcoming)\n\n## Design\n\n<div align="center"><img width="766" alt="Screen Shot 2020-03-24 at 8 19 12 PM" src="https://user-images.githubusercontent.com/5213906/77424853-c14e0480-6e0c-11ea-9a7f-879a68ada0a0.png\">\n\nThe pywharf server serves as an abstraction layer between Python package management tools (pip/poetry/twine) and the storage backends:\n\n* Package management tools communicate with pywharf server, following PEP 503 -- Simple Repository API for searching/downloading package, and Legacy API for uploading package.\n* pywharf server then performs file search/download/upload operations with some specific storage backend.\n\n## Usage\n\n### Install from PyPI\n\nshell\npip install pywharf==0.2.1\n\n\nThis should bring the execuable pywharf to your environment.\n\nshell\n$ pywharf --help\nSYNOPSIS\n pywharf <command> <command_flags>\n\nSUPPORTED COMMANDS\n server\n update_index\n github.init_pkg_repo\n github.gen_gh_pages\n\n\n### Using the docker image (recommended)\n\nDocker image: pywharf/pywharf:0.2.1. The image tag is the same as the package version in PyPI.\n\nshell\n$ docker run --rm pywharf/pywharf:0.2.1 --help\nSYNOPSIS\n pywharf <command> <command_flags>\n\nSUPPORTED COMMANDS\n server\n update_index\n github.init_pkg_repo\n github.gen_gh_pages\n\n\n### Run the server\n\nTo run the server, use the command pywharf server.\n\ntxt\nSYNOPSIS\n pywharf server ROOT <flags>\n\nPOSITIONAL ARGUMENTS\n ROOT (str):\n Path to the root folder. This folder is for logging,\n file-based lock and any other file I/O.\n\nFLAGS\n --config (Optional[str]):\n Path to the package repository config (TOML),\n or the file content if --config_or_admin_secret_can_be_text is set.\n Default to None.\n --admin_secret (Optional[str]):\n Path to the admin secrets config (TOML) with read/write permission.\n or the file content if --config_or_admin_secret_can_be_text is set.\n This field is required for local index synchronization.\n Default to None.\n --config_or_admin_secret_can_be_text (Optional[bool]):\n Enable passing the file content to --config or --admin_secret.\n Default to False.\n --auth_read_expires (int):\n The expiration time (in seconds) for read authentication.\n Default to 3600.\n --auth_write_expires (int):\n The expiration time (in seconds) for write authentication.\n Default to 300.\n --extra_index_url (str):\n Extra index url for redirection in case package not found.\n If set to empty string explicitly redirection will be suppressed.\n Default to 'https://pypi.org/simple/'.\n --debug (bool):\n Enable debug mode.\n Default to False.\n --host (str):\n The interface to bind to.\n Default to '0.0.0.0'.\n --port (int):\n The port to bind to.\n Default to 8888.\n **waitress_options (Dict[str, Any]):\n Optional arguments that `waitress.serve` takes.\n Details in https://docs.pylonsproject.org/projects/waitress/en/stable/arguments.html.\n Default to {}.\n\n\nIn short, the configuration passed to --config defines mappings from pkg_repo_name to backend-specific settings. In other words, a single server instance can be configured to connect to multiple backends.\n\nExampe of the configuration file passed to --config:\n\ntoml\n[pywharf-pkg-repo]\ntype = \"github\"\nowner = \"pywharf\"\nrepo = \"pywharf-pkg-repo\"\n\n[local-file-system]\ntype = \"file_system\"\nread_secret = \"foo\"\nwrite_secret = \"bar\"\n\n\nExampe of the admin secret file passed to --admin_secret:\n\ntoml\n[pywharf-pkg-repo]\ntype = \"github\"\nraw = \"<personal-access-token>\"\n\n[local-file-system]\ntype = \"file_system\"\nraw = \"foo\"\n\n\nExample run:\n\nshell\ndocker run --rm \\\n -v /path/to/root:/pywharf-root \\\n -v /path/to/config.toml:/config.toml \\\n -v /path/to/admin_secret.toml:/admin_secret.toml \\\n -p 8888:8888 \\\n pywharf/pywharf:0.2.1 \\\n server \\\n /pywharf-root \\\n --config=/config.toml \\\n --admin_secret=/admin_secret.toml\n\n\n### Server API\n\n#### Authentication in shell\n\nUser must provide the pkg_repo_name and their secret in most of the API calls so that the server can find which backend to operate and determine whether the operation is permitted or not. The pkg_repo_name and the secret should be provided in basic access authentication.\n\nSome package management tools will handle the authentication behind the screen, for example,\n\n* Twine: to set the environment variables TWINE_USERNAME and TWINE_PASSWORD. ref\n* Poetry: Configuring credentials.\n\nSome will not, for example,\n\n* Pip: you need to prepend <pkg_repo_name>:<secret>@ to the hostname in the URL manually like this https://[username[:password]@]pypi.company.com/simple. ref\n\n#### Authentication in browser\n\nYou need to visit /login page to submit pkg_repo_name and the secret, since most of the browsers today don't support prepending <username>:<password>@ to the hostname in the URL. The pkg_repo_name and the secret will be stored in the session cookies. To reset, visit /logout .\n\nExample: http://localhost:8888/login/\n\n<div align="center"><img width="600" alt="Screen Shot 2020-03-25 at 12 36 03 PM" src="https://user-images.githubusercontent.com/5213906/77502233-40871b00-6e95-11ea-8ac9-4844d7067ed2.png\">\n\n\n#### PEP-503, Legacy API\n\nThe server follows PEP 503 -- Simple Repository API and Legacy API to define APIs for searching/downloading/uploading package:\n\n* GET /simple/: List all distributions.\n* GET /simple/<distrib>/: List all packages in a distribution.\n* GET /simple/<distrib>/<filename>: Download a package file.\n* POST /simple/: Upload a package file.\n\nIn a nutshell, you need to set the "index url / repository url / ..." to http://<host>:<port>/simple/ for the package management tool.\n\n#### Server management\n\n##### GET /index_mtime\n\nGet the last index index synchronization timestamp.\n\nshell\n$ curl http://debug:foo@localhost:8888/index_mtime/\n1584379892\n\n\n##### POST /initialize\n\nSubmit configuration and (re-)initialize the server. User can change the package repository configuration on-the-fly with this API.\n\nshell\n# POST the file content.\n$ curl \\\n -d \"config=${CONFIG}&admin_secret=${ADMIN_SECRET}\" \\\n -X POST \\\n http://localhost:8888/initialize/\n\n# Or, POST the file.\n$ curl \\\n -F 'config=@/path/to/config.toml' \\\n -F 'admin_secret=@/path/to/admin_secret.toml' \\\n http://localhost:8888/initialize/\n\n\n### Update index\n\n<div align="center"><img width="636" alt="Screen Shot 2020-03-25 at 5 39 19 PM" src="https://user-images.githubusercontent.com/5213906/77522697-9a043f80-6ebf-11ea-95e6-9a086db7af2e.png\">\n\nIndex file is used to track all published packages in a specific time:\n\n* Remote index file: the index file sotred in the backend. By design, this file is only updated by a standalone update index service and will not be updated by the pywharf server.\n* Local index file: the index file synchronized from the remote index file by the pywharf server\n\nTo update the remote index file, use the command pywharf update_index:\n\n```txt\nSYNOPSIS\n pywharf update_index TYPE NAME \n\nPOSITIONAL ARGUMENTS\n TYPE (str):\n Backend type.\n NAME (str):\n Name of config.\n\nFLAGS\n --secret (Optional[str]):\n The secret with write permission.\n --secret_env (Optional[str]):\n Instead of passing the ...

Read more

pywharf-0.2.2-py3-none-any.whl

29 Jun 06:19
5e19d94
Compare
Choose a tag to compare

name = "pywharf"
version = "0.2.2"
filetype = "bdist_wheel"
pyversion = "py3"
metadata_version = "2.1"
summary = "A private PyPI server powered by flexible backends."
home_page = "https://github.com/pywharf/pywharf"
author = "huntzhan"
author_email = "[email protected]"
maintainer = ""
maintainer_email = ""
license = "MIT"
description = "<div align="center">\n\n# pywharf\n\nThe private PyPI server powered by flexible backends.\n\nbuild-and-push\nlicense\n\n\n\n* pywharf\n\t* What is it?\n\t* Design\n\t* Usage\n\t\t* Install from PyPI\n\t\t* Using the docker image (recommended)\n\t\t* Run the server\n\t\t* Server API\n\t\t* Update index\n\t\t* Backend-specific commands\n\t\t* Environment mode\n\t* Backends\n\t\t* GitHub\n\t\t* File system\n\n------\n\n## What is it?\n\npywharf allows you to deploy a PyPI server privately and keep your artifacts safe by leveraging the power (confidentiality, integrity and availability) of your storage backend. The backend mechanism is designed to be flexible so that the developer could support a new storage backend at a low cost.\n\nSupported backends:\n\n- GitHub. (Yes, you can now host your Python package in GitHub by using pywharf. )\n- File system.\n- ... (Upcoming)\n\n## Design\n\n<div align="center"><img width="766" alt="Screen Shot 2020-03-24 at 8 19 12 PM" src="https://user-images.githubusercontent.com/5213906/77424853-c14e0480-6e0c-11ea-9a7f-879a68ada0a0.png\">\n\nThe pywharf server serves as an abstraction layer between Python package management tools (pip/poetry/twine) and the storage backends:\n\n* Package management tools communicate with pywharf server, following PEP 503 -- Simple Repository API for searching/downloading package, and Legacy API for uploading package.\n* pywharf server then performs file search/download/upload operations with some specific storage backend.\n\n## Usage\n\n### Install from PyPI\n\nshell\npip install pywharf==0.2.1\n\n\nThis should bring the execuable pywharf to your environment.\n\nshell\n$ pywharf --help\nSYNOPSIS\n pywharf <command> <command_flags>\n\nSUPPORTED COMMANDS\n server\n update_index\n github.init_pkg_repo\n github.gen_gh_pages\n\n\n### Using the docker image (recommended)\n\nDocker image: pywharf/pywharf:0.2.1. The image tag is the same as the package version in PyPI.\n\nshell\n$ docker run --rm pywharf/pywharf:0.2.1 --help\nSYNOPSIS\n pywharf <command> <command_flags>\n\nSUPPORTED COMMANDS\n server\n update_index\n github.init_pkg_repo\n github.gen_gh_pages\n\n\n### Run the server\n\nTo run the server, use the command pywharf server.\n\ntxt\nSYNOPSIS\n pywharf server ROOT <flags>\n\nPOSITIONAL ARGUMENTS\n ROOT (str):\n Path to the root folder. This folder is for logging,\n file-based lock and any other file I/O.\n\nFLAGS\n --config (Optional[str]):\n Path to the package repository config (TOML),\n or the file content if --config_or_admin_secret_can_be_text is set.\n Default to None.\n --admin_secret (Optional[str]):\n Path to the admin secrets config (TOML) with read/write permission.\n or the file content if --config_or_admin_secret_can_be_text is set.\n This field is required for local index synchronization.\n Default to None.\n --config_or_admin_secret_can_be_text (Optional[bool]):\n Enable passing the file content to --config or --admin_secret.\n Default to False.\n --auth_read_expires (int):\n The expiration time (in seconds) for read authentication.\n Default to 3600.\n --auth_write_expires (int):\n The expiration time (in seconds) for write authentication.\n Default to 300.\n --extra_index_url (str):\n Extra index url for redirection in case package not found.\n If set to empty string explicitly redirection will be suppressed.\n Default to 'https://pypi.org/simple/'.\n --debug (bool):\n Enable debug mode.\n Default to False.\n --host (str):\n The interface to bind to.\n Default to '0.0.0.0'.\n --port (int):\n The port to bind to.\n Default to 8888.\n **waitress_options (Dict[str, Any]):\n Optional arguments that `waitress.serve` takes.\n Details in https://docs.pylonsproject.org/projects/waitress/en/stable/arguments.html.\n Default to {}.\n\n\nIn short, the configuration passed to --config defines mappings from pkg_repo_name to backend-specific settings. In other words, a single server instance can be configured to connect to multiple backends.\n\nExampe of the configuration file passed to --config:\n\ntoml\n[pywharf-pkg-repo]\ntype = \"github\"\nowner = \"pywharf\"\nrepo = \"pywharf-pkg-repo\"\n\n[local-file-system]\ntype = \"file_system\"\nread_secret = \"foo\"\nwrite_secret = \"bar\"\n\n\nExampe of the admin secret file passed to --admin_secret:\n\ntoml\n[pywharf-pkg-repo]\ntype = \"github\"\nraw = \"<personal-access-token>\"\n\n[local-file-system]\ntype = \"file_system\"\nraw = \"foo\"\n\n\nExample run:\n\nshell\ndocker run --rm \\\n -v /path/to/root:/pywharf-root \\\n -v /path/to/config.toml:/config.toml \\\n -v /path/to/admin_secret.toml:/admin_secret.toml \\\n -p 8888:8888 \\\n pywharf/pywharf:0.2.1 \\\n server \\\n /pywharf-root \\\n --config=/config.toml \\\n --admin_secret=/admin_secret.toml\n\n\n### Server API\n\n#### Authentication in shell\n\nUser must provide the pkg_repo_name and their secret in most of the API calls so that the server can find which backend to operate and determine whether the operation is permitted or not. The pkg_repo_name and the secret should be provided in basic access authentication.\n\nSome package management tools will handle the authentication behind the screen, for example,\n\n* Twine: to set the environment variables TWINE_USERNAME and TWINE_PASSWORD. ref\n* Poetry: Configuring credentials.\n\nSome will not, for example,\n\n* Pip: you need to prepend <pkg_repo_name>:<secret>@ to the hostname in the URL manually like this https://[username[:password]@]pypi.company.com/simple. ref\n\n#### Authentication in browser\n\nYou need to visit /login page to submit pkg_repo_name and the secret, since most of the browsers today don't support prepending <username>:<password>@ to the hostname in the URL. The pkg_repo_name and the secret will be stored in the session cookies. To reset, visit /logout .\n\nExample: http://localhost:8888/login/\n\n<div align="center"><img width="600" alt="Screen Shot 2020-03-25 at 12 36 03 PM" src="https://user-images.githubusercontent.com/5213906/77502233-40871b00-6e95-11ea-8ac9-4844d7067ed2.png\">\n\n\n#### PEP-503, Legacy API\n\nThe server follows PEP 503 -- Simple Repository API and Legacy API to define APIs for searching/downloading/uploading package:\n\n* GET /simple/: List all distributions.\n* GET /simple/<distrib>/: List all packages in a distribution.\n* GET /simple/<distrib>/<filename>: Download a package file.\n* POST /simple/: Upload a package file.\n\nIn a nutshell, you need to set the "index url / repository url / ..." to http://<host>:<port>/simple/ for the package management tool.\n\n#### Server management\n\n##### GET /index_mtime\n\nGet the last index index synchronization timestamp.\n\nshell\n$ curl http://debug:foo@localhost:8888/index_mtime/\n1584379892\n\n\n##### POST /initialize\n\nSubmit configuration and (re-)initialize the server. User can change the package repository configuration on-the-fly with this API.\n\nshell\n# POST the file content.\n$ curl \\\n -d \"config=${CONFIG}&admin_secret=${ADMIN_SECRET}\" \\\n -X POST \\\n http://localhost:8888/initialize/\n\n# Or, POST the file.\n$ curl \\\n -F 'config=@/path/to/config.toml' \\\n -F 'admin_secret=@/path/to/admin_secret.toml' \\\n http://localhost:8888/initialize/\n\n\n### Update index\n\n<div align="center"><img width="636" alt="Screen Shot 2020-03-25 at 5 39 19 PM" src="https://user-images.githubusercontent.com/5213906/77522697-9a043f80-6ebf-11ea-95e6-9a086db7af2e.png\">\n\nIndex file is used to track all published packages in a specific time:\n\n* Remote index file: the index file sotred in the backend. By design, this file is only updated by a standalone update index service and will not be updated by the pywharf server.\n* Local index file: the index file synchronized from the remote index file by the pywharf server\n\nTo update the remote index file, use the command pywharf update_index:\n\n```txt\nSYNOPSIS\n pywharf update_index TYPE NAME \n\nPOSITIONAL ARGUMENTS\n TYPE (str):\n Backend type.\n NAME (str):\n Name of config.\n\nFLAGS\n --secret (Optional[str]):\n The secret with write permission.\n --secret_env (Optional[str]):\n Instead of passing the se...

Read more

pywharf_core-0.2.1a0-py3-none-any.whl

29 Jun 04:58
697dba5
Compare
Choose a tag to compare

name = "pywharf-core"
version = "0.2.1a0"
filetype = "bdist_wheel"
pyversion = "py3"
metadata_version = "2.1"
summary = "A private PyPI server powered by flexible backends."
home_page = "https://github.com/pywharf/pywharf-core"
author = "huntzhan"
author_email = "[email protected]"
maintainer = ""
maintainer_email = ""
license = "MIT"
description = "# pywharf-core\n\nThe core of https://github.com/pywharf/pywharf\n\n"
keywords = "private,pypi,packaging,dependency"
classifiers = "License :: OSI Approved :: MIT License"
download_url = ""
comment = ""
md5_digest = "10ac36349e3c2067c935d5f0a8cc122f"
sha256_digest = "19cd741db32e7b513ab438474babdcc04e5ed648616e7e8f75979a35b973c9c7"
blake2_256_digest = "97149ae0e4fd14987a6a47592ce50138c2baa185857d768c38ba0a84dc581ec3"
project_urls = "Repository, https://github.com/pywharf/pywharf-core"
requires_dist = "Jinja2 (>=2.11.1,<3.0.0)"
requires_python = ">=3.7,<4.0"
description_content_type = "text/markdown"
":action" = "file_upload"
protocol_version = "1"
distrib = "pywharf-core"
sha256 = "19cd741db32e7b513ab438474babdcc04e5ed648616e7e8f75979a35b973c9c7"

pywharf_github-0.2.0-py3-none-any.whl

27 Mar 11:13
5271618
Compare
Choose a tag to compare

name = "pywharf-github"
version = "0.2.0"
filetype = "bdist_wheel"
pyversion = "py3"
metadata_version = "2.1"
summary = ""
home_page = "https://github.com/pywharf/pywharf-github"
author = "huntzhan"
author_email = "[email protected]"
maintainer = ""
maintainer_email = ""
license = "MIT"
description = "# pywharf-github\n\nThe GitHub backend of https://github.com/pywharf/pywharf\n\n"
keywords = "private,pypi,github,packaging,dependency"
classifiers = "License :: OSI Approved :: MIT License"
download_url = ""
comment = ""
md5_digest = "11821d25ffdd77406e11ee414abf44f2"
sha256_digest = "0a0a70dee99e1effe6053afdb3ee09c1f654c8e668428c1c430f942a0af35282"
blake2_256_digest = "f9f8216d9fb084192cb13bf25a731803607834f2114d89faa2da9be1b010d027"
project_urls = "Repository, https://github.com/pywharf/pywharf-github"
requires_dist = "PyGithub (>=1.46,<2.0)"
requires_python = ">=3.7,<4.0"
description_content_type = "text/markdown"
":action" = "file_upload"
protocol_version = "1"
distrib = "pywharf-github"
sha256 = "0a0a70dee99e1effe6053afdb3ee09c1f654c8e668428c1c430f942a0af35282"

pywharf_core-0.2.0-py3-none-any.whl

27 Mar 09:41
40f64ac
Compare
Choose a tag to compare

name = "pywharf-core"
version = "0.2.0"
filetype = "bdist_wheel"
pyversion = "py3"
metadata_version = "2.1"
summary = "A private PyPI server powered by flexible backends."
home_page = "https://github.com/pywharf/pywharf-core"
author = "huntzhan"
author_email = "[email protected]"
maintainer = ""
maintainer_email = ""
license = "MIT"
description = "# pywharf-core\n\nThe core of https://github.com/pywharf/pywharf\n\n"
keywords = "private,pypi,packaging,dependency"
classifiers = "License :: OSI Approved :: MIT License"
download_url = ""
comment = ""
md5_digest = "3fe943e3887b980195c44fe26918c828"
sha256_digest = "0f4944783a4bb6c44024eb6802ad2d646d346e3c63698a308ea35bc0bfb58368"
blake2_256_digest = "d7533a8a47ae7b7137e547cfd36385e0e9c0a269585597e2187a33237128576a"
project_urls = "Repository, https://github.com/pywharf/pywharf-core"
requires_dist = "Jinja2 (>=2.11.1,<3.0.0)"
requires_python = ">=3.7,<4.0"
description_content_type = "text/markdown"
":action" = "file_upload"
protocol_version = "1"
distrib = "pywharf-core"
sha256 = "0f4944783a4bb6c44024eb6802ad2d646d346e3c63698a308ea35bc0bfb58368"

pywharf-0.2.1-py3-none-any.whl

11 Apr 05:59
f48f9b9
Compare
Choose a tag to compare

name = "pywharf"
version = "0.2.1"
filetype = "bdist_wheel"
pyversion = "py3"
metadata_version = "2.1"
summary = "A private PyPI server powered by flexible backends."
home_page = "https://github.com/pywharf/pywharf"
author = "huntzhan"
author_email = "[email protected]"
maintainer = ""
maintainer_email = ""
license = "MIT"
description = "<div align="center">\n\n# pywharf\n\nThe private PyPI server powered by flexible backends.\n\nbuild-and-push\nlicense\n\n\n\n* pywharf\n\t* What is it?\n\t* Design\n\t* Usage\n\t\t* Install from PyPI\n\t\t* Using the docker image (recommended)\n\t\t* Run the server\n\t\t* Server API\n\t\t* Update index\n\t\t* Backend-specific commands\n\t\t* Environment mode\n\t* Backends\n\t\t* GitHub\n\t\t* File system\n\n------\n\n## What is it?\n\npywharf allows you to deploy a PyPI server privately and keep your artifacts safe by leveraging the power (confidentiality, integrity and availability) of your storage backend. The backend mechanism is designed to be flexible so that the developer could support a new storage backend at a low cost.\n\nSupported backends:\n\n- GitHub. (Yes, you can now host your Python package in GitHub by using pywharf. )\n- File system.\n- ... (Upcoming)\n\n## Design\n\n<div align="center"><img width="766" alt="Screen Shot 2020-03-24 at 8 19 12 PM" src="https://user-images.githubusercontent.com/5213906/77424853-c14e0480-6e0c-11ea-9a7f-879a68ada0a0.png\">\n\nThe pywharf server serves as an abstraction layer between Python package management tools (pip/poetry/twine) and the storage backends:\n\n* Package management tools communicate with pywharf server, following PEP 503 -- Simple Repository API for searching/downloading package, and Legacy API for uploading package.\n* pywharf server then performs file search/download/upload operations with some specific storage backend.\n\n## Usage\n\n### Install from PyPI\n\nshell\npip install pywharf==0.2.1\n\n\nThis should bring the execuable pywharf to your environment.\n\nshell\n$ pywharf --help\nSYNOPSIS\n pywharf <command> <command_flags>\n\nSUPPORTED COMMANDS\n server\n update_index\n github.init_pkg_repo\n github.gen_gh_pages\n\n\n### Using the docker image (recommended)\n\nDocker image: pywharf/pywharf:0.2.1. The image tag is the same as the package version in PyPI.\n\nshell\n$ docker run --rm pywharf/pywharf:0.2.1 --help\nSYNOPSIS\n pywharf <command> <command_flags>\n\nSUPPORTED COMMANDS\n server\n update_index\n github.init_pkg_repo\n github.gen_gh_pages\n\n\n### Run the server\n\nTo run the server, use the command pywharf server.\n\ntxt\nSYNOPSIS\n pywharf server ROOT <flags>\n\nPOSITIONAL ARGUMENTS\n ROOT (str):\n Path to the root folder. This folder is for logging,\n file-based lock and any other file I/O.\n\nFLAGS\n --config (Optional[str]):\n Path to the package repository config (TOML),\n or the file content if --config_or_admin_secret_can_be_text is set.\n Default to None.\n --admin_secret (Optional[str]):\n Path to the admin secrets config (TOML) with read/write permission.\n or the file content if --config_or_admin_secret_can_be_text is set.\n This field is required for local index synchronization.\n Default to None.\n --config_or_admin_secret_can_be_text (Optional[bool]):\n Enable passing the file content to --config or --admin_secret.\n Default to False.\n --auth_read_expires (int):\n The expiration time (in seconds) for read authentication.\n Default to 3600.\n --auth_write_expires (int):\n The expiration time (in seconds) for write authentication.\n Default to 300.\n --extra_index_url (str):\n Extra index url for redirection in case package not found.\n If set to empty string explicitly redirection will be suppressed.\n Default to 'https://pypi.org/simple/'.\n --debug (bool):\n Enable debug mode.\n Default to False.\n --host (str):\n The interface to bind to.\n Default to '0.0.0.0'.\n --port (int):\n The port to bind to.\n Default to 8888.\n **waitress_options (Dict[str, Any]):\n Optional arguments that `waitress.serve` takes.\n Details in https://docs.pylonsproject.org/projects/waitress/en/stable/arguments.html.\n Default to {}.\n\n\nIn short, the configuration passed to --config defines mappings from pkg_repo_name to backend-specific settings. In other words, a single server instance can be configured to connect to multiple backends.\n\nExampe of the configuration file passed to --config:\n\ntoml\n[pywharf-pkg-repo]\ntype = \"github\"\nowner = \"pywharf\"\nrepo = \"pywharf-pkg-repo\"\n\n[local-file-system]\ntype = \"file_system\"\nread_secret = \"foo\"\nwrite_secret = \"bar\"\n\n\nExampe of the admin secret file passed to --admin_secret:\n\ntoml\n[pywharf-pkg-repo]\ntype = \"github\"\nraw = \"<personal-access-token>\"\n\n[local-file-system]\ntype = \"file_system\"\nraw = \"foo\"\n\n\nExample run:\n\nshell\ndocker run --rm \\\n -v /path/to/root:/pywharf-root \\\n -v /path/to/config.toml:/config.toml \\\n -v /path/to/admin_secret.toml:/admin_secret.toml \\\n -p 8888:8888 \\\n pywharf/pywharf:0.2.1 \\\n server \\\n /pywharf-root \\\n --config=/config.toml \\\n --admin_secret=/admin_secret.toml\n\n\n### Server API\n\n#### Authentication in shell\n\nUser must provide the pkg_repo_name and their secret in most of the API calls so that the server can find which backend to operate and determine whether the operation is permitted or not. The pkg_repo_name and the secret should be provided in basic access authentication.\n\nSome package management tools will handle the authentication behind the screen, for example,\n\n* Twine: to set the environment variables TWINE_USERNAME and TWINE_PASSWORD. ref\n* Poetry: Configuring credentials.\n\nSome will not, for example,\n\n* Pip: you need to prepend <pkg_repo_name>:<secret>@ to the hostname in the URL manually like this https://[username[:password]@]pypi.company.com/simple. ref\n\n#### Authentication in browser\n\nYou need to visit /login page to submit pkg_repo_name and the secret, since most of the browsers today don't support prepending <username>:<password>@ to the hostname in the URL. The pkg_repo_name and the secret will be stored in the session cookies. To reset, visit /logout .\n\nExample: http://localhost:8888/login/\n\n<div align="center"><img width="600" alt="Screen Shot 2020-03-25 at 12 36 03 PM" src="https://user-images.githubusercontent.com/5213906/77502233-40871b00-6e95-11ea-8ac9-4844d7067ed2.png\">\n\n\n#### PEP-503, Legacy API\n\nThe server follows PEP 503 -- Simple Repository API and Legacy API to define APIs for searching/downloading/uploading package:\n\n* GET /simple/: List all distributions.\n* GET /simple/<distrib>/: List all packages in a distribution.\n* GET /simple/<distrib>/<filename>: Download a package file.\n* POST /simple/: Upload a package file.\n\nIn a nutshell, you need to set the "index url / repository url / ..." to http://<host>:<port>/simple/ for the package management tool.\n\n#### Server management\n\n##### GET /index_mtime\n\nGet the last index index synchronization timestamp.\n\nshell\n$ curl http://debug:foo@localhost:8888/index_mtime/\n1584379892\n\n\n##### POST /initialize\n\nSubmit configuration and (re-)initialize the server. User can change the package repository configuration on-the-fly with this API.\n\nshell\n# POST the file content.\n$ curl \\\n -d \"config=${CONFIG}&admin_secret=${ADMIN_SECRET}\" \\\n -X POST \\\n http://localhost:8888/initialize/\n\n# Or, POST the file.\n$ curl \\\n -F 'config=@/path/to/config.toml' \\\n -F 'admin_secret=@/path/to/admin_secret.toml' \\\n http://localhost:8888/initialize/\n\n\n### Update index\n\n<div align="center"><img width="636" alt="Screen Shot 2020-03-25 at 5 39 19 PM" src="https://user-images.githubusercontent.com/5213906/77522697-9a043f80-6ebf-11ea-95e6-9a086db7af2e.png\">\n\nIndex file is used to track all published packages in a specific time:\n\n* Remote index file: the index file sotred in the backend. By design, this file is only updated by a standalone update index service and will not be updated by the pywharf server.\n* Local index file: the index file synchronized from the remote index file by the pywharf server\n\nTo update the remote index file, use the command pywharf update_index:\n\n```txt\nSYNOPSIS\n pywharf update_index TYPE NAME \n\nPOSITIONAL ARGUMENTS\n TYPE (str):\n Backend type.\n NAME (str):\n Name of config.\n\nFLAGS\n --secret (Optional[str]):\n The secret with write permission.\n --secret_env (Optional[str]):\n Instead of passing the se...

Read more

pywharf-0.2.0-py3-none-any.whl

27 Mar 11:26
ed5db9e
Compare
Choose a tag to compare

name = "pywharf"
version = "0.2.0"
filetype = "bdist_wheel"
pyversion = "py3"
metadata_version = "2.1"
summary = "A private PyPI server powered by flexible backends."
home_page = "https://github.com/pywharf/pywharf"
author = "huntzhan"
author_email = "[email protected]"
maintainer = ""
maintainer_email = ""
license = "MIT"
description = "<div align="center">\n\n# pywharf\n\nThe private PyPI server powered by flexible backends.\n\nbuild-and-push\nlicense\n\n\n\n* Private PyPI\n\t* What is it?\n\t* Design\n\t* Usage\n\t\t* Install from PyPI\n\t\t* Using the docker image (recommended)\n\t\t* Run the server\n\t\t* Server API\n\t\t* Update index\n\t\t* Backend-specific commands\n\t\t* Environment mode\n\t* Backends\n\t\t* GitHub\n\t\t* File system\n\n------\n\n## What is it?\n\npywharf allows you to deploy a PyPI server privately and keep your artifacts safe by leveraging the power (confidentiality, integrity and availability) of your storage backend. The backend mechanism is designed to be flexible so that the developer could support a new storage backend at a low cost.\n\nSupported backends:\n\n- GitHub. (Yes, you can now host your Python package in GitHub by using pywharf. )\n- File system.\n- ... (Upcoming)\n\n## Design\n\n<div align="center"><img width="766" alt="Screen Shot 2020-03-24 at 8 19 12 PM" src="https://user-images.githubusercontent.com/5213906/77424853-c14e0480-6e0c-11ea-9a7f-879a68ada0a0.png\">\n\nThe pywharf server serves as an abstraction layer between Python package management tools (pip/poetry/twine) and the storage backends:\n\n* Package management tools communicate with pywharf server, following PEP 503 -- Simple Repository API for searching/downloading package, and Legacy API for uploading package.\n* pywharf server then performs file search/download/upload operations with some specific storage backend.\n\n## Usage\n\n### Install from PyPI\n\nshell\npip install pywharf==0.2.0\n\n\nThis should bring the execuable pywharf to your environment.\n\nshell\n$ pywharf --help\nSYNOPSIS\n pywharf <command> <command_flags>\n\nSUPPORTED COMMANDS\n server\n update_index\n github.init_pkg_repo\n github.gen_gh_pages\n\n\n### Using the docker image (recommended)\n\nDocker image: pywharf/pywharf:0.2.0. The image tag is the same as the package version in PyPI.\n\nshell\n$ docker run --rm pywharf/pywharf:0.2.0 --help\nSYNOPSIS\n pywharf <command> <command_flags>\n\nSUPPORTED COMMANDS\n server\n update_index\n github.init_pkg_repo\n github.gen_gh_pages\n\n\n### Run the server\n\nTo run the server, use the command pywharf server.\n\ntxt\nSYNOPSIS\n pywharf server ROOT <flags>\n\nPOSITIONAL ARGUMENTS\n ROOT (str):\n Path to the root folder. This folder is for logging,\n file-based lock and any other file I/O.\n\nFLAGS\n --config (Optional[str]):\n Path to the package repository config (TOML),\n or the file content if --config_or_admin_secret_can_be_text is set.\n Default to None.\n --admin_secret (Optional[str]):\n Path to the admin secrets config (TOML) with read/write permission.\n or the file content if --config_or_admin_secret_can_be_text is set.\n This field is required for local index synchronization.\n Default to None.\n --config_or_admin_secret_can_be_text (Optional[bool]):\n Enable passing the file content to --config or --admin_secret.\n Default to False.\n --auth_read_expires (int):\n The expiration time (in seconds) for read authentication.\n Default to 3600.\n --auth_write_expires (int):\n The expiration time (in seconds) for write authentication.\n Default to 300.\n --extra_index_url (str):\n Extra index url for redirection in case package not found.\n If set to empty string explicitly redirection will be suppressed.\n Default to 'https://pypi.org/simple/'.\n --debug (bool):\n Enable debug mode.\n Default to False.\n --host (str):\n The interface to bind to.\n Default to '0.0.0.0'.\n --port (int):\n The port to bind to.\n Default to 8888.\n **waitress_options (Dict[str, Any]):\n Optional arguments that `waitress.serve` takes.\n Details in https://docs.pylonsproject.org/projects/waitress/en/stable/arguments.html.\n Default to {}.\n\n\nIn short, the configuration passed to --config defines mappings from pkg_repo_name to backend-specific settings. In other words, a single server instance can be configured to connect to multiple backends.\n\nExampe of the configuration file passed to --config:\n\ntoml\n[pywharf-pkg-repo]\ntype = \"github\"\nowner = \"pywharf\"\nrepo = \"pywharf-pkg-repo\"\n\n[local-file-system]\ntype = \"file_system\"\nread_secret = \"foo\"\nwrite_secret = \"bar\"\n\n\nExampe of the admin secret file passed to --admin_secret:\n\ntoml\n[pywharf-pkg-repo]\ntype = \"github\"\nraw = \"<personal-access-token>\"\n\n[local-file-system]\ntype = \"file_system\"\nraw = \"foo\"\n\n\nExample run:\n\nshell\ndocker run --rm \\\n -v /path/to/root:/pywharf-root \\\n -v /path/to/config.toml:/config.toml \\\n -v /path/to/admin_secret.toml:/admin_secret.toml \\\n -p 8888:8888 \\\n pywharf/pywharf:0.2.0 \\\n server \\\n /pywharf-root \\\n --config=/config.toml \\\n --admin_secret=/admin_secret.toml\n\n\n### Server API\n\n#### Authentication in shell\n\nUser must provide the pkg_repo_name and their secret in most of the API calls so that the server can find which backend to operate and determine whether the operation is permitted or not. The pkg_repo_name and the secret should be provided in basic access authentication.\n\nSome package management tools will handle the authentication behind the screen, for example,\n\n* Twine: to set the environment variables TWINE_USERNAME and TWINE_PASSWORD. ref\n* Poetry: Configuring credentials.\n\nSome will not, for example,\n\n* Pip: you need to prepend <pkg_repo_name>:<secret>@ to the hostname in the URL manually like this https://[username[:password]@]pypi.company.com/simple. ref\n\n#### Authentication in browser\n\nYou need to visit /login page to submit pkg_repo_name and the secret, since most of the browsers today don't support prepending <username>:<password>@ to the hostname in the URL. The pkg_repo_name and the secret will be stored in the session cookies. To reset, visit /logout .\n\nExample: http://localhost:8888/login/\n\n<div align="center"><img width="600" alt="Screen Shot 2020-03-25 at 12 36 03 PM" src="https://user-images.githubusercontent.com/5213906/77502233-40871b00-6e95-11ea-8ac9-4844d7067ed2.png\">\n\n\n#### PEP-503, Legacy API\n\nThe server follows PEP 503 -- Simple Repository API and Legacy API to define APIs for searching/downloading/uploading package:\n\n* GET /simple/: List all distributions.\n* GET /simple/<distrib>/: List all packages in a distribution.\n* GET /simple/<distrib>/<filename>: Download a package file.\n* POST /simple/: Upload a package file.\n\nIn a nutshell, you need to set the "index url / repository url / ..." to http://<host>:<port>/simple/ for the package management tool.\n\n#### Server management\n\n##### GET /index_mtime\n\nGet the last index index synchronization timestamp.\n\nshell\n$ curl http://debug:foo@localhost:8888/index_mtime/\n1584379892\n\n\n##### POST /initialize\n\nSubmit configuration and (re-)initialize the server. User can change the package repository configuration on-the-fly with this API.\n\nshell\n# POST the file content.\n$ curl \\\n -d \"config=${CONFIG}&admin_secret=${ADMIN_SECRET}\" \\\n -X POST \\\n http://localhost:8888/initialize/\n\n# Or, POST the file.\n$ curl \\\n -F 'config=@/path/to/config.toml' \\\n -F 'admin_secret=@/path/to/admin_secret.toml' \\\n http://localhost:8888/initialize/\n\n\n### Update index\n\n<div align="center"><img width="636" alt="Screen Shot 2020-03-25 at 5 39 19 PM" src="https://user-images.githubusercontent.com/5213906/77522697-9a043f80-6ebf-11ea-95e6-9a086db7af2e.png\">\n\nIndex file is used to track all published packages in a specific time:\n\n* Remote index file: the index file sotred in the backend. By design, this file is only updated by a standalone update index service and will not be updated by the pywharf server.\n* Local index file: the index file synchronized from the remote index file by the pywharf server\n\nTo update the remote index file, use the command pywharf update_index:\n\n```txt\nSYNOPSIS\n pywharf update_index TYPE NAME \n\nPOSITIONAL ARGUMENTS\n TYPE (str):\n Backend type.\n NAME (str):\n Name of config.\n\nFLAGS\n --secret (Optional[str]):\n The secret with write permission.\n --secret_env (Optional[str]):\n Instead of pass...

Read more