# activitypub

This is a Python library to use with
[ActivityPub](https://en.wikipedia.org/wiki/ActivityPub). ActivityPub
is an API for an open, distributed, social network.

## Install

You can install the development version of activitypub with:

```
pip install git+git://github.com/dsblank/activitypub
```

or the last packaged version with:

```
pip install activitypub
```

## Abstractions

This module is designed to be a generally useful ActivityPub library in Python. It targets three different levels of use:

* ActivityPub object API
* ActivityPub database API
* Webserver API

These levels can be used independently, or together. They can best be used together using a Manager:

```python
>>> from activitypub.manager import Manager
>>> from activitypub.database import ListDatabase
>>> db = ListDatabase()
>>> manager = Manager(database=db)
>>> p = manager.Person(id="alyssa")
>>> p.to_dict()
{'@context': 'https://www.w3.org/ns/activitystreams',
 'endpoints': {},
 'followers': 'https://example.com/alyssa/followers',
 'following': 'https://example.com/alyssa/following',
 'id': 'https://example.com/alyssa',
 'inbox': 'https://example.com/alyssa/inbox',
 'liked': 'https://example.com/alyssa/liked',
 'likes': 'https://example.com/alyssa/likes',
 'outbox': 'https://example.com/alyssa/outbox',
 'type': 'Person',
 'url': 'https://example.com/alyssa'}
>>> db.actors.insert_one(p.to_dict())
>>> db.actors.find_one({"id": 'https://example.com/alyssa'})
{'@context': 'https://www.w3.org/ns/activitystreams',
 'endpoints': {},
 'followers': 'https://example.com/alyssa/followers',
 'following': 'https://example.com/alyssa/following',
 'id': 'https://example.com/alyssa',
 'inbox': 'https://example.com/alyssa/inbox',
 'liked': 'https://example.com/alyssa/liked',
 'likes': 'https://example.com/alyssa/likes',
 'outbox': 'https://example.com/alyssa/outbox',
 'type': 'Person',
 'url': 'https://example.com/alyssa',
 '_id': ObjectId('5b579aee1342a3230c18fbf7')}
```

activitypub supports the following databases:

* MongoDB
* SQL dialects --- any that that sqlalchemy supports, including:
  * SQLite (including in-memory)
  * Firebird
  * Microsoft SQL Server
  * MySQL
  * Oracle
  * PostgreSQL
  * Sybase
  * ... and many more!
* An in-memory, JSON-based database for testing
* Redis

The activitypub database API is a subset of the MongDB.

activitypub is targeting the following web frameworks:

* Flask
* Tornado

Others can be supported. Please ask!

The activitypub webservice API is based on Flask's.
