Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,12 @@ process:

## История изменений

### 2022-06-29

* Закэшированы обращения к API.
Время работы скрипта при формировании списка задач сократилось примерно в 2 раза
(главным образом за счёт /v2/components/<id> - получение названия курса).

### 2022-06-20

* [Refactor] Метод `PraktikTrackerClient.get_status_history()` переписан с
Expand Down
5 changes: 2 additions & 3 deletions prpr/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,13 @@
from prpr.startrack_client import get_startack_client
from prpr.table import DISPLAYED_TAIL_LENGTH, print_issue_table

COMPONENT_SUFFIXES = "component_suffixes"


class InteractiveCommand(Enum):
CHECK_AGAIN = "🔁 Check again"


COMPONENT_SUFFIXES = "component_suffixes"


def get_cohort(cohort, components, config):
cohort = str(cohort) if cohort else "?"
if not components:
Expand Down
36 changes: 34 additions & 2 deletions prpr/startrack_client.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
from typing import Optional

import requests_cache
from loguru import logger
from requests.utils import check_header_validity
from yandex_tracker_client import TrackerClient
from yandex_tracker_client.connection import Connection
from yandex_tracker_client.exceptions import TrackerClientError
from yandex_tracker_client.objects import Resource

Expand All @@ -12,9 +15,33 @@
STARTREK_TOKEN_KEY_NAME = "startrek_token"


class CachedConnection(Connection):
def __init__(self, token, org_id, headers=None, verify=True, **kwargs):
super().__init__(token, org_id, headers=headers, verify=verify, **kwargs)
self.session = requests_cache.CachedSession(backend='memory')

self.session.verify = verify

if headers is not None:
self.session.headers.update(headers)

self.session.headers['Authorization'] = 'OAuth ' + (token or 'not provided')
self.session.headers['X-Org-Id'] = org_id or 'not provided'
self.session.headers['Content-Type'] = 'application/json'

# Check validity headers for requests >= 2.11
for header in self.session.headers.items():
check_header_validity(header)


class PraktikTrackerClient(TrackerClient):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.connector = kwargs.pop('connector', Connection)
connection = kwargs.pop('connection', None)
if connection is None:
connection = self.connector(*args, **kwargs)

super().__init__(*args, connection=connection, **kwargs)
self.token = kwargs["token"]

def _get_filter_expression(self, user: Optional[str] = None):
Expand Down Expand Up @@ -66,7 +93,12 @@ def get_startack_client(config) -> PraktikTrackerClient:
logger.error(f"{STARTREK_TOKEN_KEY_NAME} top-level key not found in config 😿")
exit(1)
token = config[STARTREK_TOKEN_KEY_NAME]
return PraktikTrackerClient(org_id=YANDEX_ORG_ID, base_url="https://st-api.yandex-team.ru", token=token)
return PraktikTrackerClient(
org_id=YANDEX_ORG_ID,
base_url="https://st-api.yandex-team.ru",
token=token,
connector=CachedConnection,
)


def by_issue_key(issue) -> int:
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ pytest==5.4.1
python-dateutil==2.8.1
questionary==1.9.0
requests==2.23.0
requests_cache==0.9.4
rich==10.1.0
selenium==3.141.0
transliterate==1.10.2
Expand Down