Skip to content

Commit

Permalink
add black
Browse files Browse the repository at this point in the history
  • Loading branch information
margoloko committed May 24, 2023
1 parent 571e627 commit 2babbbe
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 98 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
google_api_project

[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
![example workflow](https://github.com/margoloko/google_api_project/actions/workflows/main.yaml/badge.svg)
## Изучение Google Cloud Platform
### Приложения для контроля бюджета путешествий с формированием отчёта в гугл-таблицах
Expand Down
147 changes: 69 additions & 78 deletions travel_budget/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,123 +4,117 @@

logger = get_logger()

if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Бюджет путешествий')
parser.add_argument('-c', '--create',
help='Создать файл - введите "имя, бюджет"')
parser.add_argument('-i', '--id',
help='Указать id spreadsheet')
parser.add_argument('-cl', '--clear_all',
action='store_true',
help='Удалить все spreadsheets')
parser.add_argument('-ls', '--list',
action='store_true',
help='Вывести все spreadsheets')
parser.add_argument('-u', '--update',
help='Обновить данные табилицы')
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Бюджет путешествий")
parser.add_argument("-c", "--create", help='Создать файл - введите "имя, бюджет"')
parser.add_argument("-i", "--id", help="Указать id spreadsheet")
parser.add_argument(
"-cl", "--clear_all", action="store_true", help="Удалить все spreadsheets"
)
parser.add_argument(
"-ls", "--list", action="store_true", help="Вывести все spreadsheets"
)
parser.add_argument("-u", "--update", help="Обновить данные табилицы")
args = parser.parse_args()


def get_list_obj(service):
"""Функция чтения списка документов с таблицами."""
logger.info("Getting list of spreadsheets")
response = service.files().list(
q='mimeType="application/vnd.google-apps.spreadsheet"').execute()
return response['files']
response = (
service.files()
.list(q='mimeType="application/vnd.google-apps.spreadsheet"')
.execute()
)
return response["files"]


def clear_disk(service):
"""Функция удаления всех документов с таблицами."""
logger.info("Clearing disk")
for spreadsheet in get_list_obj(service):
logger.info("Deleting spreadsheet {}".format(spreadsheet['id']))
response = service.files().delete(fileId=spreadsheet['id'])
logger.info("Deleting spreadsheet {}".format(spreadsheet["id"]))
response = service.files().delete(fileId=spreadsheet["id"])
response.execute()
return 'Документы удалены'
return "Документы удалены"


def set_user_permissions(service, spreadsheetId):
"""Функция установки прав."""
logger.info("Setting user permissions"
"for spreadsheet {}".format(spreadsheetId))
permissions_body = {'type': 'user',
'role': 'writer',
'emailAddress': EMAIL_USER}
logger.info("Setting user permissions" "for spreadsheet {}".format(spreadsheetId))
permissions_body = {"type": "user", "role": "writer", "emailAddress": EMAIL_USER}
service.permissions().create(
fileId=spreadsheetId,
body=permissions_body,
fields='id'
fileId=spreadsheetId, body=permissions_body, fields="id"
).execute()


def create_spreadsheet(service, data):
"""Функция создания документа."""
logger.info("Creating spreadsheet")
title, cash = data.split(',')
title, cash = data.split(",")
spreadsheet_body = {
'properties': {
'title': title.strip(),
'locale': 'ru_RU'
},
'sheets': [{
'properties': {
'sheetType': 'GRID',
'sheetId': 0,
'title': 'Отпуск',
'gridProperties': {
'rowCount': 100,
'columnCount': 100
"properties": {"title": title.strip(), "locale": "ru_RU"},
"sheets": [
{
"properties": {
"sheetType": "GRID",
"sheetId": 0,
"title": "Отпуск",
"gridProperties": {"rowCount": 100, "columnCount": 100},
}
}
}]
],
}
request = service.spreadsheets().create(body=spreadsheet_body)
response = request.execute()
spreadsheetId = response['spreadsheetId']
spreadsheetId = response["spreadsheetId"]
set_user_permissions(DRIVE_SERVICE, spreadsheetId)
spreadsheet_update_values(SHEETS_SERVICE,
spreadsheetId,
cash,
default=True)
logger.info(f'https://docs.google.com/spreadsheets/d/{spreadsheetId}')
return f'Был создан документ с ID {spreadsheetId}'
spreadsheet_update_values(SHEETS_SERVICE, spreadsheetId, cash, default=True)
logger.info(f"https://docs.google.com/spreadsheets/d/{spreadsheetId}")
return f"Был создан документ с ID {spreadsheetId}"


def read_values(service, spreadsheetId):
range = "A1:E30"
response = service.spreadsheets().values().get(
spreadsheetId=spreadsheetId,
range=range,
).execute()
return response['values']
response = (
service.spreadsheets()
.values()
.get(
spreadsheetId=spreadsheetId,
range=range,
)
.execute()
)
return response["values"]


def spreadsheet_update_values(service, spreadsheetId, data, default=False):
"""Функция обновления документа."""
if default:
table_values = [
['Бюджет путешествия'],
['Весь бюджет', data],
['Все расходы', '=SUM(E7:E30)'],
['Остаток', '=B2-B3'],
['Расходы'],
['Описание', 'Тип', 'Кол-во', 'Цена', 'Стоимость'],
["Бюджет путешествия"],
["Весь бюджет", data],
["Все расходы", "=SUM(E7:E30)"],
["Остаток", "=B2-B3"],
["Расходы"],
["Описание", "Тип", "Кол-во", "Цена", "Стоимость"],
]
else:
table_values = read_values(service, spreadsheetId)
table_values.append(list(map(str.strip, data.split(','))))
request_body = {
"majorDimension": "ROWS",
'values': table_values
}
request = service.spreadsheets().values().update(
spreadsheetId=spreadsheetId,
range="A1:E30",
valueInputOption="USER_ENTERED",
body=request_body
table_values.append(list(map(str.strip, data.split(","))))
request_body = {"majorDimension": "ROWS", "values": table_values}
request = (
service.spreadsheets()
.values()
.update(
spreadsheetId=spreadsheetId,
range="A1:E30",
valueInputOption="USER_ENTERED",
body=request_body,
)
)
request.execute()
return 'Документ обновлен'
return "Документ обновлен"


def main(args):
Expand All @@ -131,22 +125,19 @@ def main(args):
return clear_disk(DRIVE_SERVICE)

if args.create is not None:
return create_spreadsheet(SHEETS_SERVICE,
args.create)
return create_spreadsheet(SHEETS_SERVICE, args.create)

spreadsheet_id = None
if args.id is not None:
spreadsheet_id = args.id
else:
spreadsheets = get_list_obj(DRIVE_SERVICE)
if spreadsheets:
spreadsheet_id = spreadsheets[0]['id']
spreadsheet_id = spreadsheets[0]["id"]

if args.update is not None:
return spreadsheet_update_values(SHEETS_SERVICE,
spreadsheet_id,
args.update)
return spreadsheet_update_values(SHEETS_SERVICE, spreadsheet_id, args.update)


if __name__ == '__main__':
if __name__ == "__main__":
print(main(args))
38 changes: 19 additions & 19 deletions travel_budget/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,35 @@
from googleapiclient import discovery

SCOPES = [
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive'
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/drive",
]

load_dotenv()
EMAIL_USER = os.environ['EMAIL']
EMAIL_USER = os.environ["EMAIL"]
INFO = {
'type': os.environ['TYPE'],
'project_id': os.environ['PROJECT_ID'],
'private_key_id': os.environ['PRIVATE_KEY_ID'],
'private_key': os.environ['PRIVATE_KEY'],
'client_email': os.environ['CLIENT_EMAIL'],
'client_id': os.environ['CLIENT_ID'],
'auth_uri': os.environ['AUTH_URI'],
'token_uri': os.environ['TOKEN_URI'],
'auth_provider_x509_cert_url': os.environ['AUTH_PROVIDER_X509_CERT_URL'],
'client_x509_cert_url': os.environ['CLIENT_X509_CERT_URL']
"type": os.environ["TYPE"],
"project_id": os.environ["PROJECT_ID"],
"private_key_id": os.environ["PRIVATE_KEY_ID"],
"private_key": os.environ["PRIVATE_KEY"],
"client_email": os.environ["CLIENT_EMAIL"],
"client_id": os.environ["CLIENT_ID"],
"auth_uri": os.environ["AUTH_URI"],
"token_uri": os.environ["TOKEN_URI"],
"auth_provider_x509_cert_url": os.environ["AUTH_PROVIDER_X509_CERT_URL"],
"client_x509_cert_url": os.environ["CLIENT_X509_CERT_URL"],
}
CREDENTIALS = Credentials.from_service_account_info(info=INFO,
scopes=SCOPES)
SHEETS_SERVICE = discovery.build('sheets', 'v4', credentials=CREDENTIALS)
DRIVE_SERVICE = discovery.build('drive', 'v3', credentials=CREDENTIALS)
CREDENTIALS = Credentials.from_service_account_info(info=INFO, scopes=SCOPES)
SHEETS_SERVICE = discovery.build("sheets", "v4", credentials=CREDENTIALS)
DRIVE_SERVICE = discovery.build("drive", "v3", credentials=CREDENTIALS)


def get_logger():
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter('%(asctime)s - '
'%(levelname)s - %(message)s'))
handler.setFormatter(
logging.Formatter("%(asctime)s - " "%(levelname)s - %(message)s")
)
logger.addHandler(handler)
return logger

0 comments on commit 2babbbe

Please sign in to comment.