Skip to content

Commit a5ab427

Browse files
committed
Small fixes (#14)
* Linted with black * Bump isort from 5.7.0 to 5.8.0 (#12) * Updated cache in workflows * Reusing code for checking user * Added dependabot workflow * Added GitHub actions to dependabot * Added Github QL checking * Added error info in get_response * More info added on JSONDecodeError exception * Updated version
1 parent dd33ba6 commit a5ab427

12 files changed

+108
-58
lines changed

.github/dependabot.yml

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: pip
4+
directory: "/"
5+
schedule:
6+
interval: daily
7+
target-branch: develop
8+
reviewers:
9+
- VadVergasov
10+
assignees:
11+
- VadVergasov
12+
allow:
13+
- dependency-type: direct
14+
- dependency-type: indirect
15+
ignore:
16+
- dependency-name: "idna"
17+
- package-ecosystem: "github-actions"
18+
directory: "/"
19+
schedule:
20+
interval: daily
21+
target-branch: develop
22+
reviewers:
23+
- VadVergasov
24+
assignees:
25+
- VadVergasov

.github/workflows/codeql-analysis.yml

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: "CodeQL"
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
- develop
8+
pull_request:
9+
branches:
10+
- master
11+
- develop
12+
schedule:
13+
- cron: "0 0 * * *"
14+
15+
jobs:
16+
analyze:
17+
name: Analyze
18+
runs-on: ubuntu-latest
19+
strategy:
20+
fail-fast: false
21+
matrix:
22+
language: ["python"]
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v2
26+
- name: Initialize CodeQL
27+
uses: github/codeql-action/init@v1
28+
with:
29+
languages: ${{ matrix.language }}
30+
- name: Autobuild
31+
uses: github/codeql-action/autobuild@v1
32+
- name: Perform CodeQL Analysis
33+
uses: github/codeql-action/analyze@v1

.github/workflows/codestyle.yml

-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ jobs:
2424
with:
2525
path: ~/.cache/pip
2626
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
27-
restore-keys: |
28-
${{ runner.os }}-pip-
2927
- name: Install dependencies
3028
run: |
3129
python -m pip install --upgrade pip

.github/workflows/publish.yml

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ on:
55
branches:
66
- master
77
- develop
8+
tags:
9+
- "*"
810
pull_request:
911
branches:
1012
- master
@@ -17,6 +19,8 @@ jobs:
1719
matrix:
1820
python-version: [3.6, 3.7, 3.8, 3.9]
1921
steps:
22+
- name: Print Github refs
23+
run: echo ${{github.ref}}
2024
- uses: actions/checkout@v2
2125
- name: Set up Python ${{ matrix.python-version }}
2226
uses: actions/setup-python@v2
@@ -27,8 +31,6 @@ jobs:
2731
with:
2832
path: ~/.cache/pip
2933
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
30-
restore-keys: |
31-
${{ runner.os }}-pip-
3234
- name: Install dependencies
3335
run: |
3436
python -m pip install --upgrade pip wheel

codeforces_api/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
along with this program. If not, see <https://www.gnu.org/licenses/>.
1616
"""
1717
__all__ = ["CodeforcesApi", "CodeforcesApiRequestMaker", "CodeforcesParser"]
18-
from codeforces_api.api_requests import CodeforcesApi
1918
from codeforces_api.api_request_maker import CodeforcesApiRequestMaker
19+
from codeforces_api.api_requests import CodeforcesApi
2020
from codeforces_api.parse_methods import CodeforcesParser
2121
from codeforces_api.types import *

codeforces_api/api_request_maker.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
You should have received a copy of the GNU General Public License
1515
along with this program. If not, see <https://www.gnu.org/licenses/>.
1616
"""
17-
import random
18-
import time
19-
import hashlib
2017
import collections
18+
import hashlib
2119
import json
20+
import random
21+
import time
2222

2323

2424
class CodeforcesApiRequestMaker:
@@ -116,5 +116,6 @@ def get_response(self, request):
116116
return response["result"]
117117
except json.decoder.JSONDecodeError as error:
118118
raise ValueError(
119-
"A lot of users, try to reduce the number of users in the list"
119+
"A lot of users, try to reduce the number of users in the list.\nError: %s.\nResponse text: %s"
120+
% (str(error), request.text)
120121
)

codeforces_api/api_requests.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@
1818

1919
from codeforces_api.api_request_maker import CodeforcesApiRequestMaker
2020
from codeforces_api.types import (
21-
User,
2221
BlogEntry,
2322
Comment,
24-
RecentAction,
25-
RatingChange,
2623
Contest,
24+
Hack,
2725
Problem,
2826
ProblemStatistic,
29-
Submission,
30-
Hack,
3127
RanklistRow,
28+
RatingChange,
29+
RecentAction,
30+
Submission,
31+
User,
3232
)
3333

3434

codeforces_api/parse_methods.py

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"""
1717
import requests
1818
from lxml import html
19+
1920
from codeforces_api.api_requests import CodeforcesApi
2021

2122

codeforces_api/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "2.0.6"
1+
__version__ = "2.0.7"

requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ docutils==0.16
1212
idna==2.10
1313
importlib-metadata==3.7.3
1414
iniconfig==1.1.1
15-
isort==5.7.0
15+
isort==5.8.0
1616
keyring==23.0.0
1717
lazy-object-proxy==1.5.2
1818
lxml==4.6.2

tests/conftest.py

+26
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,29 @@ def api_key(request):
2727
@pytest.fixture
2828
def api_secret(request):
2929
return request.config.getoption("--api_secret")
30+
31+
32+
@pytest.fixture
33+
def check_user():
34+
def check(user):
35+
assert user.email is None or isinstance(user.email, str)
36+
assert user.open_id is None or isinstance(user.open_id, str)
37+
assert user.first_name is None or isinstance(user.first_name, str)
38+
assert user.last_name is None or isinstance(user.last_name, str)
39+
assert user.country is None or isinstance(user.country, str)
40+
assert user.vk_id is None or isinstance(user.vk_id, str)
41+
assert user.country is None or isinstance(user.country, str)
42+
assert user.city is None or isinstance(user.city, str)
43+
assert user.organization is None or isinstance(user.organization, str)
44+
assert isinstance(user.contribution, int)
45+
assert user.rank is None or isinstance(user.rank, str)
46+
assert user.rating is None or isinstance(user.rating, int)
47+
assert user.max_rank is None or isinstance(user.max_rank, str)
48+
assert user.max_rating is None or isinstance(user.max_rating, int)
49+
assert isinstance(user.last_online, int)
50+
assert isinstance(user.registration_time_seconds, int)
51+
assert isinstance(user.friend_of_count, int)
52+
assert isinstance(user.avatar, str)
53+
assert isinstance(user.title_photo, str)
54+
55+
return check

tests/test_api.py

+6-42
Original file line numberDiff line numberDiff line change
@@ -270,54 +270,18 @@ def test_user_friends(api_key, api_secret):
270270
assert "aropan" in friends or "gepardo" in friends
271271

272272

273-
def test_user_info(api_key, api_secret):
273+
def test_user_info(api_key, api_secret, check_user):
274274
api = CodeforcesApi(api_key, api_secret)
275275
info = api.user_info(["VadVergasov", "tourist"])
276276
for user in info:
277-
assert user.email is None or isinstance(user.email, str)
278-
assert user.open_id is None or isinstance(user.open_id, str)
279-
assert user.first_name is None or isinstance(user.first_name, str)
280-
assert user.last_name is None or isinstance(user.last_name, str)
281-
assert user.country is None or isinstance(user.country, str)
282-
assert user.vk_id is None or isinstance(user.vk_id, str)
283-
assert user.country is None or isinstance(user.country, str)
284-
assert user.city is None or isinstance(user.city, str)
285-
assert user.organization is None or isinstance(user.organization, str)
286-
assert isinstance(user.contribution, int)
287-
assert user.rank is None or isinstance(user.rank, str)
288-
assert user.rating is None or isinstance(user.rating, int)
289-
assert user.max_rank is None or isinstance(user.max_rank, str)
290-
assert user.max_rating is None or isinstance(user.max_rating, int)
291-
assert isinstance(user.last_online, int)
292-
assert isinstance(user.registration_time_seconds, int)
293-
assert isinstance(user.friend_of_count, int)
294-
assert isinstance(user.avatar, str)
295-
assert isinstance(user.title_photo, str)
296-
297-
298-
def test_user_rated_list():
277+
check_user(user)
278+
279+
280+
def test_user_rated_list(check_user):
299281
api = CodeforcesApi()
300282
users = api.user_rated_list(True)
301283
for user in users:
302-
assert user.email is None or isinstance(user.email, str)
303-
assert user.open_id is None or isinstance(user.open_id, str)
304-
assert user.first_name is None or isinstance(user.first_name, str)
305-
assert user.last_name is None or isinstance(user.last_name, str)
306-
assert user.country is None or isinstance(user.country, str)
307-
assert user.vk_id is None or isinstance(user.vk_id, str)
308-
assert user.country is None or isinstance(user.country, str)
309-
assert user.city is None or isinstance(user.city, str)
310-
assert user.organization is None or isinstance(user.organization, str)
311-
assert isinstance(user.contribution, int)
312-
assert user.rank is None or isinstance(user.rank, str)
313-
assert user.rating is None or isinstance(user.rating, int)
314-
assert user.max_rank is None or isinstance(user.max_rank, str)
315-
assert user.max_rating is None or isinstance(user.max_rating, int)
316-
assert isinstance(user.last_online, int)
317-
assert isinstance(user.registration_time_seconds, int)
318-
assert isinstance(user.friend_of_count, int)
319-
assert isinstance(user.avatar, str)
320-
assert isinstance(user.title_photo, str)
284+
check_user(user)
321285

322286

323287
def test_user_rating():

0 commit comments

Comments
 (0)