X Tutup
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,20 @@ python:
- "nightly" # nightly build
install:
- python setup.py install
script:
- pip install "pytest>=5,<6"
- pytest tests/scenario_tests/
- pip install "pytest-asyncio<1"
- pip install "aiohttp>=3,<4"
- pytest tests/scenario_tests_async/
- python setup.py test
script:
# codegen for slack_sdk
- python setup.py codegen
# FIXME: the result can be different depending on OS platforms (e.g., macOS vs Linux)?
# - if git status --porcelain | grep .; then git --no-pager diff; exit 1; fi
# testing without aiohttp
- travis_retry pytest tests/scenario_tests/
- travis_retry pytest tests/slack_sdk_tests/
# testing with aiohttp
- pip install "pytest-asyncio<1" "aiohttp>=3,<4"
- travis_retry pytest tests/scenario_tests_async/
- travis_retry pytest tests/slack_sdk_tests_async/
- export SLACKCLIENT_SKIP_DEPRECATION=1
- travis_retry pytest tests/slack_sdk_tests_legacy/
# run all tests just in case
- travis_retry python setup.py test
94 changes: 93 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
#!/usr/bin/env python
import os
import subprocess
import sys
from glob import glob
from os.path import splitext, basename

Expand All @@ -10,12 +13,98 @@
with open("README.md", "r") as fh:
long_description = fh.read()

here = os.path.abspath(os.path.dirname(__file__))

codegen_dependencies = [
"black==19.10b0",
]

test_dependencies = [
"pytest>=5,<6",
"pytest-asyncio<1",
"pytest-asyncio<1", # for async
"aiohttp>=3,<4", # for async
]


class CodegenCommand(setuptools.Command):
user_options = []

@staticmethod
def status(s):
"""Prints things in bold."""
print("\033[1m{0}\033[0m".format(s))

def initialize_options(self):
pass

def finalize_options(self):
pass

def _run(self, s, command):
try:
self.status(s + "\n" + " ".join(command))
subprocess.check_call(command)
except subprocess.CalledProcessError as error:
sys.exit(error.returncode)

def run(self):
self._run("Installing required dependencies ...",
[sys.executable, "-m", "pip", "install"] + codegen_dependencies)

header = "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" \
"#\n" \
"# *** DO NOT EDIT THIS FILE ***\n" \
"#\n" \
"# 1) Modify slack/web/client.py\n" \
"# 2) Run `python setup.py codegen`\n" \
"#\n" \
"# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" \
"\n"
with open("./src/slack_sdk/web/client.py", "r") as original:
source = original.read()
import re
async_source = header + source
async_source = re.sub(" def ", " async def ", async_source)
async_source = re.sub("from asyncio import Future\n", "", async_source)
async_source = re.sub("return self.api_call\(", "return await self.api_call(", async_source)
async_source = re.sub("-> SlackResponse", "-> AsyncSlackResponse", async_source)
async_source = re.sub(
"from .base_client import BaseClient, SlackResponse",
"from .async_base_client import AsyncBaseClient, AsyncSlackResponse", async_source)
# from slack_sdk import WebClient
async_source = re.sub(
"class WebClient\(BaseClient\):",
"class AsyncWebClient(AsyncBaseClient):", async_source)
async_source = re.sub(
"from slack_sdk import WebClient",
"from slack_sdk.web.async_client import AsyncWebClient", async_source)
async_source = re.sub(
"= WebClient\(",
"= AsyncWebClient(", async_source)
with open('./src/slack_sdk/web/async_client.py', 'w') as output:
output.write(async_source)

legacy_source = header + "from asyncio import Future\n" + source
legacy_source = re.sub("-> SlackResponse", "-> Union[Future, SlackResponse]", legacy_source)
legacy_source = re.sub(
"from .base_client import BaseClient, SlackResponse",
"from .legacy_base_client import LegacyBaseClient, SlackResponse", legacy_source)
legacy_source = re.sub(
"class WebClient\(BaseClient\):",
"class LegacyWebClient(LegacyBaseClient):", legacy_source)
legacy_source = re.sub(
"from slack_sdk import WebClient",
"from slack_sdk.web.legacy_client import LegacyWebClient", legacy_source)
legacy_source = re.sub(
"= WebClient\(",
"= LegacyWebClient(", legacy_source)
with open('./src/slack_sdk/web/legacy_client.py', 'w') as output:
output.write(legacy_source)

self._run("Running black (code formatter) ... ",
[sys.executable, "-m", "black", f"{here}/src"])


setuptools.setup(
name="slack_bolt",
version=__version__,
Expand Down Expand Up @@ -64,4 +153,7 @@
"Operating System :: OS Independent",
],
python_requires='>=3.6',
cmdclass={
"codegen": CodegenCommand,
},
)
15 changes: 15 additions & 0 deletions src/slack/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import logging
from logging import NullHandler

from slack_sdk.rtm import RTMClient # noqa
from slack_sdk.web.async_client import AsyncWebClient # noqa
from slack_sdk.web.legacy_client import LegacyWebClient as WebClient # noqa
from slack_sdk.webhook.async_client import AsyncWebhookClient # noqa
from slack_sdk.webhook.client import WebhookClient # noqa

# Set default logging handler to avoid "No handler found" warnings.
logging.getLogger(__name__).addHandler(NullHandler())

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.web/webhook/rtm")
16 changes: 16 additions & 0 deletions src/slack/deprecation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import os
import warnings


def show_message(old: str, new: str) -> None:
skip_deprecation = os.environ.get(
"SLACKCLIENT_SKIP_DEPRECATION"
) # for unit tests etc.
if skip_deprecation:
return

message = (
f"{old} package is deprecated. Please use {new} package instead. "
"For more info, go to https://slack.dev/python-slack-sdk/v3-migration/"
)
warnings.warn(message)
10 changes: 10 additions & 0 deletions src/slack/errors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from slack_sdk.errors import BotUserAccessError # noqa
from slack_sdk.errors import SlackApiError # noqa
from slack_sdk.errors import SlackClientError # noqa
from slack_sdk.errors import SlackClientNotConnectedError # noqa
from slack_sdk.errors import SlackObjectFormationError # noqa
from slack_sdk.errors import SlackRequestError # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.errors")
Empty file added src/slack/py.typed
Empty file.
6 changes: 6 additions & 0 deletions src/slack/rtm/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from slack_sdk.rtm import RTMClient # noqa
from slack_sdk.web.legacy_client import LegacyWebClient as WebClient # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.web/rtm")
6 changes: 6 additions & 0 deletions src/slack/rtm/client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from slack_sdk.rtm import RTMClient # noqa
from slack_sdk.web.legacy_client import LegacyWebClient as WebClient # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.rtm.client")
5 changes: 5 additions & 0 deletions src/slack/signature/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from slack_sdk.signature import SignatureVerifier # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.signature")
11 changes: 11 additions & 0 deletions src/slack/web/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import slack_sdk.version as slack_version # noqa
from slack import deprecation
from slack_sdk.web.async_client import AsyncSlackResponse # noqa
from slack_sdk.web.async_client import AsyncWebClient # noqa
from slack_sdk.web.internal_utils import _to_0_or_1_if_bool # noqa
from slack_sdk.web.internal_utils import convert_bool_to_0_or_1 # noqa
from slack_sdk.web.internal_utils import get_user_agent # noqa
from slack_sdk.web.legacy_client import LegacyWebClient as WebClient # noqa
from slack_sdk.web.slack_response import SlackResponse # noqa

deprecation.show_message(__name__, "slack_sdk.web")
11 changes: 11 additions & 0 deletions src/slack/web/classes/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from slack_sdk.models import (
BaseObject,
JsonObject,
JsonValidator,
EnumValidator,
) # noqa
from slack_sdk.models import extract_json, show_unknown_key_warning # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.models")
13 changes: 13 additions & 0 deletions src/slack/web/classes/actions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from slack_sdk.models.attachments import AbstractActionSelector # noqa
from slack_sdk.models.attachments import Action # noqa
from slack_sdk.models.attachments import ActionButton # noqa
from slack_sdk.models.attachments import ActionChannelSelector # noqa
from slack_sdk.models.attachments import ActionConversationSelector # noqa
from slack_sdk.models.attachments import ActionExternalSelector # noqa
from slack_sdk.models.attachments import ActionLinkButton # noqa
from slack_sdk.models.attachments import ActionUserSelector # noqa
from slack_sdk.models.dialoags import ActionStaticSelector # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.models.attachments/dialogs")
9 changes: 9 additions & 0 deletions src/slack/web/classes/attachments.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from slack_sdk.models.attachments import Attachment # noqa
from slack_sdk.models.attachments import AttachmentField # noqa
from slack_sdk.models.attachments import BlockAttachment # noqa
from slack_sdk.models.attachments import InteractiveAttachment # noqa
from slack_sdk.models.attachments import SeededColors # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.models.attachments")
13 changes: 13 additions & 0 deletions src/slack/web/classes/blocks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from slack_sdk.models.block_kit import ActionsBlock # noqa
from slack_sdk.models.block_kit import Block # noqa
from slack_sdk.models.block_kit import CallBlock # noqa
from slack_sdk.models.block_kit import ContextBlock # noqa
from slack_sdk.models.block_kit import DividerBlock # noqa
from slack_sdk.models.block_kit import FileBlock # noqa
from slack_sdk.models.block_kit import ImageBlock # noqa
from slack_sdk.models.block_kit import InputBlock # noqa
from slack_sdk.models.block_kit import SectionBlock # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.models.block_kit")
14 changes: 14 additions & 0 deletions src/slack/web/classes/dialog_elements.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from slack_sdk.models.dialoags import AbstractDialogSelector # noqa
from slack_sdk.models.dialoags import DialogChannelSelector # noqa
from slack_sdk.models.dialoags import DialogConversationSelector # noqa
from slack_sdk.models.dialoags import DialogExternalSelector # noqa
from slack_sdk.models.dialoags import DialogStaticSelector # noqa
from slack_sdk.models.dialoags import DialogTextArea # noqa
from slack_sdk.models.dialoags import DialogTextComponent # noqa
from slack_sdk.models.dialoags import DialogTextField # noqa
from slack_sdk.models.dialoags import DialogUserSelector # noqa
from slack_sdk.models.dialoags import TextElementSubtypes # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.models.block_kit")
5 changes: 5 additions & 0 deletions src/slack/web/classes/dialogs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from slack_sdk.models.dialoags import DialogBuilder # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.models.dialogs")
27 changes: 27 additions & 0 deletions src/slack/web/classes/elements.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from slack_sdk.models.block_kit import BlockElement # noqa
from slack_sdk.models.block_kit import ButtonElement # noqa
from slack_sdk.models.block_kit import ChannelMultiSelectElement # noqa
from slack_sdk.models.block_kit import ChannelSelectElement # noqa
from slack_sdk.models.block_kit import CheckboxesElement # noqa
from slack_sdk.models.block_kit import ConversationFilter # noqa
from slack_sdk.models.block_kit import ConversationMultiSelectElement # noqa
from slack_sdk.models.block_kit import ConversationSelectElement # noqa
from slack_sdk.models.block_kit import DatePickerElement # noqa
from slack_sdk.models.block_kit import ExternalDataMultiSelectElement # noqa
from slack_sdk.models.block_kit import ExternalDataSelectElement # noqa
from slack_sdk.models.block_kit import ImageElement # noqa
from slack_sdk.models.block_kit import InputInteractiveElement # noqa
from slack_sdk.models.block_kit import InteractiveElement # noqa
from slack_sdk.models.block_kit import LinkButtonElement # noqa
from slack_sdk.models.block_kit import OverflowMenuElement # noqa
from slack_sdk.models.block_kit import PlainTextInputElement # noqa
from slack_sdk.models.block_kit import RadioButtonsElement # noqa
from slack_sdk.models.block_kit import SelectElement # noqa
from slack_sdk.models.block_kit import StaticMultiSelectElement # noqa
from slack_sdk.models.block_kit import StaticSelectElement # noqa
from slack_sdk.models.block_kit import UserMultiSelectElement # noqa
from slack_sdk.models.block_kit import UserSelectElement # noqa

from slack import deprecation

deprecation.show_message(__name__, "slack_sdk.models.block_kit")
Loading
X Tutup