BasecamPY3
An easy-to-use Python interface to the Basecamp 3 API.
While BasecamPY3 aims to be equally functional in Python 2.7, the majority of testing has been in Python 3.4+ during this early stage of its development.
Features
- Easy, AWS CLI-like configuration and installation
- Object-oriented API
- Handles rate-limiting, caching, and authentication for you!
Install
pip install basecampy3
bc3 configure
Follow the prompts to obtain an access and refresh token which is then saved to ~/.config/basecamp.conf, allowing you
to call Basecamp3() without any parameters. You will need to make your own
Basecamp 3 app integration first.
Storing in environment variables
Once you have the credentials you can store them in environment variables:
- BASECAMP_CLIENT_ID
- BASECAMP_CLIENT_SECRET
- BASECAMP_REDIRECT_URL
- BASECAMP_ACCESS_TOKEN
- BASECAMP_REFRESH_TOKEN
This will allow to easier deploys using CI, initializing with:
from basecampy3 import Basecamp3
bc3 = Basecamp3.from_environment()
Usage
Basic Example
from basecampy3 import Basecamp3
bc3 = Basecamp3()
for project in bc3.projects.list():
print(project.name)
new_project = bc3.projects.create("My New Project", description="The best project ever made.")
new_project.campfire.post_message("Hello World!")
new_message = new_project.message_board.post_message("Check this out", content="This is a new message thread start.")
new_message.archive()
todolist = new_project.todoset.create("Things to be done")
todolist.create("Get Milk")
todolist.create("Get Eggs")
go_to_bed = todolist.create("Go to bed.")
go_to_bed.check() # this is marked as done
Not all functionality of the API is available yet. For anything missing, you can use the requests Session object yourself directly and consult the Basecamp 3 API docs. The benefit of using this Session object is you will benefit from the authentication, rate-limiting, and caching features.
Direct Session Example
from basecampy3 import Basecamp3
import json
bc3 = Basecamp3()
session = bc3.session
# replace these with actual IDs of the Basecamp objects you wish to get
MY_COMPANY_ID = 1234567
recording_id = 123456789
project_id = 1234567
# Reference:
# https://github.com/basecamp/bc3-api/blob/master/sections/comments.md#get-comments
BASE_URL = "https://3.basecampapi.com/{company_id}".format(company_id=MY_COMPANY_ID) # base of all API requests
ENDPOINT = "{base_url}/buckets/{project_id}/recordings/{recording_id}/comments.json" # get comments endpoint
url = ENDPOINT.format(base_url=BASE_URL, project_id=project_id, recording_id=recording_id)
resp = session.get(url) # make a GET request. Substitute get() with post() or put() or delete() as needed
if not resp.ok: # API returned a 4XX or 5XX error
print("Something went wrong.")
data = resp.json()
pretty_print = json.dumps(data, indent=4)
print(pretty_print)
CLI Example
COMING SOON! Command Line interface for doing stuff with Basecamp. (not working yet)
$ bc3 copy-access 12341234 87658765 # give user 87658765 access to all the projects that 12341234 does
Todo
- The rest of the Basecamp 3 API
- Command line tool (beyond just the "configure" command)
- Better testing coverage
Metadata
Release files for basecampy3 0.7.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| basecampy3-0.7.2.tar.gz | 56.8 kB | Without provenance | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| basecampy3-0.7.2-py3-none-any.whl | Python 3 | none | any | Details |
| basecampy3-0.7.2-py2-none-any.whl | Python 2 | none | any | Details |
Total release size: 234.5 kB
Release files / basecampy3-0.7.2.tar.gz
| Download URL | basecampy3-0.7.2.tar.gz |
|---|---|
| Size | 56.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
af11d59245b464f978e274278306b75995b984000a1250a403b49ed799fc4e01
|
|
BLAKE2b-256 checksum How to use checksums |
90eafc0a5869aecb9ead49dc8c1f73d3ebe66cb977948bdc64778090060b1c18
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.1
|
Release files / basecampy3-0.7.2-py3-none-any.whl
| Download URL | basecampy3-0.7.2-py3-none-any.whl |
|---|---|
| Size | 88.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2be503a6cf9d15b06cb9e4bdf7c9d5535467dc6e765e416ba3f54d00982b9f39
|
|
BLAKE2b-256 checksum How to use checksums |
e1c6d9d291061b898178d1a3fb3a412d23b0570e193ae85e2380ffca8b9ece0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.1
|
Release files / basecampy3-0.7.2-py2-none-any.whl
| Download URL | basecampy3-0.7.2-py2-none-any.whl |
|---|---|
| Size | 88.9 kB |
| Tags | Python 2 |
|
SHA-256 checksum How to use checksums |
f90baaae4ab58627eebb4fba0706c3d7333f7f603304bdc8101ce3e5275fdaf5
|
|
BLAKE2b-256 checksum How to use checksums |
597236afa6d18714a16324cceadbcc5a13ae28d3bff5fc41ac32932c44aa1f0f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.1
|
Security for basecampy3 0.7.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.