summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-flack.spec384
-rw-r--r--sources1
3 files changed, 386 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..ae60871 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/flack-1.3.7.tar.gz
diff --git a/python-flack.spec b/python-flack.spec
new file mode 100644
index 0000000..7b102d0
--- /dev/null
+++ b/python-flack.spec
@@ -0,0 +1,384 @@
+%global _empty_manifest_terminate_build 0
+Name: python-flack
+Version: 1.3.7
+Release: 1
+Summary: Slack integration for flask
+License: MIT
+URL: https://github.com/carlskeide/flack
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/5c/3e/93805197ccb45c5ec7853c933d99388c393200ff3299d5dd8bd0c778de63/flack-1.3.7.tar.gz
+BuildArch: noarch
+
+
+%description
+# Flack
+*Integrate slack commands and actions with flask*
+
+![Python Package](https://github.com/carlskeide/flack/workflows/Python%20package/badge.svg)
+
+## Setup
+Either initialize the app immediately:
+```
+from flack import Flack
+flack = Flack(app)
+```
+
+Or use a deferred initialization:
+```
+from flack import Flack
+flack = Flack()
+
+def get_app():
+ # Create your flask application.
+ flack.init_app(app)
+```
+
+### Configuration
+- `FLACK_TOKEN` Must match the secret generated by Slack when creation your app or integration, will be verified for every request.
+- `FLACK_URL_PREFIX` URL namespace for the built-in api endpoints.
+- `FLACK_DEFAULT_NAME` Used for any response whera as_user is not explicitly set.
+
+
+## Slack event handlers
+
+### Triggers
+*API Endpoint: `/webhook`*
+
+The most basic type of interations, webhooks invoked by trigger words in a channel.
+```
+@flack.trigger("!heart", as_user="Cupid")
+def heart(text, user):
+ return "{} :heart: {}".format(user.name, text)
+````
+Provides:
+- `text` Any message after (but not including) the trigger word, may be an empty string.
+- `user` The calling user, see: `flack.CALLER`.
+
+### Commmand
+*API Endpoint: `/command`*
+
+Slash-commands, may respond to the user privately or interact with the channel in which it was executed.
+```
+@flack.command("/weather")
+def weather(text, user, channel):
+ return "The weather in {} is currently: {}".format(text, get_weather(text))
+````
+Provides:
+- `text` Any message after the trigger word, may be an empty string.
+- `user` The calling user, see: `flack.CALLER`.
+- `channel` The active channel or conversation, see: `flack.CHANNEL`.
+
+### Action
+*API Endpoint: `/action`*
+
+Action buttons included in advanced messages (see: `flack.message.Action`).
+```
+@flack.action("remind")
+def remind(value, ts, instance, user, channel):
+ remind_user(user)
+````
+Provides:
+- `value` Generally the same as the action name.
+- `ts`: The timestamp of the originating message, used for modifying it through the API.
+- `callback`: The Callback ID of the originating message attachment, see: `flack.message.Attachment`
+- `user` The interacting user, see: `flack.CALLER`.
+- `channel` The originating channel, see: `flack.CHANNEL`.
+
+## Responding
+TODO: Document `flack.message` objects
+
+## OAuth
+While not necessary for basic usage, Flack has support for registering an OAuth application.
+
+### Configuration
+- `FLACK_CLIENT_ID` Provided by Slack when creating an app.
+- `FLACK_CLIENT_SECRET` Provided by Slack when creating an app.
+- `FLACK_SCOPE` Slack API scope to request (default is `commands,users:read,channels:read,chat:write:bot`).
+
+### Usage
+Generate the Slack button HTML snippet and expose it to the client wherever you like with `flack.oauth.render_button()`
+
+Then create a view that can receive the generated credentials from Slack. Make sure the url matches what you provided as the "Redirect URL" when creating the Slack app.
+```
+import flack.oauth
+
+@app.route('/callback')
+@flack.oauth.callback
+def callback(credentials):
+ # Make sure to store the credentials somewhere safe.
+ your_datastore.write({
+ "team": credentials.team_id,
+ "token": credentials.access_token,
+ "scope": credentials.scope
+ })
+ # And make sure to inform the client everything went fine
+ return "It worked!"
+```
+
+The credentials object is a namedtuple containing team_id, access_token, and scope.
+
+%package -n python3-flack
+Summary: Slack integration for flask
+Provides: python-flack
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-flack
+# Flack
+*Integrate slack commands and actions with flask*
+
+![Python Package](https://github.com/carlskeide/flack/workflows/Python%20package/badge.svg)
+
+## Setup
+Either initialize the app immediately:
+```
+from flack import Flack
+flack = Flack(app)
+```
+
+Or use a deferred initialization:
+```
+from flack import Flack
+flack = Flack()
+
+def get_app():
+ # Create your flask application.
+ flack.init_app(app)
+```
+
+### Configuration
+- `FLACK_TOKEN` Must match the secret generated by Slack when creation your app or integration, will be verified for every request.
+- `FLACK_URL_PREFIX` URL namespace for the built-in api endpoints.
+- `FLACK_DEFAULT_NAME` Used for any response whera as_user is not explicitly set.
+
+
+## Slack event handlers
+
+### Triggers
+*API Endpoint: `/webhook`*
+
+The most basic type of interations, webhooks invoked by trigger words in a channel.
+```
+@flack.trigger("!heart", as_user="Cupid")
+def heart(text, user):
+ return "{} :heart: {}".format(user.name, text)
+````
+Provides:
+- `text` Any message after (but not including) the trigger word, may be an empty string.
+- `user` The calling user, see: `flack.CALLER`.
+
+### Commmand
+*API Endpoint: `/command`*
+
+Slash-commands, may respond to the user privately or interact with the channel in which it was executed.
+```
+@flack.command("/weather")
+def weather(text, user, channel):
+ return "The weather in {} is currently: {}".format(text, get_weather(text))
+````
+Provides:
+- `text` Any message after the trigger word, may be an empty string.
+- `user` The calling user, see: `flack.CALLER`.
+- `channel` The active channel or conversation, see: `flack.CHANNEL`.
+
+### Action
+*API Endpoint: `/action`*
+
+Action buttons included in advanced messages (see: `flack.message.Action`).
+```
+@flack.action("remind")
+def remind(value, ts, instance, user, channel):
+ remind_user(user)
+````
+Provides:
+- `value` Generally the same as the action name.
+- `ts`: The timestamp of the originating message, used for modifying it through the API.
+- `callback`: The Callback ID of the originating message attachment, see: `flack.message.Attachment`
+- `user` The interacting user, see: `flack.CALLER`.
+- `channel` The originating channel, see: `flack.CHANNEL`.
+
+## Responding
+TODO: Document `flack.message` objects
+
+## OAuth
+While not necessary for basic usage, Flack has support for registering an OAuth application.
+
+### Configuration
+- `FLACK_CLIENT_ID` Provided by Slack when creating an app.
+- `FLACK_CLIENT_SECRET` Provided by Slack when creating an app.
+- `FLACK_SCOPE` Slack API scope to request (default is `commands,users:read,channels:read,chat:write:bot`).
+
+### Usage
+Generate the Slack button HTML snippet and expose it to the client wherever you like with `flack.oauth.render_button()`
+
+Then create a view that can receive the generated credentials from Slack. Make sure the url matches what you provided as the "Redirect URL" when creating the Slack app.
+```
+import flack.oauth
+
+@app.route('/callback')
+@flack.oauth.callback
+def callback(credentials):
+ # Make sure to store the credentials somewhere safe.
+ your_datastore.write({
+ "team": credentials.team_id,
+ "token": credentials.access_token,
+ "scope": credentials.scope
+ })
+ # And make sure to inform the client everything went fine
+ return "It worked!"
+```
+
+The credentials object is a namedtuple containing team_id, access_token, and scope.
+
+%package help
+Summary: Development documents and examples for flack
+Provides: python3-flack-doc
+%description help
+# Flack
+*Integrate slack commands and actions with flask*
+
+![Python Package](https://github.com/carlskeide/flack/workflows/Python%20package/badge.svg)
+
+## Setup
+Either initialize the app immediately:
+```
+from flack import Flack
+flack = Flack(app)
+```
+
+Or use a deferred initialization:
+```
+from flack import Flack
+flack = Flack()
+
+def get_app():
+ # Create your flask application.
+ flack.init_app(app)
+```
+
+### Configuration
+- `FLACK_TOKEN` Must match the secret generated by Slack when creation your app or integration, will be verified for every request.
+- `FLACK_URL_PREFIX` URL namespace for the built-in api endpoints.
+- `FLACK_DEFAULT_NAME` Used for any response whera as_user is not explicitly set.
+
+
+## Slack event handlers
+
+### Triggers
+*API Endpoint: `/webhook`*
+
+The most basic type of interations, webhooks invoked by trigger words in a channel.
+```
+@flack.trigger("!heart", as_user="Cupid")
+def heart(text, user):
+ return "{} :heart: {}".format(user.name, text)
+````
+Provides:
+- `text` Any message after (but not including) the trigger word, may be an empty string.
+- `user` The calling user, see: `flack.CALLER`.
+
+### Commmand
+*API Endpoint: `/command`*
+
+Slash-commands, may respond to the user privately or interact with the channel in which it was executed.
+```
+@flack.command("/weather")
+def weather(text, user, channel):
+ return "The weather in {} is currently: {}".format(text, get_weather(text))
+````
+Provides:
+- `text` Any message after the trigger word, may be an empty string.
+- `user` The calling user, see: `flack.CALLER`.
+- `channel` The active channel or conversation, see: `flack.CHANNEL`.
+
+### Action
+*API Endpoint: `/action`*
+
+Action buttons included in advanced messages (see: `flack.message.Action`).
+```
+@flack.action("remind")
+def remind(value, ts, instance, user, channel):
+ remind_user(user)
+````
+Provides:
+- `value` Generally the same as the action name.
+- `ts`: The timestamp of the originating message, used for modifying it through the API.
+- `callback`: The Callback ID of the originating message attachment, see: `flack.message.Attachment`
+- `user` The interacting user, see: `flack.CALLER`.
+- `channel` The originating channel, see: `flack.CHANNEL`.
+
+## Responding
+TODO: Document `flack.message` objects
+
+## OAuth
+While not necessary for basic usage, Flack has support for registering an OAuth application.
+
+### Configuration
+- `FLACK_CLIENT_ID` Provided by Slack when creating an app.
+- `FLACK_CLIENT_SECRET` Provided by Slack when creating an app.
+- `FLACK_SCOPE` Slack API scope to request (default is `commands,users:read,channels:read,chat:write:bot`).
+
+### Usage
+Generate the Slack button HTML snippet and expose it to the client wherever you like with `flack.oauth.render_button()`
+
+Then create a view that can receive the generated credentials from Slack. Make sure the url matches what you provided as the "Redirect URL" when creating the Slack app.
+```
+import flack.oauth
+
+@app.route('/callback')
+@flack.oauth.callback
+def callback(credentials):
+ # Make sure to store the credentials somewhere safe.
+ your_datastore.write({
+ "team": credentials.team_id,
+ "token": credentials.access_token,
+ "scope": credentials.scope
+ })
+ # And make sure to inform the client everything went fine
+ return "It worked!"
+```
+
+The credentials object is a namedtuple containing team_id, access_token, and scope.
+
+%prep
+%autosetup -n flack-1.3.7
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-flack -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Thu May 18 2023 Python_Bot <Python_Bot@openeuler.org> - 1.3.7-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..09182f3
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+b9a01a7ffb401e0c17a132e17d4fc149 flack-1.3.7.tar.gz