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
|
https://git.vyatsu.ru/api/v1/user
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Для создания репозитория через API используется файл:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python create_gitea_repo.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Скрипт создает публичный репозиторий `API_REPO`.
|
||||||
|
|
||||||
## Выводы
|
## Выводы
|
||||||
|
|
||||||
TCP устанавливает соединение перед передачей данных. В Wireshark можно увидеть трехстороннее рукопожатие: `SYN`, `SYN-ACK`, `ACK`. При завершении соединения видны пакеты `FIN` и `ACK`.
|
TCP устанавливает соединение перед передачей данных. В Wireshark можно увидеть трехстороннее рукопожатие: `SYN`, `SYN-ACK`, `ACK`. При завершении соединения видны пакеты `FIN` и `ACK`.
|
||||||
@ -128,3 +136,5 @@ TCP устанавливает соединение перед передаче
|
|||||||
UDP не устанавливает соединение перед отправкой данных. В Wireshark видны отдельные UDP-пакеты без handshake и без подтверждений доставки.
|
UDP не устанавливает соединение перед отправкой данных. В Wireshark видны отдельные UDP-пакеты без handshake и без подтверждений доставки.
|
||||||
|
|
||||||
При работе через `socket` HTTP-запрос нужно составлять вручную. В примере через `socket` виден ответ `301 Moved Permanently`. Библиотека `requests` делает больше действий автоматически: формирует заголовки, обрабатывает ответ и переходит по перенаправлению, поэтому итоговый ответ получился со статусом `200`.
|
При работе через `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