bookwyrm/bookwyrm/activitypub/verbs.py

136 lines
2.9 KiB
Python
Raw Normal View History

''' undo wrapper activity '''
from dataclasses import dataclass
from typing import List
from .base_activity import ActivityObject, Signature
2020-12-16 02:57:17 +00:00
from .book import Edition
@dataclass(init=False)
class Verb(ActivityObject):
''' generic fields for activities - maybe an unecessary level of
abstraction but w/e '''
actor: str
object: ActivityObject
2021-02-16 04:49:23 +00:00
def action(self):
''' usually we just want to save, this can be overridden as needed '''
self.object.to_model()
@dataclass(init=False)
class Create(Verb):
''' Create activity '''
to: List
cc: List
2021-02-02 17:37:46 +00:00
signature: Signature = None
type: str = 'Create'
2020-10-14 15:38:51 +00:00
@dataclass(init=False)
class Delete(Verb):
''' Create activity '''
to: List
cc: List
type: str = 'Delete'
2021-02-16 04:49:23 +00:00
def action(self):
''' find and delete the activity object '''
obj = self.object.to_model(save=False, allow_create=False)
obj.delete()
2020-10-14 15:38:51 +00:00
@dataclass(init=False)
class Update(Verb):
''' Update activity '''
to: List
type: str = 'Update'
2021-02-16 04:49:23 +00:00
def action(self):
''' update a model instance from the dataclass '''
self.object.to_model(allow_create=False)
@dataclass(init=False)
class Undo(Verb):
''' Undo an activity '''
type: str = 'Undo'
2021-02-16 04:49:23 +00:00
def action(self):
''' find and remove the activity object '''
obj = self.object.to_model(save=False, allow_create=False)
obj.delete()
@dataclass(init=False)
class Follow(Verb):
''' Follow activity '''
2021-02-16 02:47:08 +00:00
object: str
type: str = 'Follow'
2021-02-16 04:49:23 +00:00
2021-01-23 19:03:10 +00:00
@dataclass(init=False)
class Block(Verb):
''' Block activity '''
2021-02-16 02:47:08 +00:00
object: str
2021-01-23 19:03:10 +00:00
type: str = 'Block'
2021-02-16 04:49:23 +00:00
@dataclass(init=False)
class Accept(Verb):
''' Accept activity '''
object: Follow
type: str = 'Accept'
2021-02-16 04:49:23 +00:00
def action(self):
''' find and remove the activity object '''
obj = self.object.to_model(save=False, allow_create=False)
obj.accept()
@dataclass(init=False)
class Reject(Verb):
''' Reject activity '''
object: Follow
type: str = 'Reject'
2021-02-16 04:49:23 +00:00
def action(self):
''' find and remove the activity object '''
obj = self.object.to_model(save=False, allow_create=False)
obj.reject()
@dataclass(init=False)
class Add(Verb):
'''Add activity '''
target: str
object: ActivityObject
type: str = 'Add'
@dataclass(init=False)
class AddBook(Add):
'''Add activity that's aware of the book obj '''
object: Edition
type: str = 'Add'
@dataclass(init=False)
class AddListItem(AddBook):
'''Add activity that's aware of the book obj '''
notes: str = None
order: int = 0
approved: bool = True
@dataclass(init=False)
class Remove(Verb):
'''Remove activity '''
target: ActivityObject
type: str = 'Remove'
2021-02-16 04:49:23 +00:00
def action(self):
''' find and remove the activity object '''
obj = self.object.to_model(save=False, allow_create=False)
obj.delete()