at main 1.7 kB view raw
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())