music on atproto
plyr.fm
1#!/usr/bin/env python
2"""publish permission set lexicon to ATProto repo with specific rkey."""
3
4import asyncio
5import os
6
7from atproto import AsyncClient
8
9
10async def main():
11 handle = os.environ["PLYRFM_HANDLE"]
12 password = os.environ["PLYRFM_PASSWORD"]
13 namespace = os.environ.get("NAMESPACE", "fm.plyr")
14
15 client = AsyncClient()
16 await client.login(handle, password)
17
18 permission_set_id = f"{namespace}.authFullApp"
19
20 record = {
21 "$type": "com.atproto.lexicon.schema",
22 "lexicon": 1,
23 "id": permission_set_id,
24 "defs": {
25 "main": {
26 "type": "permission-set",
27 "title": "plyr.fm",
28 "description": "Upload and manage audio content, playlists, likes, and comments.",
29 "permissions": [
30 {
31 "type": "permission",
32 "resource": "repo",
33 "action": ["create", "update", "delete"],
34 "collection": [
35 f"{namespace}.track",
36 f"{namespace}.like",
37 f"{namespace}.comment",
38 f"{namespace}.list",
39 f"{namespace}.actor.profile",
40 ],
41 }
42 ],
43 }
44 },
45 }
46
47 result = await client.com.atproto.repo.put_record(
48 {
49 "repo": client.me.did,
50 "collection": "com.atproto.lexicon.schema",
51 "rkey": permission_set_id,
52 "record": record,
53 }
54 )
55
56 print(f"created: {result.uri}")
57 print(f"cid: {result.cid}")
58
59
60if __name__ == "__main__":
61 asyncio.run(main())