osci/crawlers/github/repository/info.py (35 lines of code) (raw):

"""Copyright since 2019, EPAM Systems This file is part of OSCI. OSCI is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OSCI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OSCI. If not, see <http://www.gnu.org/licenses/>.""" from typing import NamedTuple, Optional, Dict, Any from datetime import datetime, date class Repository(NamedTuple): name: str short_name: Optional[str] language: Optional[str] license: Optional[str] is_fork: Optional[bool] stargazers_count: int watchers_count: int forks_count: int network_count: int subscribers_count: int created_at: datetime updated_at: datetime pushed_at: datetime downloaded_at: date def _parse_optional_datetime(dt: Optional[str]) -> Optional[datetime]: if dt is not None and isinstance(dt, str): return datetime.fromisoformat(dt.replace('Z', '')) def parse_get_repository_response(resp: Dict[str, Any], downloaded_at: date) -> Repository: return Repository(name=resp['full_name'], short_name=resp.get('name', ''), language=resp.get('language'), license=resp.get('license').get('key') if isinstance(resp.get('license'), dict) else None, is_fork=resp.get('fork'), stargazers_count=resp.get('stargazers_count'), watchers_count=resp.get('watchers_count'), forks_count=resp.get('forks_count'), network_count=resp.get('network_count'), subscribers_count=resp.get('subscribers_count'), created_at=_parse_optional_datetime(resp.get('created_at')), updated_at=_parse_optional_datetime(resp.get('updated_at')), pushed_at=_parse_optional_datetime(resp.get('pushed_at')), downloaded_at=downloaded_at)