{"id":15049993,"url":"https://github.com/nchekwa/ansible-semaphore-api","last_synced_at":"2025-06-10T22:33:59.465Z","repository":{"id":210340250,"uuid":"726332535","full_name":"nchekwa/ansible-semaphore-api","owner":"nchekwa","description":"Ansible Semaphore Python API Lib","archived":false,"fork":false,"pushed_at":"2025-04-09T03:49:35.000Z","size":1666,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-10T02:13:34.337Z","etag":null,"topics":["ansible","ansible-semaphore","api","openapi-generator","python","semui"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/semaphore-api/","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/nchekwa.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2023-12-02T04:28:00.000Z","updated_at":"2025-04-09T03:49:39.000Z","dependencies_parsed_at":"2023-12-02T05:38:05.433Z","dependency_job_id":"1a168098-402a-4d31-b378-e0c5dd94dc09","html_url":"https://github.com/nchekwa/ansible-semaphore-api","commit_stats":null,"previous_names":["nchekwa/ansible-semaphore-api"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nchekwa%2Fansible-semaphore-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nchekwa%2Fansible-semaphore-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nchekwa%2Fansible-semaphore-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nchekwa%2Fansible-semaphore-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nchekwa","download_url":"https://codeload.github.com/nchekwa/ansible-semaphore-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248142902,"owners_count":21054671,"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":["ansible","ansible-semaphore","api","openapi-generator","python","semui"],"created_at":"2024-09-24T21:24:08.262Z","updated_at":"2025-04-10T02:13:43.501Z","avatar_url":"https://github.com/nchekwa.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ansible-semaphore-api\n[![Semaphore Check Version](https://github.com/nchekwa/ansible-semaphore-api/actions/workflows/check-version.yml/badge.svg)](https://github.com/nchekwa/ansible-semaphore-api/actions/workflows/check-version.yml)\n[![OpenAPI](https://github.com/nchekwa/ansible-semaphore-api/actions/workflows/openapi-generator.yml/badge.svg)](https://github.com/nchekwa/ansible-semaphore-api/actions/workflows/openapi-generator.yml)\n\n[Ansible Semaphore](https://www.ansible-semaphore.com/) Python API Lib \u003cbr\u003e \n\n\n\u003cbr\u003e\n\n![PyPi](https://pypi.org/static/images/logo-small.2a411bc6.svg) \n```bash\npip install semaphore-api\n```\n\n-or- manual installation:\n```bash\nSEMAPHORE_API_VERSION=$(curl -s https://api.github.com/repos/nchekwa/ansible-semaphore-api/releases/latest | jq -r '.name' | sed 's/^v//')\necho $SEMAPHORE_API_VERSION\ncurl -LJOs https://github.com/nchekwa/ansible-semaphore-api/raw/main/dist/semaphore_api-$SEMAPHORE_API_VERSION-py3-none-any.whl\npip install semaphore_api-$SEMAPHORE_API_VERSION-py3-none-any.whl\n```\n\n\n# Example:\n## Generate token based on user credentials:\n\n```python\nfrom semaphore_api.configuration import Configuration\nfrom semaphore_api.api.authentication_api import AuthenticationApi\nfrom semaphore_api.api_client import ApiClient\nfrom semaphore_api.api.projects_api import ProjectsApi\nfrom semaphore_api.models.login import Login\n\nfrom semaphore_api.models.api_token import APIToken\nfrom semaphore_api.api_response import ApiResponse\nfrom semaphore_api.api.user_api import UserApi\n\n\nhost = \"127.0.0.1\"\nport=\"3000\"\nprotocol=\"http\"\nusername=\"admin\"\npassword=\"admin\"\n\nconfiguration = Configuration(\n    host = f\"{protocol}://{host}:{port}/api\",\n)\napi_client = ApiClient(configuration)\napi_instance = AuthenticationApi(api_client)\nlogin_body = Login(auth=username, password=password)\n\n# Parse login-reponse\nlogin:ApiResponse = api_instance.auth_login_post_with_http_info(login_body)\nprint(f\"login -\u003e {type(login)} -\u003e {login}\")\n\n# Get Cookie from login-reponse\napi_cookie = login.headers['Set-Cookie']\nprint(f\"api_cookie -\u003e {type(api_cookie)} -\u003e {api_cookie}\")\n\n# Set Cookie to API Client\napi_client.cookie = api_cookie\n\n# Example 1: Get projects based on Cookie\nprojects_get       = ProjectsApi(api_client).projects_get()\nprint(f\"projects_get -\u003e {type(projects_get)} -\u003e {projects_get}\")\n\n# Example 2: Create Token\nuser_tokens_post:APIToken = UserApi(api_client).user_tokens_post()\nprint(f\"user_tokens_post -\u003e {type(user_tokens_post)} -\u003e {user_tokens_post}\")\n\n# Example 3: Delete Token\nuser_tokens_api_token_id_delete:APIToken = UserApi(api_client).user_tokens_api_token_id_delete(api_token_id=user_tokens_post.id)\nprint(f\"user_tokens_api_token_id_delete -\u003e {type(user_tokens_api_token_id_delete)} -\u003e {user_tokens_api_token_id_delete}\")\n\n# Example 4: Get List of all tokens\nuser_tokens_get = AuthenticationApi(api_client).user_tokens_get()\nprint(f\"user_tokens_get -\u003e {type(user_tokens_get)} -\u003e {user_tokens_get}\")\n\n```\n\nResponse:\n```text\nlogin -\u003e \u003cclass 'semaphore_api.api_response.ApiResponse'\u003e -\u003e status_code=204 headers={'Content-Type': 'application/json', 'Set-Cookie': 'semaphore=MTcwMTkyNjcwN3xGRmtnNEVNRnJFUEg5cThLTGlnUVFkZEJnZHY4Y3BlQno0TGNmbzNhTEVXMGZHdi1aWkQ0TmgwRmZkNTlyV09TYkU3WlhmZV9CRXpCczBpc1pwZkd2dGc9fIe8S1uDxjr2z5DjtAY2TDGwTeS4M44usYYhH7iSRpj5; Path=/', 'Date': 'Thu, 07 Dec 2023 05:25:07 GMT'} data=None raw_data=b''\n\napi_cookie -\u003e \u003cclass 'str'\u003e -\u003e semaphore=MTcwMTkyNjcwN3xGRmtnNEVNRnJFUEg5cThLTGlnUVFkZEJnZHY4Y3BlQno0TGNmbzNhTEVXMGZHdi1aWkQ0TmgwRmZkNTlyV09TYkU3WlhmZV9CRXpCczBpc1pwZkd2dGc9fIe8S1uDxjr2z5DjtAY2TDGwTeS4M44usYYhH7iSRpj5; Path=/\n\nprojects_get -\u003e \u003cclass 'list'\u003e -\u003e [Project(id=1, name='Junier', created='2023-11-27T22:36:46.900379365Z', alert=False, alert_chat=None, max_parallel_tasks=0), Project(id=2, name='Cisco', created='2023-11-27T22:36:53.049960469Z', alert=False, alert_chat=None, max_parallel_tasks=0), Project(id=8, name='New Project A', created='2023-12-07T04:54:57.198626268Z', alert=False, alert_chat=None, max_parallel_tasks=0)]\n\nuser_tokens_post -\u003e \u003cclass 'semaphore_api.models.api_token.APIToken'\u003e -\u003e id='kffsrc7wunuiqswfheu1xhlvrkjhes6d4koyjtvjgt8=' created='0001-01-01T00:00:00Z' expired=False \nuser_id=1\n\nuser_tokens_api_token_id_delete -\u003e \u003cclass 'NoneType'\u003e -\u003e None\n\nuser_tokens_get -\u003e \u003cclass 'list'\u003e -\u003e [APIToken(id='4tb0h2egdfxccppk5yiyikw38iglq86loe_t6ragmv4=', created='0001-01-01T00:00:00Z', expired=False, user_id=1), APIToken(id='7uxrljogdekxdretrdlhlcqvl3p_6d1rymrqokf5hau=', created='0001-01-01T00:00:00Z', expired=False, user_id=1), APIToken(id='kffsrc7wunuiqswfheu1xhlvrkjhes6d4koyjtvjgt8=', created='0001-01-01T00:00:00Z', expired=True, user_id=1), APIToken(id='ujg3e2irwq5_00gezbzo6qee9ldsqiwnekstfhbv5v4=', created='0001-01-01T00:00:00Z', expired=True, user_id=1), APIToken(id='zkaidtasbkv84q4_4a20wb0j3uhkspvm3tbfwtdm6f4=', created='0001-01-01T00:00:00Z', expired=True, user_id=1)]\n```\n\nPlease note '\u003cb\u003ekffsrc7wunuiqswfheu1xhlvrkjhes6d4koyjtvjgt8\u003c/b\u003e' - that token will not be removed. It will be marked as \u003cb\u003eexpired=True\u003c/b\u003e\n\n\n\n## Connect based on API key (token):\n\n```python\nimport semaphore_api\nfrom semaphore_api.api.default_api import DefaultApi\n\nfrom semaphore_api.models.project_request import ProjectRequest\nfrom semaphore_api.models.project import Project\nfrom semaphore_api.api.projects_api import ProjectsApi\nfrom semaphore_api.api.project_api import ProjectApi\n\nfrom pprint import pprint\n\ndef get_id_by_name(items_list, search_name):\n    for item in items_list:\n        if item.name == search_name:\n            return item.id\n    return None  # Return None if the name is not found in the list\n\napi_key='7uxrljogdekxdretrdlhlcqvl3p_6d1rymrqokf5hau='\nhost = \"127.0.0.1\"\nport=\"3000\"\nprotocol=\"http\"\n\nconfiguration = semaphore_api.Configuration(\n    host = f\"{protocol}://{host}:{port}/api\",\n    api_key = {'bearer': api_key},\n    api_key_prefix={'bearer': 'Bearer'}\n)\napi_client = semaphore_api.ApiClient(configuration)\n\n# Example 1 - Ping\nping_get       = DefaultApi(api_client).ping_get()\nprint(f\"ping_get -\u003e {type(ping_get)} -\u003e {ping_get}\")\n\n# Example 2 - Ansible Semaphore Info\ninfo_get       = DefaultApi(api_client).info_get()\nprint(f\"info_get -\u003e {type(info_get)} -\u003e {info_get.__dict__} -\u003e {type(info_get.__dict__)}\")\n\n## Example 3 - Create new project\nnew_project = ProjectRequest(name=\"New Project A\")\nprojects_post       = ProjectsApi(api_client).projects_post(new_project)\nprint(f\"projects_post -\u003e {type(projects_post)} -\u003e {projects_post}\")\n\n# Example 4 - Get List of the project\nprojects_get       = ProjectsApi(api_client).projects_get()\nprint(f\"projects_get -\u003e {type(projects_get)} -\u003e {projects_get}\")\n\n# Extract project ID from list (search by name)\nnew_project_id = get_id_by_name(ProjectsApi(api_client).projects_get(), new_project.name)\nprint(f\"new_project_id -\u003e {new_project_id}\")\n\n# Example 5\nproject_delete       = ProjectApi(api_client).project_project_id_delete(new_project_id)\nprint(f\"project_delete -\u003e {type(project_delete)} -\u003e {project_delete}\")\n\nprojects_get       = ProjectsApi(api_client).projects_get()\nprint(f\"projects_get -\u003e {type(projects_get)} -\u003e {projects_get}\")\n```\n\nResponse:\n```text\nping_get -\u003e \u003cclass 'str'\u003e -\u003e pong\n\ninfo_get -\u003e \u003cclass 'semaphore_api.models.info_type.InfoType'\u003e -\u003e {'version': 'v2.9.37', 'update_body': None, 'update': None} -\u003e \u003cclass 'dict'\u003e\n\nprojects_post -\u003e \u003cclass 'NoneType'\u003e -\u003e None\n\nprojects_get -\u003e \u003cclass 'list'\u003e -\u003e [Project(id=1, name='Junier', created='2023-11-27T22:36:46.900379365Z', alert=False, alert_chat=None, max_parallel_tasks=0), Project(id=2, name='Cisco', created='2023-11-27T22:36:53.049960469Z', alert=False, alert_chat=None, max_parallel_tasks=0), Project(id=6, name='New Project A', created='2023-12-07T04:45:10.520367408Z', alert=False, alert_chat=None, max_parallel_tasks=0), Project(id=7, name='New Project A', created='2023-12-07T04:46:47.026084765Z', alert=False, alert_chat=None, max_parallel_tasks=0)]\n\nnew_project_id -\u003e 6\n\nproject_delete -\u003e \u003cclass 'NoneType'\u003e -\u003e None\n\nprojects_get -\u003e \u003cclass 'list'\u003e -\u003e [Project(id=1, name='Junier', created='2023-11-27T22:36:46.900379365Z', alert=False, alert_chat=None, max_parallel_tasks=0), Project(id=2, name='Cisco', created='2023-11-27T22:36:53.049960469Z', alert=False, alert_chat=None, max_parallel_tasks=0), Project(id=7, name='New Project A', created='2023-12-07T04:46:47.026084765Z', alert=False, alert_chat=None, max_parallel_tasks=0)]\n```\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnchekwa%2Fansible-semaphore-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnchekwa%2Fansible-semaphore-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnchekwa%2Fansible-semaphore-api/lists"}