Skip to main content

Tests Docs

Psychonaut helmet

PROGRESS REPORT

  • Finish pydantic validation for reference types

What is this?

An async python sdk for Bluesky.

I used to do a pretty absurd amount of experiments with twitter's api. But musk has decided to turn that platform into a pay-for-play version of LinkedIn and banished all the tinkerers. So, now I'm here.

It has a bit of a weird structure. You basically do things like,

async with get_simple_client_session() as sess:
    posts: GetPostsResp = await GetPostsReq(uris=[...]).do_xrpc(sess)
    ...

which feels backwards from the expected,

async with get_simple_client_session() as sess:
    posts: GetPostsResp = await sess.do_xrpc(GetPostsReq(uris=[...]))

or even,

async with get_simple_client_session() as sess:
    posts: GetPostsResp = await sess.get_posts(uris=[...])

It's kinda an artifact of the way I did code generation but I kinda like it and fuck it S-expressions worked so there is a (completely nonsensical) precedence.

And, just to clarify, every request and response gets validated against the lexicon schema, which is nice (although reference types are still a WIP). Moreover, the generated code is auto-complete/copilot friendly. And, in theory, you could override do_xrpc to do clever things like caching, instead of hacking each particular api call.

But mostly I'm lazy so this is how it is.

Should I use this?

Almost certainly not. Right now it's a bucket of slop. I offer no guarantees about the stability of the API, the correctness of the implementation, or the quality of the documentation.

If you want to use it, go ahead.

Every single api call exists with Pydantic models for requests and responses (but with a few outstanding validations missing).

It's still unstable but I've been using it pretty regularly.

# In your venv or mamba env or whatever
pip install psychonaut

to use it as a library. This also installs the psychonaut command line tool.

psychonaut --help

# Temporary login
export BSKY_USERNAME=yourusername
export BSKY_PASSWORD=yourpassword

# Permanent login (~/.psychonaut.json)
psychonaut save-login yourusername 

psychonaut poast "hey look, an annoying cron job"

But definitely be mindful of the version because I'm going to break your code.

Alternatively, just use pipx

pipx install psychonaut

export BSKY_USERNAME=yourusername
export BSKY_PASSWORD=yourpassword

psychonaut poast "hell yea, pipx"

Firehose

EXTREMELY EXPERIMENTAL AND STILL NOT FINISHED

repos-firehose-stream saves the raw messages for subsequent replay so you can at least collect now and i'll get the json emit / validation working later.

# Stream the firehose
psychonaut repos-firehose-stream stream_dir

# Stream the firehose but print to stdout too
psychonaut repos-firehose-stream --tee stream_dir

# Replay serialized
psychonaut repos-firehose-replay stream_dir

# Replay serialized file
psychonaut repos-firehose-replay stream_dir/your_stream.b64-lines

How is this made?

Initially, this was a collaboration between the atproto repo, me, and my friend ChatGPT (using GPT-4). I had been toying around with this automatic langa<->langb transpiler in langchain. My original goal was to jointly build that while making my python client from the atproto repo. However, the fine folks at OpenAI didn't give me GPT-4 API access, and GPT-3 isn't quite good enough to do the job. So instead, this was me testing the fences "manually" (with ChatGPT). And now it's just me.

This also means this project was a bit...like theft? IDK.

Question of the generative hour: where is the boundary?

See Also (for pythonistas)

Metadata

Release files for psychonaut 0.0.16

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

Source distribution (sdist)

Source distribution for psychonaut 0.0.16
File Size Uploaded
psychonaut-0.0.16.tar.gz 64.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for psychonaut 0.0.16
File Interpreter ABI Platform
psychonaut-0.0.16-py3-none-any.whl Python 3 none any Details

Total release size: 187.6 kB

Release files / psychonaut-0.0.16.tar.gz

Download URL psychonaut-0.0.16.tar.gz
Size 64.3 kB
Tags Source
SHA-256 checksum
How to use checksums
28f776646d04856735ffa331c6353f666941709c6551e9152e2246a112b1f1d3
BLAKE2b-256 checksum
How to use checksums
6717f013eef671b60b145880b665ab7388db7538c99ca90aa565f1f8d1f2e1e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.4.2 CPython/3.10.6 Linux/5.19.0-38-generic

Release files / psychonaut-0.0.16-py3-none-any.whl

Download URL psychonaut-0.0.16-py3-none-any.whl
Size 123.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3960fa5fdce43f4e9f9d8398c5b175e7db36fe71c673d0c983a506a83ad84cc1
BLAKE2b-256 checksum
How to use checksums
42a2a834b10b897ae2a2e79546f26f20717fc5d8d96e525826f91ec9540629d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.4.2 CPython/3.10.6 Linux/5.19.0-38-generic

Release history Release notifications | RSS feed

This release

0.0.16 This release

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

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