Skip to content

Commit 45347e1

Browse files
authored
Merge pull request #24 from OSLL/5_export_sheets
issue 5 done
2 parents ab086d7 + 7730f3b commit 45347e1

File tree

4 files changed

+77
-2
lines changed

4 files changed

+77
-2
lines changed

README.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# GITLogger
1+
# GITLogger
22

33
## Установка зависимостей
44

@@ -22,6 +22,23 @@ python3 main.py -i [-t, --token] token (github токен вместо token) [-
2222
```commandline
2323
python3 main.py -p [-t, --token] token (github токен вместо token) [-l, --list] list (list - строка пути к txt файлу со списком репозиториев) [-o, --out] out (out - название csv файла, в который будут помещены все логи)
2424
```
25+
## Получение токена для работы с Google таблицей:
26+
Сначала нужно создать проект на сайте [Google Cloud](https://console.cloud.google.com/). Выбираем название проекта, жмем на кнопку "Create".
27+
28+
Затем в меню слева нажимаем на API'S & Services, выбираем Enabled APIs & services. Затем на новой страничке сверху находим "+" с надписью ENABLE APIS AND SERVICES. В поиске находим sheet, нажимаем на кнопку enable, такое же можно сделать и для drive. Теперь приложение может общаться с помощью API Google sheets.
29+
30+
В меню слева в API'S & Services переходим на вкладку Credentials, сверху должен быть восклицательный знак в оранжевом треугольнике, в этом сообщении нажимаем на CONFIGURE CONSENT SCREEN. Выбираем external и жмем Create. Заполняем поля со звездочками, жмем SAVE AND CONTINUE.
31+
32+
Заходим опять в Credentials. Нажимаем сверху на "+" CREATE CREDENTIALS и выбираем Service account. На первом этапе создаем имя,;жмем continue, на втором даем себе права owner, жмем DONE.
33+
34+
В таблице Service Accounts будет запись, нажимаем на нее. Сверху будет вкладка keys. Add key -> Create new key -> json -> create. Получаем нужный json файл.
35+
## Получение table_id и sheet_id для работы с Google таблицей:
36+
После создания таблицы в google sheets, получаем ссылку на эту таблицу и вводим ее в любом поисковике.В получившемся запросе после строчки "d/" будет находиться table_id, после строчки "gid=" будет находиться sheet_id
37+
## Экспорт таблицы в Google Sheets:
38+
39+
``` commandline
40+
python3 main.py -p [-t, --token] token (github токен вместо token) [-l,--list] list (list - строка пути к txt файлу со списком репозиториев) [-o, --out] out (out - название csv файла, в который будут помещены все логи) [--google_token] token.json (файл с google токеном) [--table_id] table_id (id таблицы, указанной в url пути до таблицы) [--sheet_id] sheet_id (id конкретного листа в таблице google)
41+
```
2542

2643
## Файл со списком репозиториев:
2744

export_sheets.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import pygsheets
2+
import pandas as pd
3+
4+
INT_MASS = [{
5+
"one": 1,
6+
"two": 2,
7+
"what?": 3
8+
}]
9+
10+
def write_data_to_table(csv_path, google_token, table_id, sheet_id):
11+
if google_token and sheet_id and table_id :
12+
gc = pygsheets.authorize(service_file=google_token)
13+
sh = gc.open_by_key(table_id)
14+
15+
try:
16+
sh.worksheets('title', sheet_id)
17+
except:
18+
sh.add_worksheet(sheet_id)
19+
20+
wk_content = sh.worksheet_by_title(sheet_id)
21+
22+
if csv_path:
23+
df = pd.read_csv(csv_path, delimiter=',', encoding='cp1251')
24+
else:
25+
df = pd.DataFrame(INT_MASS)
26+
27+
# Очистка существующих данных
28+
wk_content.clear()
29+
30+
# Запись новых данных
31+
wk_content.set_dataframe(df, 'A1', copy_head=True)
32+
33+

main.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,33 @@
33
import pytz
44

55
import git_logger
6-
6+
import export_sheets
77

88
def parse_args():
99
parser = argparse.ArgumentParser()
1010
parser.add_argument("-p", help="log pull requests", action="store_true")
1111
parser.add_argument("-i", help="log issues", action="store_true")
12+
parser.add_argument("-e", help="export table to google sheets", action="store_true")
1213
parser.add_argument('-t', '--token', type=str, required=True, help='token github account')
1314
parser.add_argument('-l', '--list', type=str, required=True, help='repos names file')
1415
parser.add_argument('-o', '--out', type=str, required=True, help='output filename')
1516
parser.add_argument('-s', '--start', type=str, required=False, help='start time', default='2000/01/01-00:00:00')
1617
parser.add_argument('-f', '--finish', type=str, required=False, help='finish time', default='2400/01/01-00:00:00')
18+
parser.add_argument('--google_token', type=str, required=False, help='Specify path to google token file')
19+
parser.add_argument('--table_id', type=str, required=False,
20+
help='Specify Google sheet document id (can find in url)')
21+
parser.add_argument('--sheet_id', type=str, required=False,
22+
help='Specify title for a sheet in a document in which data will be printed')
23+
args = parser.parse_args()
24+
25+
if args.e:
26+
for action in parser._actions:
27+
if action.dest == 'google_token':
28+
action.required = True
29+
if action.dest == 'table_id':
30+
action.required = True
31+
if action.dest == 'sheet_id':
32+
action.required = True
1733
return parser.parse_args()
1834

1935

@@ -43,10 +59,16 @@ def main():
4359
finish = parse_time(args.finish.split('-'))
4460
if not args.p and not args.i:
4561
git_logger.log_commits(client, repositories, csv_name, start, finish)
62+
if (args.e):
63+
export_sheets.write_data_to_table(csv_name, args.google_token, args.table_id, args.sheet_id)
4664
if args.p:
4765
git_logger.log_pull_requests(client, repositories, csv_name, token, start, finish)
66+
if (args.e):
67+
export_sheets.write_data_to_table(csv_name, args.google_token, args.table_id, args.sheet_id)
4868
if args.i:
4969
git_logger.log_issues(client, repositories, csv_name, token, start, finish)
70+
if (args.e):
71+
export_sheets.write_data_to_table(csv_name, args.google_token, args.table_id, args.sheet_id)
5072

5173

5274

requirements.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
PyGithub~=1.55
2+
pygsheets==2.0.5
3+
pandas==1.4.3
24
pytz~=2023.3
35
requests~=2.31.0
6+

0 commit comments

Comments
 (0)