コード例 #1
0
class MockAbstractObject(AbstractObject):
    field1 = Field()
    field2 = Field()
    field3: Field = Field().with_api_name("id")
    field4: Field = Field().with_api_name("foo.bar")

    def __init__(self, gmi: GMI) -> None:
        self.gmi = gmi
        self.fields_loaded = False

    def on_fields_loaded(self) -> None:
        self.fields_loaded = True
コード例 #2
0
class MockAbstractObject(AbstractObject):
    field1 = Field()
    field2 = Field(handler=int)
    field3 = Field(api_name='id')
    field4 = Field(api_name='foo.bar')

    def __init__(self, gmi):
        self.gmi = gmi
        self.fields_loaded = False

    def on_fields_loaded(self):
        self.fields_loaded = True
コード例 #3
0
class User(AbstractObject, RetrievableObject):
    user_id: str = Field().with_type(str)
    phone_number: str = Field().with_type(str)
    image_url: str = Field().with_type(str)
    name: str = Field().with_type(str)
    created_at: int = Field().with_type(int)
    updated_at: int = Field().with_type(int)
    email: str = Field().with_type(str)
    sms: bool = Field().with_type(bool)

    def __init__(self, gmi: "GMI") -> None:
        self.gmi = gmi

    def save(self) -> None:
        new_data = UserUpdateRequest(
            self.gmi, self.image_url, self.name, self.email
        ).result
        self._refresh_from_other(new_data)

    def refresh(self) -> None:
        new_data = UserMeRequest(self.gmi).result
        self._refresh_from_other(new_data)

    @classmethod
    def get(cls, gmi: "GMI") -> "User":  # type: ignore
        user = cls(gmi)
        user.refresh()
        return user

    def enable_sms(self, duration: int, registration_id: str) -> None:
        SmsCreateRequest(self.gmi, duration, registration_id)

    def disable_sms(self) -> None:
        SmsDeleteRequest(self.gmi)
コード例 #4
0
ファイル: user.py プロジェクト: christianbreynolds/lowerpines
class User(AbstractObject, RetrievableObject):
    user_id = Field()
    phone_number = Field()
    image_url = Field()
    name = Field()
    created_at = Field()
    updated_at = Field()
    email = Field()
    sms = Field()

    def __init__(self, gmi):
        self.gmi = gmi

    def save(self):
        new_data = UserUpdateRequest(self.gmi, self.image_url, self.name, self.email).result
        self._refresh_from_other(new_data)

    def refresh(self):
        new_data = UserMeRequest(self.gmi).result
        self._refresh_from_other(new_data)

    @classmethod
    def get(cls, gmi):
        user = cls(gmi)
        user.refresh()
        return user

    def enable_sms(self, duration, registration_id):
        SmsCreateRequest(self.gmi, duration, registration_id)

    def disable_sms(self):
        SmsDeleteRequest(self.gmi)
コード例 #5
0
class TestField(TestCase):
    def setUp(self) -> None:
        self.name_api_field = "test"
        self.name_varname = "varname"

        self.basic_field = Field()
        self.api_field = Field().with_api_name(self.name_api_field)

    def test_basic_field(self) -> None:
        self.basic_field.with_field_name(self.name_varname)
        self.assertEqual(self.basic_field.name, self.name_varname)
        self.assertEqual(self.basic_field.api_name, self.name_varname)

    def test_api_field(self) -> None:
        self.api_field.with_field_name(self.name_varname)
        self.assertEqual(self.api_field.name, self.name_varname)
        self.assertEqual(self.api_field.api_name, self.name_api_field)
コード例 #6
0
class Chat(AbstractObject):
    created_at: int = Field().with_type(int)
    updated_at: int = Field().with_type(int)
    messages_count: int = Field().with_type(int)
    last_message_raw: JsonType = Field().with_api_name("last_message").with_type(
        JsonType
    )
    other_user_raw: JsonType = Field().with_api_name("other_user").with_type(JsonType)

    last_message: Optional["DirectMessage"] = None
    other_user: "******" = None  # type: ignore

    def __init__(self, gmi: "GMI") -> None:
        self.gmi = gmi
        self.messages = ChatMessagesManager(self)

    @staticmethod
    def get_all(gmi: "GMI") -> List["Chat"]:
        return DirectMessageChatsRequest(gmi).result

    def get(self, other_user_id: str) -> List["DirectMessage"]:
        return DirectMessageIndexRequest(self.gmi, other_user_id).result

    def post(self, message: "ComplexMessage") -> "DirectMessage":
        text, attachments = smart_split_complex_message(message)
        return DirectMessageCreateRequest(
            self.gmi,
            self.gmi.user.get().user_id,
            self.other_user.user_id,
            text,
            attachments,
        ).result

    def on_fields_loaded(self) -> None:
        self.last_message = DirectMessage.from_json(self.gmi, self.last_message_raw)
        self.other_user = DirectMessageUser.from_json(self.gmi, self.other_user_raw)

    def __str__(self) -> str:
        return "Chat with " + str(self.other_user)

    def __repr__(self) -> str:
        return "C:" + str(self.other_user)
コード例 #7
0
class DirectMessageUser(AbstractObject):
    def save(self) -> None:
        raise InvalidOperationException("This operation is not permitted")

    @staticmethod
    def get(gmi: "GMI", *args: Any) -> None:
        raise InvalidOperationException("This operation does not make sense")

    def refresh(self) -> None:
        raise InvalidOperationException("This operation is non-trivial to implement")

    avatar_url: str = Field()  # type: ignore
    user_id: str = Field()  # type: ignore
    name: str = Field()  # type: ignore

    def __init__(self, gmi: "GMI") -> None:
        self.gmi = gmi

    def __str__(self) -> str:
        return str(self.name)
コード例 #8
0
class Block(AbstractObject):
    user_id: str = Field().with_type(str)
    blocked_user_id: str = Field().with_type(str)

    def __init__(self, gmi: "GMI") -> None:
        self.gmi = gmi

    def get_all(self, user_id: str) -> List["Block"]:
        return BlockIndexRequest(self.gmi, user_id).result

    @staticmethod
    def block_exists(gmi: "GMI", user_id: str, other_user_id: str) -> bool:
        return BlockBetweenRequest(gmi, user_id, other_user_id).result

    @staticmethod
    def block(gmi: "GMI", user_id: str, other_user_id: str) -> None:
        BlockCreateRequest(gmi, user_id, other_user_id)

    @staticmethod
    def unblock(gmi: "GMI", user_id: str, other_user_id: str) -> None:
        BlockUnblockRequest(gmi, user_id, other_user_id)
コード例 #9
0
    def setUp(self):
        self.name_api_field = 'test'
        self.name_varname = 'varname'

        self.basic_field = Field()
        self.api_field = Field(api_name=self.name_api_field)
        self.handler_field = Field(handler=int)
コード例 #10
0
class TestField(TestCase):
    def setUp(self):
        self.name_api_field = 'test'
        self.name_varname = 'varname'

        self.basic_field = Field()
        self.api_field = Field(api_name=self.name_api_field)
        self.handler_field = Field(handler=int)

    def test_basic_field(self):
        self.basic_field.set_name(self.name_varname)
        self.assertEqual(self.basic_field.name, self.name_varname)
        self.assertEqual(self.basic_field.api_name, self.name_varname)
        self.assertEqual(self.basic_field.handler, str)

    def test_api_field(self):
        self.api_field.set_name(self.name_varname)
        self.assertEqual(self.api_field.name, self.name_varname)
        self.assertEqual(self.api_field.api_name, self.name_api_field)
        self.assertEqual(self.api_field.handler, str)

    def test_handler_field(self):
        self.handler_field.set_name(self.name_varname)
        self.assertEqual(self.handler_field.name, self.name_varname)
        self.assertEqual(self.handler_field.api_name, self.name_varname)
        self.assertEqual(self.handler_field.handler, int)
コード例 #11
0
class Block(AbstractObject):
    user_id = Field()
    blocked_user_id = Field()
    created_at = Field()

    def __init__(self, gmi):
        self.gmi = gmi

    def get_all(self, user_id):
        return BlockIndexRequest(self.gmi, user_id).result

    @staticmethod
    def block_exists(gmi, user_id, other_user_id):
        return BlockBetweenRequest(gmi, user_id, other_user_id).result

    @staticmethod
    def block(gmi, user_id, other_user_id):
        BlockCreateRequest(gmi, user_id, other_user_id)

    @staticmethod
    def unblock(gmi, user_id, other_user_id):
        BlockUnblockRequest(gmi, user_id, other_user_id)
コード例 #12
0
class Chat(AbstractObject):
    created_at = Field()
    updated_at = Field()
    messages_count = Field()
    last_message_raw = Field(api_name='last_message', handler=dict)
    other_user_raw = Field(api_name='other_user', handler=dict)

    last_message = None
    other_user = None

    def __init__(self, gmi):
        self.gmi = gmi
        self.messages = ChatMessagesManager(self)

    @staticmethod
    def get_all(gmi):
        return DirectMessageChatsRequest(gmi).result

    def get(self, other_user_id):
        return DirectMessageIndexRequest(self.gmi, other_user_id).result

    def post(self, message):
        text, attachments = smart_split_complex_message(message)
        return DirectMessageCreateRequest(self.gmi,
                                          self.gmi.user.get().user_id,
                                          self.other_user.user_id, text,
                                          attachments).result

    def on_fields_loaded(self):
        self.last_message = DirectMessage.from_json(self.gmi,
                                                    self.last_message_raw)
        self.other_user = DirectMessageUser.from_json(self.gmi,
                                                      self.other_user_raw)

    def __str__(self):
        return "Chat with " + str(self.other_user)

    def __repr__(self):
        return "C:" + str(self.other_user)
コード例 #13
0
class Member(AbstractObject, RetrievableObject):
    member_id = Field(api_name='id')
    user_id = Field()
    nickname = Field()
    muted = Field()
    image_url = Field()
    autokicked = Field()

    phone_number = Field()
    email = Field()

    def __init__(self, gmi, group_id, nickname=None, user_id=None, phone_number=None, email=None):
        self.gmi = gmi
        self.group_id = group_id
        self.nickname = nickname
        self.user_id = user_id
        self.phone_number = phone_number
        self.email = email

    def save(self):
        if self.member_id is None:
            if self.user_id is not None:
                MembersAddRequest(self.gmi, self.group_id, self.nickname, user_id=self.user_id)
            elif self.phone_number is not None:
                MembersAddRequest(self.gmi, self.group_id, self.nickname, phone_number=self.phone_number)
            elif self.email is not None:
                MembersAddRequest(self.gmi, self.group_id, self.nickname, email=self.email)
            else:
                raise ValueError('Please define one of user_id, phone_number, email before saving')
        else:  # Only works for current user
            new_data = MembersUpdateRequest(self.gmi, self.group_id, self.nickname).result
            self._refresh_from_other(new_data)

    def refresh(self):
        raise InvalidOperationException('Nontrivial to implement')

    @staticmethod
    def get(gmi, member_id):
        raise InvalidOperationException('Nontrivial to implement')

    def __str__(self):
        return self.nickname

    def __repr__(self):
        return str(self)
コード例 #14
0
class Group(AbstractObject, RetrievableObject):
    group_id = Field(api_name='id')
    name = Field()
    type = Field()
    description = Field()
    image_url = Field()
    creator_user_id = Field()
    created_at = Field()
    updated_at = Field()
    share_url = Field()
    members_raw = Field(api_name='members', handler=None)
    messages_count_raw = Field(api_name='messages.count', handler=None)
    messages_last_message_id_raw = Field(api_name='messages.last_message_id',
                                         handler=None)
    messages_last_message_created_at_raw = Field(
        api_name='messages.last_message_created_at', handler=None)

    def __init__(self, gmi, name=None, description=None, image_url=None):
        super().__init__()
        self.gmi = gmi
        self.messages = GroupMessagesManager(self)
        self.name = name
        self.description = description
        self.image_url = image_url
        self.members = []

    @property
    def bots(self):
        return self.gmi.bots.filter(group_id=self.group_id)

    def on_fields_loaded(self):
        self.members = []
        for member_json in self.members_raw:
            self.members.append(
                Member.from_json(self.gmi, member_json, self.group_id))
        self.messages.count = self.messages_count_raw
        self.messages.last_id = self.messages_last_message_id_raw
        self.messages.last_created_at = self.messages_last_message_created_at_raw

    def save(self):
        if self.group_id is None:
            new_data = GroupsCreateRequest(self.gmi, self.name,
                                           self.description,
                                           self.image_url).result
        else:
            new_data = GroupsUpdateRequest(self.gmi, self.group_id, self.name,
                                           self.description,
                                           self.image_url).result

        self._refresh_from_other(new_data)

    def delete(self):
        if self.group_id is None:
            raise InvalidOperationException(
                'Cannot destroy a group that isn\'t saved!')
        else:
            GroupsDestroyRequest(self.gmi, self.group_id)

    def refresh(self):
        if self.group_id is None:
            raise InvalidOperationException(
                'Must have an id to perform this operation')
        else:
            new_data = GroupsShowRequest(self.gmi,
                                         group_id=self.group_id).result
            self._refresh_from_other(new_data)

    def member_add(self, name, user_id):
        MembersAddRequest(self.gmi, self.group_id, name, user_id=user_id)

    def member_rm(self, member_id):
        MembersRemoveRequest(self.gmi, self.group_id, member_id)

    def post(self, message):
        text, attachments = smart_split_complex_message(message)
        obj = Message(self.gmi, self.group_id, str(datetime.now()), text,
                      attachments)
        obj.save()
        return obj

    @staticmethod
    def get(gmi, group_id):
        return GroupsShowRequest(gmi, group_id).result

    @staticmethod
    def get_all(gmi):
        return GroupsIndexRequest(gmi, per_page=100).result

    @staticmethod
    def get_former(gmi):
        return GroupsFormerRequest(gmi).result

    @staticmethod
    def join(gmi, group_id, share_token):
        return GroupsJoinRequest(gmi, group_id, share_token).result

    @staticmethod
    def rejoin(gmi, group_id):
        return GroupsRejoinRequest(gmi, group_id).result

    def change_owner(self, owner_id):
        return GroupsChangeOwnersRequest(self.gmi, [{
            'group_id': self.group_id,
            'owner_id': owner_id
        }]).result

    def __str__(self):
        return self.name

    def __repr__(self):
        return str(self)
コード例 #15
0
class Message(AbstractObject, RetrievableObject):
    message_id = Field(api_name='id')
    source_guid = Field()
    created_at = Field()
    user_id = Field()
    group_id = Field()
    name = Field()
    avatar_url = Field()
    text = Field()
    system = Field()
    favorited_by = Field(handler=None)
    attachments = Field(handler=None)
    sender_type = Field()
    sender_id = Field()

    def __init__(self,
                 gmi,
                 group_id=None,
                 source_guid=None,
                 text=None,
                 attachments=list()):
        self.gmi = gmi
        self.group_id = group_id
        self.source_guid = source_guid
        self.text = text
        self.attachments = attachments
        self.message_id = None

    def save(self):
        if self.message_id:
            raise InvalidOperationException(
                "You cannot change a message that has already been sent")
        else:
            new_data = MessagesCreateRequest(self.gmi, self.group_id,
                                             self.source_guid, self.text,
                                             self.attachments).result
            self._refresh_from_other(new_data)

    def refresh(self):
        if self.message_id:
            new_data = MessagesShowRequest(self.gmi, self.group_id,
                                           self.message_id).result
            self._refresh_from_other(new_data)
        else:
            raise InvalidOperationException(
                "Must have a message_id to pull data from the server")

    def on_fields_loaded(self):
        if self.text is None:
            self.text = ""
        from lowerpines.message import ComplexMessage, RefAttach
        self.complex_text = ComplexMessage('')
        doing_mentions = False
        for attachment in self.attachments:
            if attachment['type'] == 'mentions':
                doing_mentions = True
                prev_index = 0
                for i in range(len(self.text)):
                    for loci, user_id in zip(attachment['loci'],
                                             attachment['user_ids']):
                        if loci[0] == i:
                            self.complex_text += self.text[prev_index:loci[0]] + \
                                                    RefAttach(user_id, self.text[loci[0]:loci[0] + loci[1]])
                            prev_index = loci[0] + loci[1]
                self.complex_text = self.complex_text + self.text[prev_index:]
        if not doing_mentions:
            self.complex_text = ComplexMessage(self.text)

    def __repr__(self):
        return str(self)

    def __str__(self):
        return self.text

    @staticmethod
    def get(gmi, group_id, message_id):
        return MessagesShowRequest(gmi, group_id, message_id).result

    def like(self):
        LikeCreateRequest(self.gmi, self.group_id, self.message_id)

    def unlike(self):
        LikeDestroyRequest(self.gmi, self.group_id, self.message_id)
コード例 #16
0
class Group(AbstractObject, RetrievableObject):
    group_id: str = Field().with_api_name("id").with_type(str)
    name: str = Field().with_type(str)
    type: str = Field().with_type(str)
    description: Optional[str] = Field().with_type(str)
    image_url: Optional[str] = Field().with_type(str)
    creator_user_id: str = Field().with_type(str)
    created_at: int = Field().with_type(int)
    updated_at: int = Field().with_type(int)
    share_url: Optional[str] = Field().with_type(str)
    share_qr_code_url: Optional[str] = Field().with_type(str)
    office_mode: bool = Field().with_type(bool)
    phone_number: Optional[str] = Field().with_type(str)
    members: List[Member]
    members_raw: List[JsonType] = Field().with_api_name("members").with_type(
        List[JsonType])
    messages_count_raw: int = Field().with_api_name(
        "messages.count").with_type(int)
    messages_last_message_id_raw: Optional[str] = Field().with_api_name(
        "messages.last_message_id").with_type(str)
    messages_last_message_created_at_raw: Optional[int] = Field(
    ).with_api_name("messages.last_message_created_at").with_type(int)

    def __init__(
        self,
        gmi: "GMI",
        name: Optional[str] = None,
        description: Optional[str] = None,
        image_url: Optional[str] = None,
    ) -> None:
        super().__init__(gmi)
        self.gmi = gmi
        self.messages = GroupMessagesManager(self)
        self.name = name  # type: ignore
        self.description = description
        self.image_url = image_url
        self.members = []

    @property
    def bots(self) -> "AbstractManager[Bot]":
        return self.gmi.bots.filter(group_id=self.group_id)

    def on_fields_loaded(self) -> None:
        self.members = []
        for member_json in self.members_raw:
            self.members.append(
                Member.from_json(self.gmi, member_json, self.group_id))
        self.messages.count = self.messages_count_raw
        self.messages.last_id = self.messages_last_message_id_raw
        self.messages.last_created_at = self.messages_last_message_created_at_raw

    def save(self) -> None:
        if self.group_id is None:
            new_data = GroupsCreateRequest(self.gmi, self.name,
                                           self.description,
                                           self.image_url).result
        else:
            new_data = GroupsUpdateRequest(self.gmi, self.group_id, self.name,
                                           self.description,
                                           self.image_url).result

        self._refresh_from_other(new_data)

    def delete(self) -> None:
        if self.group_id is None:
            raise InvalidOperationException(
                "Cannot destroy a group that isn't saved!")
        else:
            GroupsDestroyRequest(self.gmi, self.group_id)

    def refresh(self) -> None:
        if self.group_id is None:
            raise InvalidOperationException(
                "Must have an id to perform this operation")
        else:
            new_data = GroupsShowRequest(self.gmi,
                                         group_id=self.group_id).result
            self._refresh_from_other(new_data)

    def member_add(self, name: str, user_id: str) -> None:
        MembersAddRequest(self.gmi, self.group_id, name, user_id=user_id)

    def member_rm(self, member_id: str) -> None:
        MembersRemoveRequest(self.gmi, self.group_id, member_id)

    def post(self, message: Union["ComplexMessage", str]) -> Message:
        text, attachments = smart_split_complex_message(message)
        obj = Message(self.gmi, self.group_id, str(datetime.now()), text,
                      attachments)
        obj.save()
        return obj

    @staticmethod
    def get(gmi: "GMI", group_id: str) -> "Group":  # type: ignore
        return GroupsShowRequest(gmi, group_id).result

    @staticmethod
    def get_all(gmi: "GMI") -> List["Group"]:
        return GroupsIndexRequest(gmi, per_page=100).result

    @staticmethod
    def get_former(gmi: "GMI") -> List["Group"]:
        return GroupsFormerRequest(gmi).result

    @staticmethod
    def join(gmi: "GMI", group_id: str, share_token: str) -> "Group":
        return GroupsJoinRequest(gmi, group_id, share_token).result

    @staticmethod
    def rejoin(gmi: "GMI", group_id: str) -> "Group":
        return GroupsRejoinRequest(gmi, group_id).result

    def change_owner(self, owner_id: str) -> JsonType:
        return GroupsChangeOwnersRequest(self.gmi, self.group_id,
                                         owner_id).result

    def __str__(self) -> str:
        return self.name

    def __repr__(self) -> str:
        return str(self)
コード例 #17
0
ファイル: message.py プロジェクト: clarkperkins/lowerpines
class Message(AbstractObject, RetrievableObject):
    message_id: Optional[str] = Field().with_api_name("id").with_type(str)
    source_guid: str = Field().with_type(str)
    created_at: int = Field().with_type(int)
    user_id: str = Field().with_type(str)
    group_id: str = Field().with_type(str)
    name: str = Field().with_type(str)
    avatar_url: Optional[str] = Field().with_type(str)
    text: str = Field().with_type(str)
    system: bool = Field().with_type(bool)
    favorited_by: List[str] = Field().with_type(List[str])
    attachments: List[AttachmentType] = Field().with_type(List[AttachmentType])
    sender_type: Optional[str] = Field().with_type(str)
    sender_id: str = Field().with_type(str)

    complex_text: Optional["ComplexMessage"] = None

    def __init__(
        self,
        gmi: "GMI",
        group_id: Optional[str] = None,
        source_guid: Optional[str] = None,
        text: Optional[str] = None,
        attachments: Optional[List[AttachmentType]] = None,
    ) -> None:
        self.gmi = gmi
        self.group_id = group_id  # type: ignore
        self.source_guid = source_guid  # type: ignore
        self.text = text  # type: ignore
        self.attachments = attachments or []
        self.message_id = None

    def save(self) -> None:
        if self.message_id:
            raise InvalidOperationException(
                "You cannot change a message that has already been sent")
        else:
            new_data = MessagesCreateRequest(self.gmi, self.group_id,
                                             self.source_guid, self.text,
                                             self.attachments).result
            self._refresh_from_other(new_data)

    def refresh(self) -> None:
        message_id = self.message_id
        if message_id:
            new_data = MessagesShowRequest(self.gmi, self.group_id,
                                           message_id).result
            self._refresh_from_other(new_data)
        else:
            raise InvalidOperationException(
                "Must have a message_id to pull data from the server")

    def on_fields_loaded(self) -> None:
        if self.text is None:
            self.text = ""
        from lowerpines.message import ComplexMessage, RefAttach  # noqa: F811

        self.complex_text = ComplexMessage("")
        doing_mentions = False
        for attachment in self.attachments:
            if attachment["type"] == "mentions":
                doing_mentions = True
                prev_index = 0
                for i in range(len(self.text)):
                    for loci, user_id in zip(attachment["loci"],
                                             attachment["user_ids"]):
                        if loci[0] == i:
                            self.complex_text += self.text[
                                prev_index:loci[0]] + RefAttach(
                                    user_id,
                                    self.text[loci[0]:loci[0] + loci[1]])
                            prev_index = loci[0] + loci[1]
                self.complex_text = self.complex_text + self.text[prev_index:]
        if not doing_mentions:
            self.complex_text = ComplexMessage(self.text)

    def __repr__(self) -> str:
        return str(self)

    def __str__(self) -> str:
        return self.text

    @staticmethod
    def get(gmi: "GMI", group_id: str,
            message_id: str) -> "Message":  # type: ignore
        return MessagesShowRequest(gmi, group_id, message_id).result

    def like(self) -> None:
        message_id = self.message_id
        if message_id is None:
            raise ValueError("Message must be saved before it can be liked")
        LikeCreateRequest(self.gmi, self.group_id, message_id)

    def unlike(self) -> None:
        message_id = self.message_id
        if message_id is None:
            raise ValueError("Message must be saved before it can be unliked")
        LikeDestroyRequest(self.gmi, self.group_id, message_id)
コード例 #18
0
ファイル: bot.py プロジェクト: clarkperkins/lowerpines
class Bot(AbstractObject, RetrievableObject):
    bot_id: str = Field().with_type(str)
    group_id: str = Field().with_type(str)
    name: str = Field().with_type(str)
    avatar_url: Optional[str] = Field().with_type(str)
    callback_url: Optional[str] = Field().with_type(str)
    dm_notification: Optional[bool] = Field().with_type(bool)

    def __init__(
        self,
        gmi: "GMI",
        group_id: Optional[str] = None,
        name: Optional[str] = None,
        avatar_url: Optional[str] = None,
        callback_url: Optional[str] = None,
        dm_notification: Optional[bool] = None,
    ) -> None:
        self.gmi = gmi
        self.group_id = group_id  # type: ignore
        self.name = name  # type: ignore
        self.avatar_url = avatar_url
        self.callback_url = callback_url
        self.dm_notification = dm_notification

    @property
    def group(self) -> "Group":
        return self.gmi.groups.get(group_id=self.group_id)

    def save(self) -> None:
        if self.bot_id is None:
            new_data = BotCreateRequest(
                self.gmi,
                self.group_id,
                self.name,
                self.callback_url,
                self.avatar_url,
                self.dm_notification,
            ).result
            self._refresh_from_other(new_data)
        else:
            BotUpdateRequest(
                self.gmi,
                self.bot_id,
                self.group_id,
                self.name,
                self.callback_url,
                self.avatar_url,
                self.dm_notification,
            )

    def delete(self) -> None:
        if self.bot_id is None:
            raise InvalidOperationException(
                "Cannot destroy a bot that isn't saved!")
        else:
            BotDestroyRequest(self.gmi, self.bot_id)

    def refresh(self) -> None:
        if self.bot_id is None:
            raise InvalidOperationException("This operation is not permitted")
        else:
            raise InvalidOperationException("This is non trivial to implement")

    def post(self, message: Union["ComplexMessage", str]) -> None:
        text, attachments = smart_split_complex_message(message)
        BotPostRequest(self.gmi, self.bot_id, text, attachments)

    @staticmethod
    def get_all(gmi: "GMI") -> List["Bot"]:
        return BotIndexRequest(gmi).result

    @staticmethod
    def get(gmi: "GMI", bot_id: str) -> None:  # type: ignore
        raise InvalidOperationException("This is non trivial to implement")

    def __str__(self) -> str:
        return self.name + ":" + self.group_id
コード例 #19
0
ファイル: member.py プロジェクト: clarkperkins/lowerpines
class Member(AbstractObject, RetrievableObject):
    member_id: str = Field().with_api_name("id").with_type(str)
    user_id: str = Field().with_type(str)
    nickname: str = Field().with_type(str)
    muted: bool = Field().with_type(bool)
    image_url: Optional[str] = Field().with_type(str)
    autokicked: bool = Field().with_type(bool)
    app_installed: bool = Field().with_type(bool)
    guid: str = Field().with_type(str)
    phone_number: str = Field().with_type(str)
    email: str = Field().with_type(str)

    def __init__(
        self,
        gmi: "GMI",
        group_id: str,
        nickname: Optional[str] = None,
        user_id: Optional[str] = None,
        phone_number: Optional[str] = None,
        email: Optional[str] = None,
    ) -> None:
        self.gmi = gmi
        self.group_id = group_id  # type: ignore
        self.nickname = nickname  # type: ignore
        self.user_id = user_id  # type: ignore
        self.phone_number = phone_number  # type: ignore
        self.email = email  # type: ignore

    def save(self) -> None:
        if self.member_id is None:
            if self.user_id is not None:
                MembersAddRequest(self.gmi,
                                  self.group_id,
                                  self.nickname,
                                  user_id=self.user_id)
            elif self.phone_number is not None:
                MembersAddRequest(
                    self.gmi,
                    self.group_id,
                    self.nickname,
                    phone_number=self.phone_number,
                )
            elif self.email is not None:
                MembersAddRequest(self.gmi,
                                  self.group_id,
                                  self.nickname,
                                  email=self.email)
            else:
                raise ValueError(
                    "Please define one of user_id, phone_number, email before saving"
                )
        else:  # Only works for current user
            new_data = MembersUpdateRequest(self.gmi, self.group_id,
                                            self.nickname).result
            self._refresh_from_other(new_data)

    def refresh(self) -> None:
        raise InvalidOperationException("Nontrivial to implement")

    @staticmethod
    def get(gmi: "GMI", member_id: str) -> None:  # type: ignore
        raise InvalidOperationException("Nontrivial to implement")

    def __str__(self) -> str:
        return self.nickname

    def __repr__(self) -> str:
        return str(self)
コード例 #20
0
class MockAbstractObjectTypeObject(metaclass=AbstractObjectType):
    field1 = Field()
    field2 = Field(handler=int)
    field3 = Field(api_name='id')
コード例 #21
0
class MockAbstractObjectTypeObject(metaclass=AbstractObjectType):
    _fields: List[Field] = []

    field1 = Field()
    field2: Field = Field().with_api_name("id")
コード例 #22
0
    def setUp(self) -> None:
        self.name_api_field = "test"
        self.name_varname = "varname"

        self.basic_field = Field()
        self.api_field = Field().with_api_name(self.name_api_field)
コード例 #23
0
class DirectMessage(AbstractObject):
    @staticmethod
    def get(gmi: "GMI", *args: Any) -> None:
        raise InvalidOperationException("This is non-trivial to implement")

    def refresh(self) -> None:
        raise InvalidOperationException("This is non-trivial to implement")

    attachments: List[AttachmentType] = Field().with_type(List[AttachmentType])
    avatar_url: str = Field().with_type(str)
    conversation_id: str = Field().with_type(str)
    created_at: str = Field().with_type(str)
    favorited_by: str = Field().with_type(str)
    direct_message_id: str = Field().with_api_name("id").with_type(str)
    name: str = Field().with_type(str)
    recipient_id: str = Field().with_type(str)
    sender_id: str = Field().with_type(str)
    sender_type: str = Field().with_type(str)
    source_guid: str = Field().with_type(str)
    text: str = Field().with_type(str)
    user_id: str = Field().with_type(str)

    def __init__(
        self,
        gmi: "GMI",
        source_guid: Optional[str] = None,
        recipient_id: Optional[str] = None,
        text: Optional[str] = None,
        attachments: Optional[List[AttachmentType]] = None,
    ) -> None:
        self.gmi = gmi  # type: ignore
        self.source_guid = source_guid  # type: ignore
        self.recipient_id = recipient_id  # type: ignore
        self.text = text  # type: ignore
        self.attachments = attachments or []

    def save(self) -> None:
        if self.direct_message_id == "":
            new_data = DirectMessageCreateRequest(
                self.gmi,
                self.source_guid,
                self.recipient_id,
                self.text,
                self.attachments,
            ).result
            self._refresh_from_other(new_data)
        else:
            raise InvalidOperationException(
                "You cannot change a message that has already been sent"
            )

    def __str__(self) -> str:
        return self.text

    def __repr__(self) -> str:
        return "M:" + str(self)
コード例 #24
0
ファイル: bot.py プロジェクト: christianbreynolds/lowerpines
class Bot(AbstractObject, RetrievableObject):
    bot_id = Field(handler=None)
    group_id = Field()
    name = Field()
    avatar_url = Field()
    callback_url = Field()
    dm_notification = Field()

    def __init__(self,
                 gmi,
                 group_id=None,
                 name=None,
                 avatar_url=None,
                 callback_url=None,
                 dm_notification=None):
        self.gmi = gmi
        self.group_id = group_id
        self.name = name
        self.avatar_url = avatar_url
        self.callback_url = callback_url
        self.dm_notification = dm_notification

    @property
    def group(self):
        return self.gmi.groups.get(group_id=self.group_id)

    def save(self):
        if self.bot_id is None:
            new_data = BotCreateRequest(self.gmi, self.group_id, self.name,
                                        self.callback_url, self.avatar_url,
                                        self.dm_notification).result
            self._refresh_from_other(new_data)
        else:
            BotsUpdateRequest(self.gmi, self.bot_id, self.group_id, self.name,
                              self.callback_url, self.avatar_url,
                              self.dm_notification)

    def delete(self):
        if self.bot_id is None:
            raise InvalidOperationException(
                'Cannot destroy a bot that isn\'t saved!')
        else:
            BotDestroyRequest(self.gmi, self.bot_id)

    def refresh(self):
        if self.bot_id is None:
            raise InvalidOperationException('This operation is not permitted')
        else:
            raise InvalidOperationException('This is non trivial to implement')

    def post(self, text):
        text, attachments = smart_split_complex_message(text)
        BotPostRequest(self.gmi, self.bot_id, text, attachments)

    @staticmethod
    def get_all(gmi):
        return BotIndexRequest(gmi).result

    @staticmethod
    def get(gmi, bot_id):
        pass

    def __str__(self):
        return self.name + ':' + self.group_id