Skip to main content

HTTP plugins for buildout

HTTP Basic-Authentication

With this extension it is possible to define password protected package directories without specifying the password and user in the url.

Let’s take the example protected location, http://www.example.com/dist

First we would need to add the extension and the find link for our protected location:

[buildout]
find-links = http://www.example.com/dist
extensions = p01.buildouthttp

Then create the .httpauth password file, this file contains all authentication information. The .httpauth file can be placed in the root of the current buildout or in the ~/.buildout directory. Each row consists of realm, uri, username, password.

Here is an example of the .httpauth file:

Example com realm, http://www.example.com, username, secret

It is also possible to leave the secret away. Then you will be prompted for the secret whenever buildout is run:

Example com realm, http://www.example.com, username

Note that basic auth also works with any recipe using zc.buildout.download (e.g. hexagonit.recipe.download) because this extension also overwrites the url opener of zc.buildout.

Github Private Downloads

Private downloads on http://github.com/ require authorization to download. The previous token-based authentication system based on the v2 API (see http://github.com/blog/170-token-authentication) is no longer supported by GitHub as of June 1 2012; You must now request a v3 API token and use that instead.

Requesting a new API token can be done in one line using curl (please substitute your own github username and password):

curl -s -X POST -d ‘{“scopes”: [“repo”], “note”: “my API token”}’

https://${user}:${pass}@api.github.com/authorizations | grep token

Now set the value of github.token to the hash returned from the command above:

git config –global github.accesstoken ${token}

Note that the v3 API does not require your github username to work, and can be removed from your configuration if you wish.

For details on managing authorization GitHub’s OAuth tokens, see the API documentation: http://developer.github.com/v3/oauth/#oauth-authorizations-api

URL to download a tag or branch:

https://api.github.com/repos/<gituser>/<repos>/tarball/master

URL to downlad a “download”:

https://github.com/downloads/<gituser>/<repos>/<name>

As some eggs on PyPi also use public Github download URLs you may want to whitelist the repos that authentication is required for as Github will return a 401 error code even for public repositories if the wrong auth details are provided. To do this just list each repo in the format <gituser>/<repos> one per line in the buildout config github-repos:

[buildout]
extensions = p01.buildouthttp
github-repos = p01/repos
               bitly/asyncmongo

Credits

Thanks to lovely systems for development and Tarek Ziade, Kevin Williams, Wesley Mason for bugfixes and extensions.

Handler Installation

By default the install function looks for the password file at ~/.buildout/.httpauth and installs a basic auth opener.

It does not fail if the file cannot be found:

>>> import os
>>> from p01.buildouthttp.buildouthttp import install
>>> install()

We can supply the path to the file for testing.

>>> install(pwd_path='a')

If the file cannot be parsed an exception is raised:

>>> fp = os.path.join(tmp,'pwd.txt')
>>> import os
>>> f = open(fp, 'w')
>>> _ = f.write('The realm,https://example.com/ something')
>>> f.close()
>>> install(pwd_path=fp)
Traceback (most recent call last):
...
RuntimeError: Authentication file cannot be parsed ...pwd.txt:1

Some working examples:

>>> f = open(fp, 'w')
>>> _ = f.write('The realm,https://example.com/,username,password')
>>> f.close()
>>> install(pwd_path=fp)
>>> f = open(fp, 'w')
>>> _ = f.write('The realm,https://example.com/,username,password\n\n\n')
>>> f.close()
>>> install(pwd_path=fp)
>>> f = open(fp, 'w')
>>> _ = f.write('')
>>> f.close()
>>> install(pwd_path=fp)

Now let’s try with the .httpauth file in the buildout directory:

>>> buildout_dir = os.path.join(tmp, 'test-buildout')
>>> os.mkdir(buildout_dir)
>>> buildout = {'buildout': {'directory': buildout_dir}}
>>> install(buildout=buildout)
>>> buildout_fp = os.path.join(buildout_dir, '.httpauth')
>>> f = open(buildout_fp, 'w')
>>> _ = f.write('The realm,https://example.com/ not valid')
>>> f.close()
>>> install(buildout=buildout)
Traceback (most recent call last):
...
RuntimeError: Authentication file cannot be parsed ...None:1
>>> f = open(buildout_fp, 'w')
>>> _ = f.write('The realm,https://example.com/,username,password')
>>> f.close()
>>> install(buildout=buildout)

Then with the file passed in and the file from the buildout directory:

>>> f = open(fp, 'w')
>>> _ = f.write('The realm,https://example.com/,username,password')
>>> f.close()
>>> install(buildout=buildout, pwd_path=fp)

unload externsion:

>>> from p01.buildouthttp.buildouthttp import unload
>>> unload()

CHANGES

1.0.3 (2025-07-14)

  • bugfix; support HOME location for .buildout/.httpauth file

1.0.2 (2025-07-01)

  • make python 3 compatible

1.0.1 (2015-11-27)

  • bugfix: fix url opener setup

1.0.0 (2015-11-23)

  • fix url handling troubles based on python 2.7.10 and zc.buildout > 2.2

  • initial copy of lovely.buildouthttp

Release files for p01.buildouthttp 1.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for p01.buildouthttp 1.0.3
File Size Uploaded
p01.buildouthttp-1.0.3.tar.gz 28.0 kB Details

Release files / p01.buildouthttp-1.0.3.tar.gz

Download URL p01.buildouthttp-1.0.3.tar.gz
Size 28.0 kB
Tags Source
SHA-256 checksum
How to use checksums
5e43dfe983f08f8dc4235885d3fce279ff5ebd050c6de7d610d5513e96bb3abd
BLAKE2b-256 checksum
How to use checksums
8587d67fe328203e0d2482c54529c17acf47e56ec8a5e78cf88ecff247673b4e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.15.0 pkginfo/1.8.3 requests/2.27.1 setuptools/39.1.0 requests-toolbelt/1.0.0 tqdm/4.64.1 CPython/2.7.18

Release history Release notifications | RSS feed

This release

1.0.3 This release

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page