Skip to main content

nostrfastr

What is this?

  • This package attempts to be a well documented and tested instance of a very basic client framework and other tools that use the nostr protocol. The goal is to help others understand nostr quickly and get started sending messages from python in minutes.
  • Contained is a collection of tools built on top of this basic Client class showing some potential uses of nostr any how quickly we can build on it in python.
    • A “sentinel” node that serves as a barebones client to rebroadcast user data across additional nostr relays. While this is a relatively simple concept I haven’t seen much discussion around the potential benefits and implications.
    • notifyr - a decorator that will alert on success or failure of any decorated function via nostr DM
    • a vanity address generator decorated with the notifyr function so you can leave it running and get notified when it finishes

Why nbdev?

This library uses the nbdev framework to aggregate some useful tools from python-nostr into a more structured client class that could serve as the basis for other python tools. nbdev is great because it allows for relatively easy development of code in-line with readable and explanatory documentation. This webpage is a rendering of the same notebooks that are exported to form the package code. If you clone the Github repository you can view and run the code you see in the documentation. It will almost certainly not be the most perfomant way to implement much of what I am doing here, but I hope it can make the nostr protocol more accessible to a wider audience.

Suggestions

If you have suggestions for topics or concepts related to nostr that this package could help document or explain in python, please feel free to submit an issue with a suggestion here

Known issues

  • notifyr - see the notifyr page for more detail on these issues
    • keyring may need uninstalled dependencies on linux builds
    • Current spec of nostr DMs is likely not adequate for secure usage of this module for sensitive data.

Install

pip install nostrfastr

or alternatively, clone the github repositor and refer to this guide to get started working in nbdev.

How to use

Documentation can be found at https://armstrys.github.io/nostrfastr/

from nostrfastr.client import Client

Connect and perform an operation…

with Client(relay_urls=['wss://relay.damus.io']) as client:
    print('Are we connected?')
    print('\t', client.relay_manager.connection_statuses)
print('Are we connected?')
print('\t', client.relay_manager.connection_statuses)
Are we connected?
     {'wss://relay.damus.io': True}
Are we connected?
     {'wss://relay.damus.io': False}

And use the client to build something useful with nostr - like a bot that notifies you of your python processing status on long code runs

from nostrfastr.notifyr import notifyr
@notifyr
def raise_error():
    raise Exception('Oh no! Process failed!')

@notifyr
def success():
    return 1+1

Or generate an vanity address and have it notify you at another nostr address when it’s done

from nostrfastr.vanity import vanity_notifyr

private_key = vanity_notifyr(startswith='23', style='npub')
print(private_key.public_key.bech32())
/Users/ryanarmstrong/python/nostrfastr/nostrfastr/client.py:479: UserWarning: the current implementation of messages should be used with caution
                    see https://github.com/nostr-protocol/nips/issues/107
  warnings.warn('''the current implementation of messages should be used with caution

It might take 0 seconds to find a npub pubkey that starts with npub123. Note that this is a very rough estimate and due to the random nature of finding vanity keys it could take MUCH longer.
npub1237z2shf8rlgs8xqg0cggz7dhxjtkszy205wesht2xr3nat86m7s30lqw5

Metadata

Release files for nostrfastr 0.0.6

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

Source distribution (sdist)

Source distribution for nostrfastr 0.0.6
File Size Uploaded
nostrfastr-0.0.6.tar.gz 18.6 kB Details

Built distribution (wheel)

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

Total release size: 35.9 kB

Release files / nostrfastr-0.0.6.tar.gz

Download URL nostrfastr-0.0.6.tar.gz
Size 18.6 kB
Tags Source
SHA-256 checksum
How to use checksums
2de4659c8eba3da031e6978cb718e15eabf8b2b37c33b1d4c0a8afafbe33bd75
BLAKE2b-256 checksum
How to use checksums
fb43890c7932d723758ce497e2c597e956132b87bd2cdf413942cecf3bd8b3ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.0

Release files / nostrfastr-0.0.6-py3-none-any.whl

Download URL nostrfastr-0.0.6-py3-none-any.whl
Size 17.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
75f9841d30732da995ab3e8b9830bd587de5bdfa2d71c56f3746ce98f7a1c595
BLAKE2b-256 checksum
How to use checksums
f74c1f09d191960bc7dbda25407147155ad9e688e5c8adb50938534ba5cd4c54
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.0

Release history Release notifications | RSS feed

This release

0.0.6 This release

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