{"id":13936683,"url":"https://github.com/moira-alert/python-moira-client","last_synced_at":"2026-03-03T13:06:50.603Z","repository":{"id":12427419,"uuid":"71775652","full_name":"moira-alert/python-moira-client","owner":"moira-alert","description":"Python client for Moira","archived":false,"fork":false,"pushed_at":"2025-03-03T09:24:29.000Z","size":136,"stargazers_count":11,"open_issues_count":2,"forks_count":6,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-27T06:21:53.754Z","etag":null,"topics":["alerting","graphite","moira","monitoring"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/moira-alert.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-24T09:56:51.000Z","updated_at":"2025-03-03T09:20:39.000Z","dependencies_parsed_at":"2023-09-22T16:55:42.165Z","dependency_job_id":"2260477d-50e3-46fb-8567-a5680dc3b0e0","html_url":"https://github.com/moira-alert/python-moira-client","commit_stats":{"total_commits":52,"total_committers":13,"mean_commits":4.0,"dds":0.6153846153846154,"last_synced_commit":"6f36e5e4ac42df8a2512ea0b637b5112edab6671"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moira-alert%2Fpython-moira-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moira-alert%2Fpython-moira-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moira-alert%2Fpython-moira-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moira-alert%2Fpython-moira-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moira-alert","download_url":"https://codeload.github.com/moira-alert/python-moira-client/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248480485,"owners_count":21110935,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alerting","graphite","moira","monitoring"],"created_at":"2024-08-07T23:02:54.565Z","updated_at":"2026-03-03T13:06:45.585Z","avatar_url":"https://github.com/moira-alert.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/moira-alert/python-moira-client.svg?branch=master)](https://travis-ci.org/moira-alert/python-moira-client)\n\n# Moira Client\n\nIf you're new here, better check out our main [README](https://github.com/moira-alert/moira/blob/master/README.md).\n\nPython client for Moira.\n\n# Installation\n\n```\npip install moira-python-client\n```\n\n# Getting started\n\nInitialize Moira client:\n```\nfrom moira_client import Moira\n\nmoira = Moira('http://localhost:8888/api/')\n```\n\n## Triggers\n\n### Create new trigger\n```\nfrom moira_client.models.trigger import STATE_ERROR\n\ntrigger = moira.trigger.create(\n    id='service_trigger_name',\n    name='Trigger name',\n    tags=['service'],\n    targets=['prefix.service.*.postfix'],\n    warn_value=300,\n    error_value=600,\n    desc='my trigger',\n    ttl_state=STATE_ERROR\n)\n\ntrigger.disable_day('Tue')\ntrigger.save()\nprint(trigger.id)\n```\n\n\u003e **Note:** id parameter is not required but highly recommended for large production solutions \u003cbr\u003e\n\u003e (e.q. fetch_by_id will work faster than is_exist).\n\u003e If parameter is not specified, random trigger guid will be generated.\n\n### Update triggers\nTurn off all triggers for Monday.\n```\ntriggers = moira.trigger.fetch_all()\nfor trigger in triggers:\n    trigger.disable_day('Mon')\n    trigger.update()\n```\n\n### Delete trigger\n```\ntrigger = moira.trigger.fetch_by_id('bb1a8514-128b-406e-bec3-25e94153ab30')\nmoira.trigger.delete(trigger.id)\n```\n\n### Check whether trigger exists or not (manually)\n```\ntrigger = moira.trigger.create(\n    name='service',\n    targets=['service.rps'],\n    tags=['ops']\n)\n\nif not moira.trigger.is_exist(trigger):\n    trigger.save()\n```\n\n### Get non existent triggers\n```\ntrigger1 = moira.trigger.create(\n    name='service',\n    targets=['service.rps'],\n    tags=['ops']\n)\n\ntrigger2 = moira.trigger.create(\n    name='site',\n    targets=['site.rps'],\n    tags=['ops']\n)\n\ntriggers = [trigger1, trigger2]\n\nnon_existent_triggers = moira.trigger.get_non_existent(triggers)\n```\n\n## Subscription\n\n### Create subscription\n```\nsubscription = moira.subscription.create(\n    contacts=['79ac9de2-a3b3-4f94-b3ea-74f6f4094fd2'],\n    tags=['tag']\n)\nsubscription.save()\n```\n\n### Delete subscription\nDelete all subscriptions\n```\nsubscriptions = moira.subscription.fetch_all()\nfor subscription in subscriptions:\n    moira.subscription.delete(subscription.id)\n```\n\n## Contact\n\n### Get all contacts\n```\ncontacts = moira.contact.fetch_all()\nfor contact in contacts:\n    print(contact.id)\n```\n\n### Get contact id by type and value\n```\ncontact_id = moira.contact.get_id(type='slack', value='#err')\nprint(contact_id)\n```\n\n## Team\n\n### Get all teams\n```python\nteams = moira.team.get_all()\n```\n\n### Create a new team\n```python\nfrom moira_client.models.team import TeamModel\n\nteam = TeamModel(\n    description=\"Team that holds all members of infrastructure division\",\n    name=\"Infrastructure Team\",\n)\n\nsaved_team = moira.team.create(team)\n```\n\n### Delete a team\n```python\nteam_id = \"d5d98eb3-ee18-4f75-9364-244f67e23b54\"\n\ndeleted_team = moira.team.delete(team_id)\n```\n\n### Get a team by ID\n```python\nteam_id = \"d5d98eb3-ee18-4f75-9364-244f67e23b54\"\n\nteam = moira.team.get(team_id)\n```\n\n### Update existing team\n```python\nfrom moira_client.models.team import TeamModel\n\nteam_id = \"d5d98eb3-ee18-4f75-9364-244f67e23b54\"\nteam = TeamModel(\n    description=\"Team that holds all members of infrastructure division\",\n    name=\"Infrastructure Team\",\n)\n\nupdated_team = moira.team.update(team_id, team)\n```\n\n### Team Settings\n\n#### Get team settings\n```python\nteam_id = \"d5d98eb3-ee18-4f75-9364-244f67e23b54\"\n\nsettings = moira.team.settings.get(team_id)\n```\n\n### Team User\n\n#### Get users of a team\n\n```python\nteam_id = \"d5d98eb3-ee18-4f75-9364-244f67e23b54\"\n\nusers = moira.team.user.get(team_id)\n```\n\n#### Add users to a team\n\n```python\nfrom moira_client.models.team.user import TeamMembers\n\nteam_id = \"d5d98eb3-ee18-4f75-9364-244f67e23b54\"\nusers_to_add = TeamMembers(usernames=[\"anonymous\", ])\n\nusers = moira.team.user.add(team_id, users_to_add)\n```\n\n#### Set users of a team\n\n```python\nfrom moira_client.models.team.user import TeamMembers\n\nteam_id = \"d5d98eb3-ee18-4f75-9364-244f67e23b54\"\nusers_to_set = TeamMembers(usernames=[\"anonymous\", ])\n\nusers = moira.team.user.set(team_id, users_to_set)\n```\n\n#### Delete a user from a team\n\n```python\nteam_id = \"d5d98eb3-ee18-4f75-9364-244f67e23b54\"\nteam_user_id = \"anonymous\"\n\nusers = moira.team.user.delete(team_id, team_user_id)\n```\n\n### Team Subscription\n\n#### Create a new team subscription\n\n```python\nfrom moira_client.models.subscription import SubscriptionModel\n\nteam_id = \"d5d98eb3-ee18-4f75-9364-244f67e23b54\"\nsubscription_to_create = SubscriptionModel(\n    any_tags=False,\n    contacts=[\n        \"acd2db98-1659-4a2f-b227-52d71f6e3ba1\"\n    ],\n    enabled=True,\n    ignore_recoverings=False,\n    ignore_warnings=False,\n    plotting={\n        \"enabled\": True,\n        \"theme\": \"dark\"\n    },\n    sched={\n        \"days\": [\n            {\n                \"enabled\": True,\n                \"name\": \"Mon\"\n            }\n        ],\n        \"endOffset\": 1439,\n        \"startOffset\": 0,\n        \"tzOffset\": -60\n    },\n    tags=[\n        \"server\",\n        \"cpu\"\n    ],\n    throttling=False,\n    user=\"\",\n)\n\nsubscription = moira.team.subscription.create(team_id, subscription_to_create)\n```\n\n### Team Contact\n\n#### Create a new team contact\n\n```python\nfrom moira_client.models.contact import Contact\n\nteam_id = \"d5d98eb3-ee18-4f75-9364-244f67e23b54\"\ncontact_to_create = Contact(\n    name=\"Mail Alerts\",\n    team_id=team_id,\n    type=\"mail\",\n    user=\"\",\n    value=\"devops@example.com\",\n)\n\ncontact = moira.team.contact.create(team_id, contact_to_create)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoira-alert%2Fpython-moira-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoira-alert%2Fpython-moira-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoira-alert%2Fpython-moira-client/lists"}