From 07ea43a69c89d5ac0f3bb40899a21345cd36cf06 Mon Sep 17 00:00:00 2001 From: patayatuya-art Date: Thu, 7 May 2026 16:28:02 +0300 Subject: [PATCH] Add Gitea repository creation example --- README.md | 10 ++++++++ create_gitea_repo.py | 56 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 create_gitea_repo.py diff --git a/README.md b/README.md index 67ba4c5..acc6593 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,14 @@ python gitea_api.py https://git.vyatsu.ru/api/v1/user ``` +Для создания репозитория через API используется файл: + +```powershell +python create_gitea_repo.py +``` + +Скрипт создает публичный репозиторий `API_REPO`. + ## Выводы TCP устанавливает соединение перед передачей данных. В Wireshark можно увидеть трехстороннее рукопожатие: `SYN`, `SYN-ACK`, `ACK`. При завершении соединения видны пакеты `FIN` и `ACK`. @@ -128,3 +136,5 @@ TCP устанавливает соединение перед передаче UDP не устанавливает соединение перед отправкой данных. В Wireshark видны отдельные UDP-пакеты без handshake и без подтверждений доставки. При работе через `socket` HTTP-запрос нужно составлять вручную. В примере через `socket` виден ответ `301 Moved Permanently`. Библиотека `requests` делает больше действий автоматически: формирует заголовки, обрабатывает ответ и переходит по перенаправлению, поэтому итоговый ответ получился со статусом `200`. + +Через API Gitea был выполнен запрос к данным пользователя и создан репозиторий `API_REPO`. Для этого использовался токен, который хранится в `.env` и не попадает в коммиты. diff --git a/create_gitea_repo.py b/create_gitea_repo.py new file mode 100644 index 0000000..73d33a2 --- /dev/null +++ b/create_gitea_repo.py @@ -0,0 +1,56 @@ +import os + +import requests + + +API_URL = "https://git.vyatsu.ru/api/v1" +REPO_NAME = "API_REPO" + + +def load_token() -> str: + token = os.getenv("GITEA_TOKEN") + if token: + return token + + if os.path.exists(".env"): + with open(".env", "r", encoding="utf-8") as file: + for line in file: + line = line.strip() + if line.startswith("GITEA_TOKEN="): + return line.split("=", 1)[1].strip() + + return "" + + +token = load_token() +if not token: + print("Token not found. Create .env file with GITEA_TOKEN=your_token") + raise SystemExit(1) + +headers = {"Authorization": f"token {token}"} +data = { + "name": REPO_NAME, + "description": "Repository created through Gitea API for lab 3", + "private": False, + "auto_init": True, +} + +response = requests.post( + f"{API_URL}/user/repos", + headers=headers, + json=data, + timeout=10, +) + +print(f"Status code: {response.status_code}") + +if response.status_code == 201: + repo = response.json() + print("Repository created") + print(f"Name: {repo.get('full_name')}") + print(f"URL: {repo.get('html_url')}") +elif response.status_code == 409: + print(f"Repository {REPO_NAME} already exists") +else: + print(response.text) +