A tool to send notifications to Mattermost and manage Mattermost channels and users.
Project description
mattermost-tools
This module is a fork of mattermost-notify and mattermost-api-python on pypi
mattermost-notify
Send notifications using a Bot account from your applications to Mattermost. Simple, fast, easy to set up. No fuzz, just works...
Installation
First make sure to set up a Bot account on your Mattermost Server. Follow the Documentation to learn how.
If you have your notify Bot account set up correctly and you have got it's access token you can install the client package using:
# (yep it's in reverse since another project already used the name on PyPi 😅)
pip install mattermost-tools
Then set up the connection using:
# follow the dialog...
mattermost-notify setup
Now you can test your connection by sending a dummy message to your own user account by doing:
mattermost-notify send "my first message" --user your-username --team-name your-team-name
If you set up everything correctly you should have received a message at this point!
Quick Example from Python
The Python API is very straightforward to use. A quick example (after having set up everything at installation) would look like this:
import mattermost_notify as notify
# initialze the connection
notify.wakeup()
# send a message to a channel
notify.notify("This is a test message", channel_name="some_channel")
# you can also upload files in this way
notify.notify("My latest log file", user="your_username", files=["my_pipeline/log.txt"])
Mattermost API bindings
In productive use on a 6k+ users E10 instance at https://mattermost.fsinf.at
- Used to manage channels, users and everything.
- Some api-endpoints are #UNTESTED.
- Some are not handled/#NOT_IMPLEMENTED (yet).
- Some dont seem to make any sense to ever implement at all. Why do they even exist?
- Others may be out of scope (I cannot test E20-stuff)
- Some are not handled/#NOT_IMPLEMENTED (yet).
- Beware: I love to rebase git. :)
Setup
pip3 install --user --upgrade mattermost
Usage
import mattermost
# login
mm = mattermost.MMApi("https://mattermost.example.com")
# alternatively pass your gitlab url for oauth login
# mm = mattermost.MMApi("https://mattermost.example.com", gitlab_url="https://gitlab.example.com")
# you can also provide ssl_verify flag
# mm = mattermost.MMApi("https://mattermost.example.com", ssl_verify=False)
# mm = mattermost.MMApi("https://mattermost.example.com", gitlab_url="https://gitlab.example.com", ssl_verify=True)
mm.login("user@example.com", "my-pw")
# alternatively use a personal-access-token/bot-token.
# mm.login(bearer="my-personal-access-token")
# do stuff (print info about your user)
import pprint
pprint.pprint(mm.get_user())
# do other stuff (print info about an not-existing user)
try:
pprint.pprint(mm.get_user("not-existing-user-id", exc=True))
except mattermost.ApiException as e:
print(e)
# custom endpoint call (get server config)
cfg = mm._get("/v4/config")
# do something (enable plugins)
cfg["PluginSettings"]["Enable"] = True
# custom endpoint call (put server config)
mm._put("/v4/config", data=cfg)
# logout
mm.revoke_user_session()
Websocket usage
import mattermost
import mattermost.ws
# login
mm = mattermost.MMApi("https://mattermost.example.com/api")
mm.login("user@example.com", "my-pw")
# define a websocket handler
def webs_handler(mmws, event_data):
import pprint
pprint.pprint(mmws)
pprint.pprint(event_data)
# connect to websocket and start processing events
mmws = mattermost.ws.MMws(webs_handler, mm, "wss://mattermost.example.com/api/v4/websocket")
To close the websocket connection - there is no way to restart, create a new instance of MMws:
mmws.close_websocket()
Manually calling the API
Some endpoints are not handled (yet). You can manually call these endpoints. Available private functions:
_get(endpoint, raw=False, exc=False)_put(endpoint, data=None, exc=False)_post(endpoint, data=None, multipart_formdata=None, exc=False)_delete(endpoint, data=None, exc=False)
stdin2channel
You can pipe STDIN to a channel:
echo "message" | python3 -m mattermost.stdin2channel https://localhost:8065 'user@example.com' 'my-pw' 'channel_id'This leaks your credentials to everyone on your system! Only use this in trusted dev-envs.
Endpoints
Ordered by https://api.mattermost.com/
- LOGIN/LOGOUT
login (login_id=None, password=None, token=None, bearer=None)logout (**kwargs)
- USERS
create_user() #NOT_IMPLEMENTEDget_users (in_team=None, not_in_team=None, in_channel=None, not_in_channel=None, group_constrained=None, without_team=None, sort=None, **kwargs)get_users_by_ids_list (user_ids_list, **kwargs) #UNTESTEDget_users_by_group_channel_ids_list (group_channel_ids_list, **kwargs) #UNTESTEDget_users_by_usernames_list (usernames_list, **kwargs)search_users() #NOT_IMPLEMENTEDautocomplete_users() #NOT_IMPLEMENTEDget_user_ids_of_known_users() #NOT_IMPLEMENTEDget_total_count_of_users_in_system() #NOT_IMPLEMENTEDget_user (user_id=None, **kwargs)update_user() #NOT_IMPLEMENTED: # use patch_userdeactivate_user() #NOT_IMPLEMENTEDpatch_user (user_id, props=None, **kwargs)update_user_roles() #NOT_IMPLEMENTEDupdate_user_active_status() #NOT_IMPLEMENTEDget_user_profile_image() #NOT_IMPLEMENTEDset_user_profile_image() #NOT_IMPLEMENTEDdelete_user_profile_image() #NOT_IMPLEMENTEDget_user_default_profile_image() #NOT_IMPLEMENTEDget_user_by_username (username, **kwargs)reset_user_password() #NOT_IMPLEMENTEDupdate_user_mfa() #NOT_IMPLEMENTEDgenerate_user_mfa_secret() #NOT_IMPLEMENTEDdemote_a_user (user_id, **kwargs)promote_a_guest (user_id, **kwargs)check_user_mfa() #NOT_IMPLEMENTEDupdate_user_password() #NOT_IMPLEMENTEDsend_user_password_reset_mail() #NOT_IMPLEMENTEDget_user_by_email() #NOT_IMPLEMENTEDget_user_sessions (user_id=None, **kwargs)revoke_user_session (user_id=None, session_id=None, **kwargs)revoke_all_user_sessions() #NOT_IMPLEMENTEDattach_mobile_device_to_user_session() #NOT_IMPLEMENTEDget_user_audit() #NOT_IMPLEMENTEDadmin_verify_user_email_() #NOT_IMPLEMENTEDverify_user_email_() #NOT_IMPLEMENTEDsend_user_email_verification() #NOT_IMPLEMENTEDswitch_user_login_method() #NOT_IMPLEMENTEDcreate_user_access_token() #NOT_IMPLEMENTEDget_user_access_tokens() #NOT_IMPLEMENTEDrevoke_user_access_token() #NOT_IMPLEMENTEDget_user_access_token() #NOT_IMPLEMENTEDdisable_user_access_token() #NOT_IMPLEMENTEDenable_user_access_token() #NOT_IMPLEMENTEDsearch_user_access_tokens() #NOT_IMPLEMENTEDupdate_user_auth_method() #NOT_IMPLEMENTEDrecord_user_action_custom_tos() #NOT_IMPLEMENTEDfetch_user_latest_accepted_custom_tos() #NOT_IMPLEMENTEDrevoke_all_users_all_sessions() #NOT_IMPLEMENTED #MM, ARE YOU INSANE?!
- BOTS #NOT_IMPLEMENTED
- TEAMS
create_team() #NOT_IMPLEMENTEDget_teams (include_total_count=None, **kwargs)get_team (team_id, **kwargs)update_team() #NOT_IMPLEMENTEDdelete_team() #NOT_IMPLEMENTEDpatch_team() #NOT_IMPLEMENTEDupdate_team_privacy() #NOT_IMPLEMENTEDrestore_team() #NOT_IMPLEMENTEDget_team_by_name() #NOT_IMPLEMENTEDsearch_teams() #NOT_IMPLEMENTEDexists_team() #NOT_IMPLEMENTEDget_teams_for_user(user_id, include_total_count, **kwargs)get_team_members (team_id, **kwargs)add_user_to_team (team_id, user_id, **kwargs)add_user_to_team_from_invite() #NOT_IMPLEMENTEDadd_multiple_users_to_team() #NOT_IMPLEMENTED WHY?!get_team_members_for_a_user() #NOT_IMPLEMENTED WHY NOT NAMING STUFF USEFULLY?!get_team_member (team_id, user_id, **kwargs)remove_user_from_team (team_id, user_id, **kwargs)get_team_members_by_id() #NOT_IMPLEMENTEDget_team_stats() #NOT_IMPLEMENTEDregenerate_team_invite_id() #NOT_IMPLEMENTEDget_team_icon() #NOT_IMPLEMENTEDset_team_icon() #NOT_IMPLEMENTEDremove_team_icon() #NOT_IMPLEMENTEDupdate_team_members_roles() #NOT_IMPLEMENTEDupdate_team_members_scheme_roles (team_id, user_id, props, **kwargs)get_team_unreads_for_user() #NOT_IMPLEMENTEDget_team_unreads() #NOT_IMPLEMENTEDinvite_users_to_team_by_email() #NOT_IMPLEMENTEDinvite_guests_to_team_by_email (team_id, guest_email, channels, message, **kwargs)invalidate_invites_to_team_by_email() #NOT_IMPLEMENTEDimport_team() #NOT_IMPLEMENTEDget_team_invite_info() #NOT_IMPLEMENTEDset_team_scheme() #NOT_IMPLEMENTEDget_team_members_minus_group_members() #NOT_IMPLEMENTEDget_team_channels (team_id, **kwargs) #This belongs here, not to channels!
- CHANNELS
get_all_channels() #NOT_IMPLEMENTED NOT USEFUL AT ALL!create_channel (team_id, name, display_name, purpose=None, header=None, chan_type="O", **kwargs)create_dm_channel_with (other_user_id, **kwargs)create_group_channel_with (other_user_ids_list, **kwargs) #UNTESTEDsearch_all_private_and_public_channels() #NOT_IMPLEMENTEDsearch_all_users_group_channels() #NOT_IMPLEMENTEDget_team_channels_by_id() #NOT_IMPLEMENTEDget_timezones_of_users_in_channel() #NOT_IMPLEMENTEDget_channel (channel_id, **kwargs)update_channel (channel_id, props, **kwargs)patch_channel (channel_id, props, **kwargs)get_channel_posts_pinned (channel_id, **kwargs)search_channel (team_id, term, **kwargs)get_channel_by_name (team_id, channel_name, include_deleted=None, **kwargs)get_channel_members (channel_id, **kwargs)add_user_to_channel (channel_id, user_id, **kwargs)get_channel_member (channel_id, user_id, **kwargs)remove_user_from_channel (channel_id, user_id, **kwargs)update_channel_members_scheme_roles (channel_id, user_id, props, **kwargs)get_channel_memberships_for_user (user_id, team_id, **kwargs)get_channels_for_user (user_id, team_id, **kwargs)
- POSTS
create_post (channel_id, message, props=None, filepaths=None, root_id=None, **kwargs)create_ephemeral_post (channel_id, message, user_id, **kwargs)get_post (post_id, **kwargs)delete_post (post_id, **kwargs)patch_post (post_id, message=None, is_pinned=None, props=None, **kwargs)get_posts_for_channel (channel_id, **kwargs)
- FILES
upload_file (channel_id, filepath, **kwargs)get_file (file_id, **kwargs)
- PREFERENCES #NOT_IMPLEMENTED
- STATUS #NOT_IMPLEMENTED
- EMOJI #NOT_IMPLEMENTED
- REACTIONS
create_reaction (user_id, post_id, emoji_name, **kwargs)
- WEBHOOKS
create_outgoing_hook (team_id, display_name, trigger_words, callback_urls, channel_id=None, description=None, trigger_when=0, **kwargs)list_outgoing_hooks (team_id, channel_id=None, **kwargs)delete_outgoing_hook (hook_id, **kwargs)
- COMMANDS
create_slash_command (team_id, trigger, url, **kwargs)list_custom_slash_commands_for_team (team_id, **kwargs)update_slash_command (data, **kwargs)delete_slash_command (command_id, **kwargs)
- OPENGRAPH #NOT_IMPLEMENTED
- SYSTEM #NOT_IMPLEMENTED
- BRAND #NOT_IMPLEMENTED
- OAUTH #NOT_IMPLEMENTED
- SAML #NOT_IMPLEMENTED
- LDAP #NOT_IMPLEMENTED
- GROUPS #NOT_IMPLEMENTED
- COMPLIANCE #NOT_IMPLEMENTED
- CLUSTER #NOT_IMPLEMENTED
- ELASTICSEARCH #NOT_IMPLEMENTED
- BLEVE #NOT_IMPLEMENTED
- DATARETENTION #NOT_IMPLEMENTED
- JOBS #NOT_IMPLEMENTED
- PLUGINS #NOT_IMPLEMENTED
- ROLES #NOT_IMPLEMENTED
- SCHEMES #NOT_IMPLEMENTED
- INTEGRATION_ACTIONS
open_dialog (trigger_id, response_url, dialog, **kwargs)
- TERMS_OF_SERVICE #NOT_IMPLEMENTED
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mattermost_tools-0.0.4.tar.gz.
File metadata
- Download URL: mattermost_tools-0.0.4.tar.gz
- Upload date:
- Size: 27.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
381b9e1c9798e365f6cc5309268f4e0fdef944942b9f705d76f04ddb5004bd52
|
|
| MD5 |
89b38b9505177e754f9d8ac7e95687e0
|
|
| BLAKE2b-256 |
a2ec7ef16c1ff2a742644fd4e4498f1b71203819e59f02ebdffa4aea24fb8d52
|
Provenance
The following attestation bundles were made for mattermost_tools-0.0.4.tar.gz:
Publisher:
python-publish.yml on neil-karania/mattermost-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mattermost_tools-0.0.4.tar.gz -
Subject digest:
381b9e1c9798e365f6cc5309268f4e0fdef944942b9f705d76f04ddb5004bd52 - Sigstore transparency entry: 236318483
- Sigstore integration time:
-
Permalink:
neil-karania/mattermost-tools@44b6c8bfb568b83a5c497f77e8f5dc4cc096c7d9 -
Branch / Tag:
refs/tags/0.0.4 - Owner: https://github.com/neil-karania
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@44b6c8bfb568b83a5c497f77e8f5dc4cc096c7d9 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mattermost_tools-0.0.4-py3-none-any.whl.
File metadata
- Download URL: mattermost_tools-0.0.4-py3-none-any.whl
- Upload date:
- Size: 25.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83e521492cf8ad17bbb52b09ad8083f6d33f872066356a94111693331d90fe5c
|
|
| MD5 |
8b0185ff610242e6cdc097c1534ac6cb
|
|
| BLAKE2b-256 |
4d47b0c9bd4c5f3fea5cc2c894b1d2ef523a51d566a9d7a6d690ceaaf2ef43f3
|
Provenance
The following attestation bundles were made for mattermost_tools-0.0.4-py3-none-any.whl:
Publisher:
python-publish.yml on neil-karania/mattermost-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mattermost_tools-0.0.4-py3-none-any.whl -
Subject digest:
83e521492cf8ad17bbb52b09ad8083f6d33f872066356a94111693331d90fe5c - Sigstore transparency entry: 236318484
- Sigstore integration time:
-
Permalink:
neil-karania/mattermost-tools@44b6c8bfb568b83a5c497f77e8f5dc4cc096c7d9 -
Branch / Tag:
refs/tags/0.0.4 - Owner: https://github.com/neil-karania
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@44b6c8bfb568b83a5c497f77e8f5dc4cc096c7d9 -
Trigger Event:
release
-
Statement type: