Add Gitea repository creation example

This commit is contained in:
patayatuya-art 2026-05-07 16:28:02 +03:00
parent e66d4fa927
commit 07ea43a69c
2 changed files with 66 additions and 0 deletions

View File

@ -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` и не попадает в коммиты.

56
create_gitea_repo.py Normal file
View File

@ -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)