Add Gitea repository creation example
This commit is contained in:
parent
e66d4fa927
commit
07ea43a69c
10
README.md
10
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` и не попадает в коммиты.
|
||||
|
||||
56
create_gitea_repo.py
Normal file
56
create_gitea_repo.py
Normal 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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user