├── .editorconfig
├── .gitattributes
├── .github
└── workflows
│ └── python-publish.yml
├── .gitignore
├── .idea
├── .gitignore
├── inspectionProfiles
│ └── profiles_settings.xml
├── kickbase-api-python.iml
├── misc.xml
├── modules.xml
└── vcs.xml
├── LICENSE
├── README.md
├── docs
├── .nojekyll
├── exceptions.html
├── index.html
├── kickbase.html
└── models
│ ├── base_model.html
│ ├── feed_item.html
│ ├── feed_item_comment.html
│ ├── feed_meta.html
│ ├── index.html
│ ├── league_data.html
│ ├── league_info.html
│ ├── league_match_day_stats_data.html
│ ├── league_match_day_user_stats.html
│ ├── league_me.html
│ ├── league_user_data.html
│ ├── league_user_profile.html
│ ├── league_user_profile_season_stats.html
│ ├── league_user_season_stats.html
│ ├── league_user_stats.html
│ ├── lineup.html
│ ├── market.html
│ ├── market_player.html
│ ├── market_player_offer.html
│ ├── player.html
│ ├── response
│ ├── index.html
│ └── league_stats_response.html
│ └── user.html
├── kickbase_api
├── __init__.py
├── exceptions.py
├── kickbase.py
└── models
│ ├── __init__.py
│ ├── _transforms.py
│ ├── base_model.py
│ ├── chat_item.py
│ ├── feed_item.py
│ ├── feed_item_comment.py
│ ├── feed_meta.py
│ ├── gift.py
│ ├── league_data.py
│ ├── league_info.py
│ ├── league_match_day_stats_data.py
│ ├── league_match_day_user_stats.py
│ ├── league_me.py
│ ├── league_user_data.py
│ ├── league_user_profile.py
│ ├── league_user_profile_season_stats.py
│ ├── league_user_season_stats.py
│ ├── league_user_stats.py
│ ├── lineup.py
│ ├── market.py
│ ├── market_player.py
│ ├── market_player_offer.py
│ ├── player.py
│ ├── response
│ ├── __init__.py
│ └── league_stats_response.py
│ └── user.py
├── requirements.txt
├── setup.py
└── tests
├── __init__.py
├── conftest.py
├── models
└── __init__.py
└── test_kickbase.py
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 4
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = false
9 | insert_final_newline = false
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.github/workflows/python-publish.yml:
--------------------------------------------------------------------------------
1 | # This workflows will upload a Python Package using Twine when a release is created
2 | # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
3 |
4 | name: Upload Python Package
5 |
6 | on:
7 | release:
8 | types: [created]
9 |
10 | jobs:
11 | deploy:
12 |
13 | runs-on: ubuntu-latest
14 |
15 | steps:
16 | - uses: actions/checkout@v2
17 | - name: Set up Python
18 | uses: actions/setup-python@v2
19 | with:
20 | python-version: '3.x'
21 | - name: Install dependencies
22 | run: |
23 | python -m pip install --upgrade pip
24 | pip install setuptools wheel twine
25 | - name: Build and publish
26 | env:
27 | TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
28 | TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
29 | run: |
30 | python setup.py sdist bdist_wheel
31 | twine upload dist/*
32 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.toptal.com/developers/gitignore/api/python,pycharm,venv
3 | # Edit at https://www.toptal.com/developers/gitignore?templates=python,pycharm,venv
4 |
5 | ### PyCharm ###
6 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
7 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
8 |
9 | # User-specific stuff
10 | .idea/**/workspace.xml
11 | .idea/**/tasks.xml
12 | .idea/**/usage.statistics.xml
13 | .idea/**/dictionaries
14 | .idea/**/shelf
15 |
16 | # Generated files
17 | .idea/**/contentModel.xml
18 |
19 | # Sensitive or high-churn files
20 | .idea/**/dataSources/
21 | .idea/**/dataSources.ids
22 | .idea/**/dataSources.local.xml
23 | .idea/**/sqlDataSources.xml
24 | .idea/**/dynamic.xml
25 | .idea/**/uiDesigner.xml
26 | .idea/**/dbnavigator.xml
27 |
28 | # Gradle
29 | .idea/**/gradle.xml
30 | .idea/**/libraries
31 |
32 | # Gradle and Maven with auto-import
33 | # When using Gradle or Maven with auto-import, you should exclude module files,
34 | # since they will be recreated, and may cause churn. Uncomment if using
35 | # auto-import.
36 | # .idea/artifacts
37 | # .idea/compiler.xml
38 | # .idea/jarRepositories.xml
39 | # .idea/modules.xml
40 | # .idea/*.iml
41 | # .idea/modules
42 | # *.iml
43 | # *.ipr
44 |
45 | # CMake
46 | cmake-build-*/
47 |
48 | # Mongo Explorer plugin
49 | .idea/**/mongoSettings.xml
50 |
51 | # File-based project format
52 | *.iws
53 |
54 | # IntelliJ
55 | out/
56 |
57 | # mpeltonen/sbt-idea plugin
58 | .idea_modules/
59 |
60 | # JIRA plugin
61 | atlassian-ide-plugin.xml
62 |
63 | # Cursive Clojure plugin
64 | .idea/replstate.xml
65 |
66 | # Crashlytics plugin (for Android Studio and IntelliJ)
67 | com_crashlytics_export_strings.xml
68 | crashlytics.properties
69 | crashlytics-build.properties
70 | fabric.properties
71 |
72 | # Editor-based Rest Client
73 | .idea/httpRequests
74 |
75 | # Android studio 3.1+ serialized cache file
76 | .idea/caches/build_file_checksums.ser
77 |
78 | ### PyCharm Patch ###
79 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
80 |
81 | # *.iml
82 | # modules.xml
83 | # .idea/misc.xml
84 | # *.ipr
85 |
86 | # Sonarlint plugin
87 | # https://plugins.jetbrains.com/plugin/7973-sonarlint
88 | .idea/**/sonarlint/
89 |
90 | # SonarQube Plugin
91 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
92 | .idea/**/sonarIssues.xml
93 |
94 | # Markdown Navigator plugin
95 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
96 | .idea/**/markdown-navigator.xml
97 | .idea/**/markdown-navigator-enh.xml
98 | .idea/**/markdown-navigator/
99 |
100 | # Cache file creation bug
101 | # See https://youtrack.jetbrains.com/issue/JBR-2257
102 | .idea/$CACHE_FILE$
103 |
104 | # CodeStream plugin
105 | # https://plugins.jetbrains.com/plugin/12206-codestream
106 | .idea/codestream.xml
107 |
108 | ### Python ###
109 | # Byte-compiled / optimized / DLL files
110 | __pycache__/
111 | *.py[cod]
112 | *$py.class
113 |
114 | # C extensions
115 | *.so
116 |
117 | # Distribution / packaging
118 | .Python
119 | build/
120 | develop-eggs/
121 | dist/
122 | downloads/
123 | eggs/
124 | .eggs/
125 | lib/
126 | lib64/
127 | parts/
128 | sdist/
129 | var/
130 | wheels/
131 | pip-wheel-metadata/
132 | share/python-wheels/
133 | *.egg-info/
134 | .installed.cfg
135 | *.egg
136 | MANIFEST
137 |
138 | # PyInstaller
139 | # Usually these files are written by a python script from a template
140 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
141 | *.manifest
142 | *.spec
143 |
144 | # Installer logs
145 | pip-log.txt
146 | pip-delete-this-directory.txt
147 |
148 | # Unit test / coverage reports
149 | htmlcov/
150 | .tox/
151 | .nox/
152 | .coverage
153 | .coverage.*
154 | .cache
155 | nosetests.xml
156 | coverage.xml
157 | *.cover
158 | *.py,cover
159 | .hypothesis/
160 | .pytest_cache/
161 | pytestdebug.log
162 |
163 | # Translations
164 | *.mo
165 | *.pot
166 |
167 | # Django stuff:
168 | *.log
169 | local_settings.py
170 | db.sqlite3
171 | db.sqlite3-journal
172 |
173 | # Flask stuff:
174 | instance/
175 | .webassets-cache
176 |
177 | # Scrapy stuff:
178 | .scrapy
179 |
180 | # Sphinx documentation
181 | docs/_build/
182 | docs/_build/
183 |
184 | # PyBuilder
185 | target/
186 |
187 | # Jupyter Notebook
188 | .ipynb_checkpoints
189 |
190 | # IPython
191 | profile_default/
192 | ipython_config.py
193 |
194 | # pyenv
195 | .python-version
196 |
197 | # pipenv
198 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
199 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
200 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
201 | # install all needed dependencies.
202 | #Pipfile.lock
203 |
204 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
205 | __pypackages__/
206 |
207 | # Celery stuff
208 | celerybeat-schedule
209 | celerybeat.pid
210 |
211 | # SageMath parsed files
212 | *.sage.py
213 |
214 | # Environments
215 | .env
216 | .venv
217 | env/
218 | venv/
219 | ENV/
220 | env.bak/
221 | venv.bak/
222 |
223 | # Spyder project settings
224 | .spyderproject
225 | .spyproject
226 |
227 | # Rope project settings
228 | .ropeproject
229 |
230 | # mkdocs documentation
231 | /site
232 |
233 | # mypy
234 | .mypy_cache/
235 | .dmypy.json
236 | dmypy.json
237 |
238 | # Pyre type checker
239 | .pyre/
240 |
241 | # pytype static type analyzer
242 | .pytype/
243 |
244 | ### venv ###
245 | # Virtualenv
246 | # http://iamzed.com/2009/05/07/a-primer-on-virtualenv/
247 | [Bb]in
248 | [Ii]nclude
249 | [Ll]ib
250 | [Ll]ib64
251 | [Ll]ocal
252 | [Ss]cripts
253 | pyvenv.cfg
254 | pip-selfcheck.json
255 |
256 | # End of https://www.toptal.com/developers/gitignore/api/python,pycharm,venv
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Datasource local storage ignored files
5 | /../../../../:\kickbase\kickbase-python-api\.idea/dataSources/
6 | /dataSources.local.xml
7 | # Editor-based HTTP Client requests
8 | /httpRequests/
9 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/kickbase-api-python.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 kevinskyba
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Kickbase_API
2 | [Kickbase](https://www.kickbase.com/) API for Python 3. This work is unofficial and not related to kickbase in any way. All of this was done for scientific reasons only and you should not use it for anything else but for your personal learning!
3 |
4 | ## Installation
5 | - From pypi:
6 | `pip3 install kickbase_api`
7 |
8 | ## Requirements
9 | - [requests](https://github.com/kennethreitz/requests)
10 |
11 | ## Usage
12 | ```python
13 | from kickbase_api.kickbase import Kickbase
14 | kickbase = Kickbase()
15 | user, leagues = kickbase.login("username", "password")
16 | ```
17 |
18 | ## Docs
19 | The docs for this library can be found [here](https://kevinskyba.github.io/kickbase-api-python/).
20 |
21 | ## API
22 | This library is based on [Kickbase API Doc](https://github.com/kevinskyba/kickbase-api-doc).
23 |
24 | ## License
25 |
26 | [MIT License](LICENSE.md)
--------------------------------------------------------------------------------
/docs/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinskyba/kickbase-api-python/b444e25e265a6e586824d404f7e23da718f9ef4a/docs/.nojekyll
--------------------------------------------------------------------------------
/docs/exceptions.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.exceptions API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.exceptions
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | class KickbaseException(Exception):
30 | pass
31 |
32 | class KickbaseLoginException(Exception):
33 | pass
34 |
35 |
36 |
38 |
40 |
42 |
43 |
44 |
45 |
46 | class KickbaseException
47 | (...)
48 |
49 | -
50 |
Common base class for all non-exit exceptions.
51 |
52 |
53 | Expand source code
54 |
55 | class KickbaseException(Exception):
56 | pass
57 |
58 | Ancestors
59 |
60 | - builtins.Exception
61 | - builtins.BaseException
62 |
63 |
64 |
65 | class KickbaseLoginException
66 | (...)
67 |
68 | -
69 |
Common base class for all non-exit exceptions.
70 |
71 |
72 | Expand source code
73 |
74 | class KickbaseLoginException(Exception):
75 | pass
76 |
77 | Ancestors
78 |
79 | - builtins.Exception
80 | - builtins.BaseException
81 |
82 |
83 |
84 |
85 |
86 |
109 |
110 |
113 |
114 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Package kickbase_api
23 |
24 |
26 |
43 |
45 |
47 |
49 |
50 |
65 |
66 |
69 |
70 |
--------------------------------------------------------------------------------
/docs/models/base_model.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.base_model API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.base_model
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | class BaseModel:
30 | _json_mapping = {
31 | }
32 |
33 | _json_transform = {
34 | }
35 |
36 | def __init__(self, d: dict):
37 | for key in d.keys():
38 | value = d[key]
39 |
40 | # Transform if necessary
41 | if key in self._json_transform:
42 | value = self._json_transform[key](value)
43 |
44 | if key in self._json_mapping.keys():
45 | setattr(self, self._json_mapping[key], value)
46 | setattr(self, key, value)
47 |
48 |
49 |
51 |
53 |
55 |
56 |
57 |
58 |
59 | class BaseModel
60 | (d: dict)
61 |
62 | -
63 |
64 |
65 |
66 | Expand source code
67 |
68 | class BaseModel:
69 | _json_mapping = {
70 | }
71 |
72 | _json_transform = {
73 | }
74 |
75 | def __init__(self, d: dict):
76 | for key in d.keys():
77 | value = d[key]
78 |
79 | # Transform if necessary
80 | if key in self._json_transform:
81 | value = self._json_transform[key](value)
82 |
83 | if key in self._json_mapping.keys():
84 | setattr(self, self._json_mapping[key], value)
85 | setattr(self, key, value)
86 |
87 | Subclasses
88 |
109 |
110 |
111 |
112 |
113 |
133 |
134 |
137 |
138 |
--------------------------------------------------------------------------------
/docs/models/feed_item_comment.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.feed_item_comment API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.feed_item_comment
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from datetime import datetime
30 |
31 | from kickbase_api.models._transforms import parse_date
32 | from kickbase_api.models.base_model import BaseModel
33 |
34 |
35 | class FeedItemComment(BaseModel):
36 | comment: str = None
37 | date: datetime = None
38 | user_id: str = None
39 | user_name: str = None
40 | user_profile_path: str = None
41 |
42 | def __init__(self, d: dict):
43 | self._json_transform = {
44 | "date": parse_date
45 | }
46 | self._json_mapping = {
47 | "userId": "user_id",
48 | "userName": "user_name",
49 | "userProfileUrl": "user_profile_path",
50 | }
51 | super().__init__(d)
52 |
53 |
54 |
56 |
58 |
60 |
61 |
62 |
63 |
67 | -
68 |
69 |
70 |
71 | Expand source code
72 |
73 | class FeedItemComment(BaseModel):
74 | comment: str = None
75 | date: datetime = None
76 | user_id: str = None
77 | user_name: str = None
78 | user_profile_path: str = None
79 |
80 | def __init__(self, d: dict):
81 | self._json_transform = {
82 | "date": parse_date
83 | }
84 | self._json_mapping = {
85 | "userId": "user_id",
86 | "userName": "user_name",
87 | "userProfileUrl": "user_profile_path",
88 | }
89 | super().__init__(d)
90 |
91 | Ancestors
92 |
95 | Class variables
96 |
97 |
98 | -
99 |
100 |
101 |
102 | -
103 |
104 |
105 |
106 | -
107 |
108 |
109 |
110 | -
111 |
112 |
113 |
114 | -
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
149 |
150 |
153 |
154 |
--------------------------------------------------------------------------------
/docs/models/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models
23 |
24 |
26 |
115 |
117 |
119 |
121 |
122 |
160 |
161 |
164 |
165 |
--------------------------------------------------------------------------------
/docs/models/league_info.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.league_info API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.league_info
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from kickbase_api.models.base_model import BaseModel
30 |
31 |
32 | class LeagueInfo(BaseModel):
33 | activity_index: float = None
34 | total_transfers: int = None
35 | active_users: int = None
36 | max_users: int = None
37 | average_points: int = None
38 |
39 | rs: int = None
40 | us: int = None
41 |
42 | def __init__(self, d: dict):
43 | self._json_transform = {
44 | }
45 | self._json_mapping = {
46 | "ai": "activity_index",
47 | "t": "total_transfers",
48 | "au": "active_users",
49 | "mu": "max_users",
50 | "ap": "average_points"
51 | }
52 |
53 | super().__init__(d)
54 |
55 |
56 |
58 |
60 |
62 |
63 |
64 |
65 |
66 | class LeagueInfo
67 | (d: dict)
68 |
69 | -
70 |
71 |
72 |
73 | Expand source code
74 |
75 | class LeagueInfo(BaseModel):
76 | activity_index: float = None
77 | total_transfers: int = None
78 | active_users: int = None
79 | max_users: int = None
80 | average_points: int = None
81 |
82 | rs: int = None
83 | us: int = None
84 |
85 | def __init__(self, d: dict):
86 | self._json_transform = {
87 | }
88 | self._json_mapping = {
89 | "ai": "activity_index",
90 | "t": "total_transfers",
91 | "au": "active_users",
92 | "mu": "max_users",
93 | "ap": "average_points"
94 | }
95 |
96 | super().__init__(d)
97 |
98 | Ancestors
99 |
102 | Class variables
103 |
104 | var active_users : int
105 | -
106 |
107 |
108 | var activity_index : float
109 | -
110 |
111 |
112 | var average_points : int
113 | -
114 |
115 |
116 | var max_users : int
117 | -
118 |
119 |
120 | var rs : int
121 | -
122 |
123 |
124 | var total_transfers : int
125 | -
126 |
127 |
128 | var us : int
129 | -
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
166 |
167 |
170 |
171 |
--------------------------------------------------------------------------------
/docs/models/league_match_day_user_stats.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.league_match_day_user_stats API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.league_match_day_user_stats
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from datetime import datetime
30 |
31 | from kickbase_api.models._transforms import parse_date, parse_key_value_array_to_dict
32 | from kickbase_api.models.base_model import BaseModel
33 |
34 |
35 | class LeagueMatchDayUserStats(BaseModel):
36 | season_id: str = None
37 | day: int = None
38 | placement: int = None
39 | points: int = None
40 |
41 | def __init__(self, d: dict):
42 | self._json_transform = {
43 | }
44 | self._json_mapping = {
45 | "s": "season_id",
46 | "p": "placement",
47 | "pt": "points"
48 | }
49 |
50 | super().__init__(d)
51 |
52 |
53 |
55 |
57 |
59 |
60 |
61 |
62 |
63 | class LeagueMatchDayUserStats
64 | (d: dict)
65 |
66 | -
67 |
68 |
69 |
70 | Expand source code
71 |
72 | class LeagueMatchDayUserStats(BaseModel):
73 | season_id: str = None
74 | day: int = None
75 | placement: int = None
76 | points: int = None
77 |
78 | def __init__(self, d: dict):
79 | self._json_transform = {
80 | }
81 | self._json_mapping = {
82 | "s": "season_id",
83 | "p": "placement",
84 | "pt": "points"
85 | }
86 |
87 | super().__init__(d)
88 |
89 | Ancestors
90 |
93 | Class variables
94 |
95 | var day : int
96 | -
97 |
98 |
99 | var placement : int
100 | -
101 |
102 |
103 | var points : int
104 | -
105 |
106 |
107 | var season_id : str
108 | -
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
142 |
143 |
146 |
147 |
--------------------------------------------------------------------------------
/docs/models/league_me.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.league_me API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.league_me
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from datetime import datetime
30 |
31 | from kickbase_api.models._transforms import parse_date
32 | from kickbase_api.models.base_model import BaseModel
33 |
34 |
35 | class LeagueMe(BaseModel):
36 | budget: float = None
37 | team_value: float = None
38 | placement: int = None
39 | points: int = None
40 | ttm: int = None
41 | cmd: int = None
42 | flags: int = None
43 | se: bool = None
44 | csid: int = None
45 | nt: bool = None
46 | ntv: float = None
47 | nb: float = None
48 | ga: bool = None
49 | un: int = None
50 |
51 | def __init__(self, d: dict):
52 | self._json_transform = {
53 | }
54 | self._json_mapping = {
55 | "teamValue": "team_value"
56 | }
57 |
58 | super().__init__(d)
59 |
60 |
61 |
63 |
65 |
67 |
68 |
69 |
70 |
71 | class LeagueMe
72 | (d: dict)
73 |
74 | -
75 |
76 |
77 |
78 | Expand source code
79 |
80 | class LeagueMe(BaseModel):
81 | budget: float = None
82 | team_value: float = None
83 | placement: int = None
84 | points: int = None
85 | ttm: int = None
86 | cmd: int = None
87 | flags: int = None
88 | se: bool = None
89 | csid: int = None
90 | nt: bool = None
91 | ntv: float = None
92 | nb: float = None
93 | ga: bool = None
94 | un: int = None
95 |
96 | def __init__(self, d: dict):
97 | self._json_transform = {
98 | }
99 | self._json_mapping = {
100 | "teamValue": "team_value"
101 | }
102 |
103 | super().__init__(d)
104 |
105 | Ancestors
106 |
109 | Class variables
110 |
111 | var budget : float
112 | -
113 |
114 |
115 | var cmd : int
116 | -
117 |
118 |
119 | var csid : int
120 | -
121 |
122 |
123 | var flags : int
124 | -
125 |
126 |
127 | var ga : bool
128 | -
129 |
130 |
131 | var nb : float
132 | -
133 |
134 |
135 | var nt : bool
136 | -
137 |
138 |
139 | var ntv : float
140 | -
141 |
142 |
143 | var placement : int
144 | -
145 |
146 |
147 | var points : int
148 | -
149 |
150 |
151 | var se : bool
152 | -
153 |
154 |
155 | var team_value : float
156 | -
157 |
158 |
159 | var ttm : int
160 | -
161 |
162 |
163 | var un : int
164 | -
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
208 |
209 |
212 |
213 |
--------------------------------------------------------------------------------
/docs/models/league_user_data.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.league_user_data API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.league_user_data
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from datetime import datetime
30 |
31 | from kickbase_api.models._transforms import parse_date
32 | from kickbase_api.models.base_model import BaseModel
33 |
34 |
35 | class LeagueUserData(BaseModel):
36 | id: str = None
37 | email: str = None
38 | name: str = None
39 | profile_image_path: str = None
40 | cover_image_path: str = None
41 | status: int = None
42 | perms: [int] = None
43 |
44 | def __init__(self, d: dict):
45 | self._json_transform = {
46 | }
47 | self._json_mapping = {
48 | "profile": "profile_image_path",
49 | "cover": "cover_image_path"
50 | }
51 |
52 | super().__init__(d)
53 |
54 |
55 |
57 |
59 |
61 |
62 |
63 |
64 |
65 | class LeagueUserData
66 | (d: dict)
67 |
68 | -
69 |
70 |
71 |
72 | Expand source code
73 |
74 | class LeagueUserData(BaseModel):
75 | id: str = None
76 | email: str = None
77 | name: str = None
78 | profile_image_path: str = None
79 | cover_image_path: str = None
80 | status: int = None
81 | perms: [int] = None
82 |
83 | def __init__(self, d: dict):
84 | self._json_transform = {
85 | }
86 | self._json_mapping = {
87 | "profile": "profile_image_path",
88 | "cover": "cover_image_path"
89 | }
90 |
91 | super().__init__(d)
92 |
93 | Ancestors
94 |
97 | Class variables
98 |
99 | var cover_image_path : str
100 | -
101 |
102 |
103 | var email : str
104 | -
105 |
106 |
107 | var id : str
108 | -
109 |
110 |
111 | var name : str
112 | -
113 |
114 |
115 | var perms : []
116 | -
117 |
118 |
119 | var profile_image_path : str
120 | -
121 |
122 |
123 | var status : int
124 | -
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
161 |
162 |
165 |
166 |
--------------------------------------------------------------------------------
/docs/models/league_user_profile_season_stats.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.league_user_profile_season_stats API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.league_user_profile_season_stats
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from datetime import datetime
30 |
31 | from kickbase_api.models._transforms import parse_date, parse_key_value_array_to_dict
32 | from kickbase_api.models.base_model import BaseModel
33 | from kickbase_api.models.league_match_day_user_stats import LeagueMatchDayUserStats
34 |
35 |
36 | class LeagueUserProfileSeasonStats(BaseModel):
37 | season_id: str = None
38 | season: str = None
39 |
40 | points: int = None
41 | average_points: int = None
42 | max_points: int = None
43 | wins: int = None
44 |
45 | match_days: [LeagueMatchDayUserStats] = None
46 |
47 | def __init__(self, d: dict):
48 | self._json_transform = {
49 | "matchDays": lambda v: [LeagueMatchDayUserStats(_d) for _d in v]
50 | }
51 | self._json_mapping = {
52 | "seasonId": "season_id",
53 | "averagePoints": "average_points",
54 | "maxPoints": "max_points",
55 | "matchDays": "match_days"
56 | }
57 |
58 | super().__init__(d)
59 |
60 |
61 |
63 |
65 |
67 |
68 |
69 |
70 |
71 | class LeagueUserProfileSeasonStats
72 | (d: dict)
73 |
74 | -
75 |
76 |
77 |
78 | Expand source code
79 |
80 | class LeagueUserProfileSeasonStats(BaseModel):
81 | season_id: str = None
82 | season: str = None
83 |
84 | points: int = None
85 | average_points: int = None
86 | max_points: int = None
87 | wins: int = None
88 |
89 | match_days: [LeagueMatchDayUserStats] = None
90 |
91 | def __init__(self, d: dict):
92 | self._json_transform = {
93 | "matchDays": lambda v: [LeagueMatchDayUserStats(_d) for _d in v]
94 | }
95 | self._json_mapping = {
96 | "seasonId": "season_id",
97 | "averagePoints": "average_points",
98 | "maxPoints": "max_points",
99 | "matchDays": "match_days"
100 | }
101 |
102 | super().__init__(d)
103 |
104 | Ancestors
105 |
108 | Class variables
109 |
110 | var average_points : int
111 | -
112 |
113 |
114 | var match_days : [LeagueMatchDayUserStats'>]
115 | -
116 |
117 |
118 | var max_points : int
119 | -
120 |
121 |
122 | var points : int
123 | -
124 |
125 |
126 | var season : str
127 | -
128 |
129 |
130 | var season_id : str
131 | -
132 |
133 |
134 | var wins : int
135 | -
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
172 |
173 |
176 |
177 |
--------------------------------------------------------------------------------
/docs/models/league_user_stats.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.league_user_stats API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.league_user_stats
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from datetime import datetime
30 |
31 | from kickbase_api.models._transforms import parse_date, parse_key_value_array_to_dict
32 | from kickbase_api.models.base_model import BaseModel
33 | from kickbase_api.models.league_user_season_stats import LeagueUserSeasonStats
34 |
35 |
36 | class LeagueUserStats(BaseModel):
37 | name: str = None
38 | profile_image_path: str = None
39 | cover_image_path: str = None
40 | flags: int = None
41 | placement: int = None
42 | points: int = None
43 | team_value: float = None
44 |
45 | seasons: [LeagueUserSeasonStats] = None
46 | team_values: {datetime: float}
47 |
48 | def __init__(self, d: dict):
49 | self._json_transform = {
50 | "teamValues": parse_key_value_array_to_dict(lambda o: parse_date(o["d"]), lambda o: o["v"]),
51 | "seasons": lambda v: [LeagueUserSeasonStats(_d) for _d in v]
52 | }
53 | self._json_mapping = {
54 | "profileUrl": "profile_image_path",
55 | "coverUrl": "cover_image_path",
56 | "teamValue": "team_value",
57 | "teamValues": "team_values"
58 | }
59 |
60 | super().__init__(d)
61 |
62 |
63 |
65 |
67 |
69 |
70 |
71 |
72 |
73 | class LeagueUserStats
74 | (d: dict)
75 |
76 | -
77 |
78 |
79 |
80 | Expand source code
81 |
82 | class LeagueUserStats(BaseModel):
83 | name: str = None
84 | profile_image_path: str = None
85 | cover_image_path: str = None
86 | flags: int = None
87 | placement: int = None
88 | points: int = None
89 | team_value: float = None
90 |
91 | seasons: [LeagueUserSeasonStats] = None
92 | team_values: {datetime: float}
93 |
94 | def __init__(self, d: dict):
95 | self._json_transform = {
96 | "teamValues": parse_key_value_array_to_dict(lambda o: parse_date(o["d"]), lambda o: o["v"]),
97 | "seasons": lambda v: [LeagueUserSeasonStats(_d) for _d in v]
98 | }
99 | self._json_mapping = {
100 | "profileUrl": "profile_image_path",
101 | "coverUrl": "cover_image_path",
102 | "teamValue": "team_value",
103 | "teamValues": "team_values"
104 | }
105 |
106 | super().__init__(d)
107 |
108 | Ancestors
109 |
112 | Class variables
113 |
114 | var cover_image_path : str
115 | -
116 |
117 |
118 | var flags : int
119 | -
120 |
121 |
122 | var name : str
123 | -
124 |
125 |
126 | var placement : int
127 | -
128 |
129 |
130 | var points : int
131 | -
132 |
133 |
134 | var profile_image_path : str
135 | -
136 |
137 |
138 | var seasons : [LeagueUserSeasonStats'>]
139 | -
140 |
141 |
142 | var team_value : float
143 | -
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
181 |
182 |
185 |
186 |
--------------------------------------------------------------------------------
/docs/models/lineup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.lineup API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.lineup
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from kickbase_api.models.base_model import BaseModel
30 |
31 |
32 | class LineUp(BaseModel):
33 | type: str = None
34 | players: [str] = None
35 |
36 | def __init__(self, d: dict):
37 | self._json_transform = {
38 | }
39 | self._json_mapping = {
40 | }
41 | super().__init__(d)
42 |
43 |
44 |
46 |
48 |
50 |
51 |
52 |
53 |
54 | class LineUp
55 | (d: dict)
56 |
57 | -
58 |
59 |
60 |
61 | Expand source code
62 |
63 | class LineUp(BaseModel):
64 | type: str = None
65 | players: [str] = None
66 |
67 | def __init__(self, d: dict):
68 | self._json_transform = {
69 | }
70 | self._json_mapping = {
71 | }
72 | super().__init__(d)
73 |
74 | Ancestors
75 |
78 | Class variables
79 |
80 | var players : []
81 | -
82 |
83 |
84 | var type : str
85 | -
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
117 |
118 |
121 |
122 |
--------------------------------------------------------------------------------
/docs/models/market.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.market API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.market
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from datetime import datetime
30 | from enum import Enum
31 |
32 | from kickbase_api.models._transforms import parse_date
33 | from kickbase_api.models.base_model import BaseModel
34 | from kickbase_api.models.feed_meta import FeedMeta
35 | from kickbase_api.models.market_player import MarketPlayer
36 | from kickbase_api.models.market_player_offer import MarketPlayerOffer
37 | from kickbase_api.models.player import Player, _map_player_position, _map_player_status, PlayerPosition, PlayerStatus
38 |
39 |
40 | class Market(BaseModel):
41 | closed: bool = None
42 | players: [MarketPlayer] = None
43 |
44 | def __init__(self, d: dict):
45 | self._json_transform = {
46 | "players": lambda v: [MarketPlayer(v_) for v_ in v]
47 | }
48 | self._json_mapping = {
49 | "c": "closed"
50 | }
51 | super().__init__(d)
52 |
53 |
54 |
56 |
58 |
60 |
61 |
62 |
63 |
64 | class Market
65 | (d: dict)
66 |
67 | -
68 |
69 |
70 |
71 | Expand source code
72 |
73 | class Market(BaseModel):
74 | closed: bool = None
75 | players: [MarketPlayer] = None
76 |
77 | def __init__(self, d: dict):
78 | self._json_transform = {
79 | "players": lambda v: [MarketPlayer(v_) for v_ in v]
80 | }
81 | self._json_mapping = {
82 | "c": "closed"
83 | }
84 | super().__init__(d)
85 |
86 | Ancestors
87 |
90 | Class variables
91 |
92 | var closed : bool
93 | -
94 |
95 |
96 | var players : [MarketPlayer'>]
97 | -
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
129 |
130 |
133 |
134 |
--------------------------------------------------------------------------------
/docs/models/market_player_offer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.market_player_offer API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.market_player_offer
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from datetime import datetime
30 |
31 | from kickbase_api.models._transforms import parse_date
32 | from kickbase_api.models.base_model import BaseModel
33 |
34 |
35 | class MarketPlayerOffer(BaseModel):
36 | id: str = None
37 | price: int = None
38 | date: datetime = None
39 | valid_until_date: datetime = None
40 |
41 | def __init__(self, d: dict):
42 | self._json_transform = {
43 | "date": parse_date,
44 | "validUntilDate": parse_date
45 | }
46 | self._json_mapping = {
47 | "validUntilDate": "valid_until_date"
48 | }
49 | super().__init__(d)
50 |
51 |
52 |
54 |
56 |
58 |
59 |
60 |
61 |
62 | class MarketPlayerOffer
63 | (d: dict)
64 |
65 | -
66 |
67 |
68 |
69 | Expand source code
70 |
71 | class MarketPlayerOffer(BaseModel):
72 | id: str = None
73 | price: int = None
74 | date: datetime = None
75 | valid_until_date: datetime = None
76 |
77 | def __init__(self, d: dict):
78 | self._json_transform = {
79 | "date": parse_date,
80 | "validUntilDate": parse_date
81 | }
82 | self._json_mapping = {
83 | "validUntilDate": "valid_until_date"
84 | }
85 | super().__init__(d)
86 |
87 | Ancestors
88 |
91 | Class variables
92 |
93 | var date : datetime.datetime
94 | -
95 |
96 |
97 | var id : str
98 | -
99 |
100 |
101 | var price : int
102 | -
103 |
104 |
105 | var valid_until_date : datetime.datetime
106 | -
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
140 |
141 |
144 |
145 |
--------------------------------------------------------------------------------
/docs/models/response/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.response API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.response
23 |
24 |
26 |
35 |
37 |
39 |
41 |
42 |
60 |
61 |
64 |
65 |
--------------------------------------------------------------------------------
/docs/models/response/league_stats_response.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.response.league_stats_response API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.response.league_stats_response
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from kickbase_api.models.league_match_day_stats_data import LeagueMatchDayStatsData
30 |
31 |
32 | class LeagueStatsResponse:
33 |
34 | current_day: int = None
35 | match_days: {int: [LeagueMatchDayStatsData]} = {}
36 |
37 | def __init__(self, d: dict):
38 | self.current_day = d["currentDay"]
39 | for match_day in d["matchDays"]:
40 | self.match_days[match_day["day"]] = [LeagueMatchDayStatsData(_d) for _d in match_day["users"]]
41 |
42 |
43 |
45 |
47 |
49 |
50 |
51 |
52 |
53 | class LeagueStatsResponse
54 | (d: dict)
55 |
56 | -
57 |
58 |
59 |
60 | Expand source code
61 |
62 | class LeagueStatsResponse:
63 |
64 | current_day: int = None
65 | match_days: {int: [LeagueMatchDayStatsData]} = {}
66 |
67 | def __init__(self, d: dict):
68 | self.current_day = d["currentDay"]
69 | for match_day in d["matchDays"]:
70 | self.match_days[match_day["day"]] = [LeagueMatchDayStatsData(_d) for _d in match_day["users"]]
71 |
72 | Class variables
73 |
74 | var current_day : int
75 | -
76 |
77 |
78 | var match_days : {: [LeagueMatchDayStatsData'>]}
79 | -
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
111 |
112 |
115 |
116 |
--------------------------------------------------------------------------------
/docs/models/user.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | kickbase_api.models.user API documentation
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Module kickbase_api.models.user
23 |
24 |
25 |
26 |
27 | Expand source code
28 |
29 | from kickbase_api.models.base_model import BaseModel
30 |
31 |
32 | class User(BaseModel):
33 | id: str = None
34 | email: str = None
35 | name: str = None
36 | notifications: int = None
37 | profile_image_path: str = None
38 |
39 | def __init__(self, d: dict):
40 | self._json_mapping = {
41 | "profile": "profile_image_path"
42 | }
43 | super().__init__(d)
44 |
45 |
46 |
48 |
50 |
52 |
53 |
54 |
55 |
56 | class User
57 | (d: dict)
58 |
59 | -
60 |
61 |
62 |
63 | Expand source code
64 |
65 | class User(BaseModel):
66 | id: str = None
67 | email: str = None
68 | name: str = None
69 | notifications: int = None
70 | profile_image_path: str = None
71 |
72 | def __init__(self, d: dict):
73 | self._json_mapping = {
74 | "profile": "profile_image_path"
75 | }
76 | super().__init__(d)
77 |
78 | Ancestors
79 |
82 | Class variables
83 |
84 | var email : str
85 | -
86 |
87 |
88 | var id : str
89 | -
90 |
91 |
92 | var name : str
93 | -
94 |
95 |
96 | var notifications : int
97 | -
98 |
99 |
100 | var profile_image_path : str
101 | -
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
136 |
137 |
140 |
141 |
--------------------------------------------------------------------------------
/kickbase_api/__init__.py:
--------------------------------------------------------------------------------
1 | __version__ = "0.0.8"
2 |
--------------------------------------------------------------------------------
/kickbase_api/exceptions.py:
--------------------------------------------------------------------------------
1 |
2 | class KickbaseException(Exception):
3 | pass
4 |
5 | class KickbaseLoginException(Exception):
6 | pass
7 |
--------------------------------------------------------------------------------
/kickbase_api/models/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinskyba/kickbase-api-python/b444e25e265a6e586824d404f7e23da718f9ef4a/kickbase_api/models/__init__.py
--------------------------------------------------------------------------------
/kickbase_api/models/_transforms.py:
--------------------------------------------------------------------------------
1 | from array import array
2 | from datetime import datetime
3 | from typing import Callable
4 |
5 |
6 | def parse_date(s: str) -> datetime:
7 | try:
8 | return datetime.strptime(s, "%Y-%m-%dT%H:%M:%S%z")
9 | except:
10 | return datetime.strptime(s+"+0000", "%Y-%m-%dT%H:%M:%S%z")
11 |
12 |
13 | def date_to_string(d: datetime) -> str:
14 | return d.strftime("%Y-%m-%dT%H:%M:%S%z")
15 |
16 |
17 | def parse_key_value_array_to_dict(key: Callable[[array], any], value: Callable[[array], any]):
18 | def _int(a: []) -> dict:
19 | ret = {}
20 | for v in a:
21 | ret[key(v)] = value(v)
22 | return ret
23 | return _int
24 |
--------------------------------------------------------------------------------
/kickbase_api/models/base_model.py:
--------------------------------------------------------------------------------
1 | class BaseModel:
2 | _json_mapping = {
3 | }
4 |
5 | _json_transform = {
6 | }
7 |
8 | def __init__(self, d: dict = {}):
9 | for key in d.keys():
10 | value = d[key]
11 |
12 | # Transform if necessary
13 | if key in self._json_transform:
14 | value = self._json_transform[key](value)
15 |
16 | if key in self._json_mapping.keys():
17 | setattr(self, self._json_mapping[key], value)
18 | setattr(self, key, value)
19 |
--------------------------------------------------------------------------------
/kickbase_api/models/chat_item.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date
4 |
5 |
6 | class ChatItem:
7 | id: str = None
8 | league_id: str = None
9 | message: str = None
10 | date: datetime = None
11 | user_id: str = None
12 | username: str = None
13 | seen_by: [str] = []
14 |
15 | def __init__(self, d: dict = {}):
16 | if "name" in d:
17 | self.id = d["name"]
18 | if "fields" in d:
19 | fields = d["fields"]
20 | if "leagueId" in fields:
21 | self.league_id = fields["leagueId"]["stringValue"]
22 | if "message" in fields:
23 | self.message = fields["message"]["stringValue"]
24 | if "date" in fields:
25 | self.date = parse_date(fields["date"]["stringValue"])
26 | if "userId" in fields:
27 | self.user_id = fields["userId"]["stringValue"]
28 | if "username" in fields:
29 | self.username = fields["username"]["stringValue"]
30 | if "seenBy" in fields:
31 | array = fields["seenBy"]["arrayValue"]["values"]
32 | for ar in array:
33 | self.seen_by.append(ar["stringValue"])
34 |
--------------------------------------------------------------------------------
/kickbase_api/models/feed_item.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 | from enum import IntEnum
3 |
4 | from kickbase_api.models._transforms import parse_date
5 | from kickbase_api.models.base_model import BaseModel
6 | from kickbase_api.models.feed_meta import FeedMeta
7 |
8 |
9 | class FeedType(IntEnum):
10 | BUY = 12
11 | FEED_AD_BANNER = 15
12 | FEED_COMMENT = 14
13 | MATCH_DAY_SUMMARY = 8
14 | MATCH_DAY_SUMMARY_V2 = 17
15 | NEWS = 1
16 | NEWS_V2 = 16
17 | NEW_PLAYER_ON_TM = 3
18 | PLAYER_MATCH_DAY_SUMMARY = 10
19 | SALE = 2
20 | STATUS_MESSAGE = 9
21 | TYPE_EMPTY = 20
22 | USER_FOUNDED_LEAGUE = 6
23 | USER_INVITED_OTHER_TO_LEAGUE = 7
24 | USER_JOINED_LEAGUE = 5
25 | USER_LEFT_LEAGUE = 13
26 | USER_MATCH_DAY_SUMMARY = 11
27 | PLAYER_PROFILE_STATUS = 14
28 | PREDICTED_LINEUP = 18
29 | TRANSFER_V2 = 15
30 | TYPE_GOOGLE_ADS = 500
31 |
32 |
33 |
34 | UNKNOWN = 9999999999
35 |
36 |
37 | def _map_feed_type(v):
38 | try:
39 | return FeedType(v)
40 | except:
41 | return FeedType.UNKNOWN
42 |
43 |
44 | class FeedItem(BaseModel):
45 | id: str = None
46 | comments: int = None
47 | date: datetime = None
48 | age: int = None
49 | type: FeedType = None
50 | source: int = None
51 | meta: FeedMeta = None
52 | season_id: int = None
53 |
54 | def __init__(self, d: dict = {}):
55 | self._json_transform = {
56 | "date": parse_date,
57 | "meta": FeedMeta,
58 | "type": _map_feed_type
59 | }
60 | self._json_mapping = {
61 | "seasonId": "season_id"
62 | }
63 | super().__init__(d)
64 |
--------------------------------------------------------------------------------
/kickbase_api/models/feed_item_comment.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date
4 | from kickbase_api.models.base_model import BaseModel
5 |
6 |
7 | class FeedItemComment(BaseModel):
8 | comment: str = None
9 | date: datetime = None
10 | user_id: str = None
11 | user_name: str = None
12 | user_profile_path: str = None
13 |
14 | def __init__(self, d: dict = {}):
15 | self._json_transform = {
16 | "date": parse_date
17 | }
18 | self._json_mapping = {
19 | "userId": "user_id",
20 | "userName": "user_name",
21 | "userProfileUrl": "user_profile_path",
22 | }
23 | super().__init__(d)
24 |
--------------------------------------------------------------------------------
/kickbase_api/models/feed_meta.py:
--------------------------------------------------------------------------------
1 | from kickbase_api.models.base_model import BaseModel
2 |
3 |
4 | class FeedMeta(BaseModel):
5 | average_points: int = None
6 | match_day: int = None
7 | maximum_points: int = None
8 | total_points: int = None
9 |
10 | buyer_picture: str = None
11 | buyer_id: str = None
12 | buyer_name: str = None
13 | buy_price: int = None
14 |
15 | seller_picture: str = None
16 | seller_id: str = None
17 | seller_name: str = None
18 | sell_price: int = None
19 |
20 | player_id: str = None
21 | player_first_name: str = None
22 | player_last_name: str = None
23 | player_known_name: str = None
24 |
25 | c: int = None
26 | e: int = None
27 |
28 | player_summary_r: int = None
29 | player_summary_y: int = None
30 | player_summary_yr: int = None
31 | assists: int = None
32 | game_time: int = None
33 | goals_shot: int = None
34 | match_type: int = None
35 | team_name: str = None
36 | opponent_team_id: int = None
37 | opponent_team_name: str = None
38 | goals_team_1: int = None
39 | goals_team_2: int = None
40 |
41 | founder_picture_path: str = None
42 | found_id: str = None
43 | founder_name: str = None
44 | league_name: str = None
45 | league_id: str = None
46 |
47 | inviter_profile_picture_path: str = None
48 | inviter_id: str = None
49 | inviter_name: str = None
50 |
51 | invited_name: str = None
52 |
53 | goal_keeper_points: int = None
54 | defenders_points: int = None
55 | midfielders_points: int = None
56 | forwarders_points: int = None
57 | total_points: int = None
58 |
59 | user_id: str = None
60 | user_name: str = None
61 |
62 | user_picture_path: str = None
63 | status_message: str = None
64 |
65 | news: str = None
66 |
67 | def __init__(self, d: dict = {}):
68 | self._json_transform = {
69 | }
70 | self._json_mapping = {
71 | "a": "average_points",
72 | "day": "match_day",
73 | "m": "maximum_points",
74 | "t": "total_points",
75 | "bi": "buyer_picture",
76 | "bid": "buyer_id",
77 | "bn": "buyer_name",
78 | "p": "buy_price",
79 | # "p": "sell_price",
80 | "sn": "seller_name",
81 | "pid": "player_id",
82 | "pln": "player_last_name",
83 | "pkn": "player_known_name",
84 | "cr": "player_summary_r",
85 | "cy": "player_summary_y",
86 | "cyr": "player_summary_yr",
87 | # "a": "assists",
88 | # "t": "game_time",
89 | "g": "goals_shot",
90 | "h": "match_type",
91 | "tn": "team_name",
92 | "oid": "opponent_team_id",
93 | "otn": "opponent_team_name",
94 | "r1": "goals_team_1",
95 | "r2": "goals_team_2",
96 | "fi": "founder_picture_path",
97 | "fid": "found_id",
98 | "fn": "founder_name",
99 | "ln": "league_name",
100 | "li": "league_id",
101 | "ii": "inviter_profile_picture_path",
102 | "iid": "inviter_id",
103 | "in": "inviter_name",
104 | # "tn": "invited_name",
105 | "pg": "goal_keeper_points",
106 | "pd": "defenders_points",
107 | "pm": "midfielders_points",
108 | "pf": "forwarders_points",
109 | "pfn": "player_first_name",
110 | "pt": "total_points",
111 | "uid": "user_id",
112 | "un": "user_name",
113 | "ui": "user_picture_path",
114 | "s": "status_message",
115 | "sid": "seller_id",
116 | "n": "news"
117 | }
118 |
119 | super().__init__(d)
120 | self.sell_price = self.buy_price
121 | self.game_time = self.total_points
122 | self.assists = self.average_points
123 | self.invited_name = self.team_name
124 |
--------------------------------------------------------------------------------
/kickbase_api/models/gift.py:
--------------------------------------------------------------------------------
1 | from kickbase_api.models.base_model import BaseModel
2 |
3 |
4 | class Gift(BaseModel):
5 | is_available: bool = None
6 | amount: int = None
7 | level: int = None
8 |
9 | def __init__(self, d: dict = {}):
10 | self._json_mapping = {
11 | "isAvailable": "is_available"
12 | }
13 | super().__init__(d)
14 |
--------------------------------------------------------------------------------
/kickbase_api/models/league_data.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date
4 | from kickbase_api.models.base_model import BaseModel
5 |
6 |
7 | class LeagueData(BaseModel):
8 | id: str = None
9 | name: str = None
10 |
11 | creator: str = None
12 | creator_id: int = None
13 | creation_date: datetime = None
14 |
15 | activity_index: float = None
16 | total_transfers: int = None
17 | active_users: int = None
18 | max_users: int = None
19 | average_points: int = None
20 |
21 | pub: bool = None
22 | gm: int = None
23 |
24 | player_limit_active: bool = None
25 | player_limit: bool = None
26 |
27 | image_path: str = None
28 |
29 | def __init__(self, d: dict = {}):
30 | self._json_transform = {
31 | "creation": parse_date
32 | }
33 | self._json_mapping = {
34 | "creatorId": "creator_id",
35 | "creation": "creation_date",
36 | "mpl": "player_limit_active",
37 | "pl": "player_limit",
38 | "ci": "image_path",
39 | "ai": "activity_index",
40 | "t": "total_transfers",
41 | "au": "active_users",
42 | "mu": "max_users",
43 | "ap": "average_points"
44 | }
45 |
46 | super().__init__(d)
47 |
--------------------------------------------------------------------------------
/kickbase_api/models/league_info.py:
--------------------------------------------------------------------------------
1 | from kickbase_api.models.base_model import BaseModel
2 |
3 |
4 | class LeagueInfo(BaseModel):
5 | activity_index: float = None
6 | total_transfers: int = None
7 | active_users: int = None
8 | max_users: int = None
9 | average_points: int = None
10 |
11 | rs: int = None
12 | us: int = None
13 |
14 | def __init__(self, d: dict = {}):
15 | self._json_transform = {
16 | }
17 | self._json_mapping = {
18 | "ai": "activity_index",
19 | "t": "total_transfers",
20 | "au": "active_users",
21 | "mu": "max_users",
22 | "ap": "average_points"
23 | }
24 |
25 | super().__init__(d)
26 |
--------------------------------------------------------------------------------
/kickbase_api/models/league_match_day_stats_data.py:
--------------------------------------------------------------------------------
1 | from kickbase_api.models.base_model import BaseModel
2 |
3 |
4 | class LeagueMatchDayStatsData(BaseModel):
5 | user_id: str = None
6 | day_earnings: float = None
7 | day_points: int = None
8 | day_placement: int = None
9 | day_tendency: int = None
10 | team_value: int = None
11 | points: int = None
12 | placement: int = None
13 | tendency: int = None
14 | flags: int = None
15 |
16 | def __init__(self, d: dict = {}):
17 | self._json_transform = {
18 | }
19 | self._json_mapping = {
20 | "dayEarnings": "day_earnings",
21 | "dayPoints": "day_points",
22 | "dayPlacement": "day_placement",
23 | "dayTendency": "day_tendency",
24 | "teamValue": "team_value"
25 | }
26 |
27 | super().__init__(d)
28 |
--------------------------------------------------------------------------------
/kickbase_api/models/league_match_day_user_stats.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date, parse_key_value_array_to_dict
4 | from kickbase_api.models.base_model import BaseModel
5 |
6 |
7 | class LeagueMatchDayUserStats(BaseModel):
8 | season_id: str = None
9 | day: int = None
10 | placement: int = None
11 | points: int = None
12 |
13 | def __init__(self, d: dict = {}):
14 | self._json_transform = {
15 | }
16 | self._json_mapping = {
17 | "s": "season_id",
18 | "p": "placement",
19 | "pt": "points"
20 | }
21 |
22 | super().__init__(d)
23 |
--------------------------------------------------------------------------------
/kickbase_api/models/league_me.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date
4 | from kickbase_api.models.base_model import BaseModel
5 |
6 |
7 | class LeagueMe(BaseModel):
8 | budget: float = None
9 | team_value: float = None
10 | placement: int = None
11 | points: int = None
12 | ttm: int = None
13 | cmd: int = None
14 | flags: int = None
15 | se: bool = None
16 | csid: int = None
17 | nt: bool = None
18 | ntv: float = None
19 | nb: float = None
20 | ga: bool = None
21 | un: int = None
22 |
23 | def __init__(self, d: dict = {}):
24 | self._json_transform = {
25 | }
26 | self._json_mapping = {
27 | "teamValue": "team_value"
28 | }
29 |
30 | super().__init__(d)
31 |
--------------------------------------------------------------------------------
/kickbase_api/models/league_user_data.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date
4 | from kickbase_api.models.base_model import BaseModel
5 |
6 |
7 | class LeagueUserData(BaseModel):
8 | id: str = None
9 | email: str = None
10 | name: str = None
11 | profile_image_path: str = None
12 | cover_image_path: str = None
13 | status: int = None
14 | perms: [int] = None
15 |
16 | def __init__(self, d: dict = {}):
17 | self._json_transform = {
18 | }
19 | self._json_mapping = {
20 | "profile": "profile_image_path",
21 | "cover": "cover_image_path"
22 | }
23 |
24 | super().__init__(d)
25 |
--------------------------------------------------------------------------------
/kickbase_api/models/league_user_profile.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date, parse_key_value_array_to_dict
4 | from kickbase_api.models.base_model import BaseModel
5 | from kickbase_api.models.league_user_profile_season_stats import LeagueUserProfileSeasonStats
6 |
7 |
8 | class LeagueUserProfile(BaseModel):
9 | flags: int = None
10 | perms: [int] = None
11 | level_achieved: int = None
12 | current_season_id: int = None
13 | placement: int = None
14 |
15 | points_gk: int = None
16 | points_def: int = None
17 | points_mf: int = None
18 | points_fwd: int = None
19 |
20 | team_value: float = None
21 | bought: int = None
22 | sold: int = None
23 | highest_team_value: float = None
24 |
25 | seasons: [LeagueUserProfileSeasonStats] = None
26 | team_values: {datetime: float}
27 |
28 | def __init__(self, d: dict = {}):
29 | self._json_transform = {
30 | "teamValues": parse_key_value_array_to_dict(lambda o: parse_date(o["d"]), lambda o: o["v"]),
31 | "seasons": lambda v: [LeagueUserProfileSeasonStats(_d) for _d in v]
32 | }
33 | self._json_mapping = {
34 | "levelAchieved": "level_achieved",
35 | "currentSeasonId": "current_season_id",
36 | "pointsGK": "points_gk",
37 | "pointsDEF": "points_def",
38 | "pointsMF": "points_mf",
39 | "pointsFWD": "points_fwd",
40 | "teamValue": "team_value",
41 | "highestTeamValue": "highest_team_value",
42 | "teamValues": "team_values"
43 | }
44 |
45 | super().__init__(d)
46 |
--------------------------------------------------------------------------------
/kickbase_api/models/league_user_profile_season_stats.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date, parse_key_value_array_to_dict
4 | from kickbase_api.models.base_model import BaseModel
5 | from kickbase_api.models.league_match_day_user_stats import LeagueMatchDayUserStats
6 |
7 |
8 | class LeagueUserProfileSeasonStats(BaseModel):
9 | season_id: str = None
10 | season: str = None
11 |
12 | points: int = None
13 | average_points: int = None
14 | max_points: int = None
15 | wins: int = None
16 |
17 | match_days: [LeagueMatchDayUserStats] = None
18 |
19 | def __init__(self, d: dict = {}):
20 | self._json_transform = {
21 | "matchDays": lambda v: [LeagueMatchDayUserStats(_d) for _d in v]
22 | }
23 | self._json_mapping = {
24 | "seasonId": "season_id",
25 | "averagePoints": "average_points",
26 | "maxPoints": "max_points",
27 | "matchDays": "match_days"
28 | }
29 |
30 | super().__init__(d)
31 |
--------------------------------------------------------------------------------
/kickbase_api/models/league_user_season_stats.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date, parse_key_value_array_to_dict
4 | from kickbase_api.models.base_model import BaseModel
5 |
6 |
7 | class LeagueUserSeasonStats(BaseModel):
8 | season_id: str = None
9 | season: str = None
10 |
11 | points: int = None
12 | average_points: int = None
13 | max_points: int = None
14 | min_points: int = None
15 |
16 | wins: int = None
17 | bought: int = None
18 | sold: int = None
19 |
20 | points_goal_keeper: int = None
21 | points_defenders: int = None
22 | points_mid_fielers: int = None
23 | points_forwards: int = None
24 |
25 | average_goal_keeper: int = None
26 | average_defenders: int = None
27 | average_mid_fielders: int = None
28 | average_forwards: int = None
29 |
30 | def __init__(self, d: dict = {}):
31 | self._json_transform = {
32 | }
33 | self._json_mapping = {
34 | "seasonId": "season_id",
35 | "averagePoints": "average_points",
36 | "maxPoints": "max_points",
37 | "minPoints": "min_points",
38 | "pointsGoalKeeper": "points_goal_keeper",
39 | "pointsDefenders": "points_defenders",
40 | "pointsMidFielders": "points_mid_fielers",
41 | "pointsForwards": "points_forwards",
42 | "averageGoalKeeper": "average_goal_keeper",
43 | "averageDefenders": "average_defenders",
44 | "averageMidFielders": "average_mid_fielders",
45 | "averageForwards": "average_forwards"
46 | }
47 |
48 | super().__init__(d)
49 |
--------------------------------------------------------------------------------
/kickbase_api/models/league_user_stats.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date, parse_key_value_array_to_dict
4 | from kickbase_api.models.base_model import BaseModel
5 | from kickbase_api.models.league_user_season_stats import LeagueUserSeasonStats
6 |
7 |
8 | class LeagueUserStats(BaseModel):
9 | name: str = None
10 | profile_image_path: str = None
11 | cover_image_path: str = None
12 | flags: int = None
13 | placement: int = None
14 | points: int = None
15 | team_value: float = None
16 |
17 | seasons: [LeagueUserSeasonStats] = None
18 | team_values: {datetime: float}
19 |
20 | def __init__(self, d: dict = {}):
21 | self._json_transform = {
22 | "teamValues": parse_key_value_array_to_dict(lambda o: parse_date(o["d"]), lambda o: o["v"]),
23 | "seasons": lambda v: [LeagueUserSeasonStats(_d) for _d in v]
24 | }
25 | self._json_mapping = {
26 | "profileUrl": "profile_image_path",
27 | "coverUrl": "cover_image_path",
28 | "teamValue": "team_value",
29 | "teamValues": "team_values"
30 | }
31 |
32 | super().__init__(d)
33 |
--------------------------------------------------------------------------------
/kickbase_api/models/lineup.py:
--------------------------------------------------------------------------------
1 | from kickbase_api.models.base_model import BaseModel
2 |
3 |
4 | class LineUp(BaseModel):
5 | type: str = None
6 | players: [str] = None
7 |
8 | def __init__(self, d: dict = {}):
9 | self._json_transform = {
10 | }
11 | self._json_mapping = {
12 | }
13 | super().__init__(d)
14 |
--------------------------------------------------------------------------------
/kickbase_api/models/market.py:
--------------------------------------------------------------------------------
1 | from kickbase_api.models.base_model import BaseModel
2 | from kickbase_api.models.market_player import MarketPlayer
3 |
4 |
5 | class Market(BaseModel):
6 | closed: bool = None
7 | players: [MarketPlayer] = None
8 |
9 | def __init__(self, d: dict = {}):
10 | self._json_transform = {
11 | "players": lambda v: [MarketPlayer(v_) for v_ in v]
12 | }
13 | self._json_mapping = {
14 | "c": "closed"
15 | }
16 | super().__init__(d)
--------------------------------------------------------------------------------
/kickbase_api/models/market_player.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date
4 | from kickbase_api.models.base_model import BaseModel
5 | from kickbase_api.models.market_player_offer import MarketPlayerOffer
6 | from kickbase_api.models.player import _map_player_position, _map_player_status, PlayerPosition, PlayerStatus
7 |
8 |
9 | class MarketPlayer(BaseModel):
10 | id: str = None
11 | first_name: str = None
12 | last_name: str = None
13 | average_points: int = None
14 | totalPoints: int = None
15 | market_value: int = None
16 | market_value_trend: int = None
17 | number: int = None
18 | position: PlayerPosition = None
19 | status: PlayerStatus = None
20 | team_id: str = None
21 | user_id: str = None
22 |
23 | profile_path: str = None
24 | profile_big_path: str = None
25 | team_path: str = None
26 | team_cover_path: str = None
27 |
28 | username: str = None
29 | user_profile_path: str = None
30 | price: int = None
31 | date: datetime = None
32 | expiry: int = None
33 | lus: int = None
34 |
35 | offers: [MarketPlayerOffer] = None
36 |
37 | def __init__(self, d: dict = {}):
38 | self._json_transform = {
39 | "position": _map_player_position,
40 | "status": _map_player_status,
41 | "date": parse_date,
42 | "offers": lambda v: [MarketPlayerOffer(v_) for v_ in v]
43 | }
44 | self._json_mapping = {
45 | "firstName": "first_name",
46 | "lastName": "last_name",
47 | "averagePoints": "average_points",
48 | "marketValue": "market_value",
49 | "marketValueTrend": "market_value_trend",
50 | "teamId": "team_id",
51 | "profile": "profile_path",
52 | "profileBig": "profile_big_path",
53 | "team": "team_path",
54 | "teamCover": "team_cover_path",
55 | "userId": "user_id",
56 |
57 | "userProfile": "user_profile_path",
58 | }
59 | super().__init__(d)
--------------------------------------------------------------------------------
/kickbase_api/models/market_player_offer.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | from kickbase_api.models._transforms import parse_date
4 | from kickbase_api.models.base_model import BaseModel
5 |
6 |
7 | class MarketPlayerOffer(BaseModel):
8 | id: str = None
9 | price: int = None
10 | date: datetime = None
11 | valid_until_date: datetime = None
12 |
13 | def __init__(self, d: dict = {}):
14 | self._json_transform = {
15 | "date": parse_date,
16 | "validUntilDate": parse_date
17 | }
18 | self._json_mapping = {
19 | "validUntilDate": "valid_until_date"
20 | }
21 | super().__init__(d)
22 |
--------------------------------------------------------------------------------
/kickbase_api/models/player.py:
--------------------------------------------------------------------------------
1 | from enum import IntEnum
2 |
3 | from kickbase_api.models.base_model import BaseModel
4 |
5 |
6 | class PlayerStatus(IntEnum):
7 | NONE = 0
8 | INJURED = 1
9 | STRICKEN = 2
10 | REHAB = 4
11 | RED_CARD = 8
12 | YELLOW_RED_CARD = 16
13 | FIFTH_YELLOW_CARD = 32
14 | NOT_IN_TEAM = 64
15 | NOT_IN_LEAGUE = 128
16 | ABSENT = 256
17 | UNKNOWN = 9999999999
18 |
19 |
20 | def _map_player_status(v):
21 | try:
22 | return PlayerStatus(v)
23 | except:
24 | return PlayerStatus.UNKNOWN
25 |
26 |
27 | class PlayerPosition(IntEnum):
28 | GOAL_KEEPER = 1
29 | DEFENDER = 2
30 | MIDFIELDER = 3
31 | FORWARD = 4
32 | UNKNOWN = 9999999999
33 |
34 |
35 | def _map_player_position(v):
36 | try:
37 | return PlayerPosition(v)
38 | except:
39 | return PlayerPosition.UNKNOWN
40 |
41 |
42 | class Player(BaseModel):
43 | id: str = None
44 | first_name: str = None
45 | last_name: str = None
46 | average_points: int = None
47 | totalPoints: int = None
48 | market_value: int = None
49 | market_value_trend: int = None
50 | number: int = None
51 | position: PlayerPosition = None
52 | status: PlayerStatus = None
53 | team_id: str = None
54 | user_id: str = None
55 |
56 | profile_path: str = None
57 | profile_big_path: str = None
58 | team_path: str = None
59 | team_cover_path: str = None
60 |
61 | def __init__(self, d: dict = {}):
62 | self._json_transform = {
63 | "position": _map_player_position,
64 | "status": _map_player_status
65 | }
66 | self._json_mapping = {
67 | "firstName": "first_name",
68 | "lastName": "last_name",
69 | "averagePoints": "average_points",
70 | "marketValue": "market_value",
71 | "marketValueTrend": "market_value_trend",
72 | "teamId": "team_id",
73 | "profile": "profile_path",
74 | "profileBig": "profile_big_path",
75 | "team": "team_path",
76 | "teamCover": "team_cover_path",
77 | "userId": "user_id"
78 | }
79 | super().__init__(d)
80 |
--------------------------------------------------------------------------------
/kickbase_api/models/response/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinskyba/kickbase-api-python/b444e25e265a6e586824d404f7e23da718f9ef4a/kickbase_api/models/response/__init__.py
--------------------------------------------------------------------------------
/kickbase_api/models/response/league_stats_response.py:
--------------------------------------------------------------------------------
1 | from kickbase_api.models.league_match_day_stats_data import LeagueMatchDayStatsData
2 |
3 |
4 | class LeagueStatsResponse:
5 |
6 | current_day: int = None
7 | match_days: {int: [LeagueMatchDayStatsData]} = {}
8 |
9 | def __init__(self, d: dict):
10 | self.current_day = d["currentDay"]
11 | for match_day in d["matchDays"]:
12 | self.match_days[match_day["day"]] = [LeagueMatchDayStatsData(_d) for _d in match_day["users"]]
13 |
--------------------------------------------------------------------------------
/kickbase_api/models/user.py:
--------------------------------------------------------------------------------
1 | from kickbase_api.models.base_model import BaseModel
2 |
3 |
4 | class User(BaseModel):
5 | id: str = None
6 | email: str = None
7 | name: str = None
8 | notifications: int = None
9 | profile_image_path: str = None
10 |
11 | def __init__(self, d: dict = {}):
12 | self._json_mapping = {
13 | "profile": "profile_image_path"
14 | }
15 | super().__init__(d)
16 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | setuptools~=49.6.0
2 | requests~=2.24.0
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup
2 |
3 | setup(
4 | name='Kickbase_API',
5 | version='0.0.8',
6 | packages=['kickbase_api', 'kickbase_api.models', 'kickbase_api.models.response'],
7 | url='https://github.com/kevinskyba/kickbase-api-python',
8 | license='MIT',
9 | author='kevinskyba',
10 | author_email='kevinskyba@live.de',
11 | description='Python API library for kickbase',
12 | long_description=open("README.md", "r").read(),
13 | long_description_content_type="text/markdown",
14 | install_requires=(
15 | 'requests',
16 | )
17 | )
18 |
--------------------------------------------------------------------------------
/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinskyba/kickbase-api-python/b444e25e265a6e586824d404f7e23da718f9ef4a/tests/__init__.py
--------------------------------------------------------------------------------
/tests/conftest.py:
--------------------------------------------------------------------------------
1 | import json
2 | import os
3 |
4 | import pytest
5 |
6 | from kickbase_api.kickbase import Kickbase
7 |
8 |
9 | def create_logged_in_kickbase():
10 | kickbase = Kickbase(google_identity_toolkit_api_key=os.environ["KKBS_API_KEY"])
11 | user, leagues = kickbase.login(os.environ["KKBS_TEST_USERNAME"], os.environ["KKBS_TEST_PASSWORD"])
12 | return kickbase, user, leagues
13 |
14 |
15 | @pytest.fixture(scope="module")
16 | def logged_in_kickbase():
17 | return create_logged_in_kickbase()
18 |
--------------------------------------------------------------------------------
/tests/models/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinskyba/kickbase-api-python/b444e25e265a6e586824d404f7e23da718f9ef4a/tests/models/__init__.py
--------------------------------------------------------------------------------
/tests/test_kickbase.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import pytest
4 |
5 | from kickbase_api.kickbase import Kickbase
6 |
7 | @pytest.mark.online
8 | def test_login():
9 | kickbase = Kickbase()
10 | assert not kickbase._is_token_valid()
11 | user, leagues = kickbase.login(os.environ["KKBS_TEST_USERNAME"], os.environ["KKBS_TEST_PASSWORD"])
12 | assert kickbase._is_token_valid()
13 | assert user is not None
14 | assert leagues is not None
15 |
16 | kickbase.post_chat_message("..", leagues[1])
17 |
18 |
19 | @pytest.mark.online
20 | def test_leagues(logged_in_kickbase):
21 | kickbase, user, leagues = logged_in_kickbase
22 | leagues_ = kickbase.leagues()
23 | assert leagues_ is not None
24 | assert len(leagues) == len(leagues_)
25 |
26 |
27 | @pytest.mark.online
28 | def test_league_me(logged_in_kickbase):
29 | kickbase, user, leagues = logged_in_kickbase
30 | league_me = kickbase.league_me(leagues[0])
31 | assert league_me is not None
32 |
33 |
34 | @pytest.mark.online
35 | def test_league_me(logged_in_kickbase):
36 | kickbase, user, leagues = logged_in_kickbase
37 | league_info = kickbase.league_me(leagues[0])
38 | assert league_info is not None
39 |
40 |
41 | @pytest.mark.online
42 | def test_league_stats(logged_in_kickbase):
43 | kickbase, user, leagues = logged_in_kickbase
44 | league_stats = kickbase.league_stats(leagues[0])
45 | assert league_stats is not None
46 |
47 |
48 | @pytest.mark.online
49 | def test_league_users(logged_in_kickbase):
50 | kickbase, user, leagues = logged_in_kickbase
51 | league_users = kickbase.league_users(leagues[0])
52 | assert league_users is not None
53 |
54 |
55 | @pytest.mark.online
56 | def test_league_user_stats(logged_in_kickbase):
57 | kickbase, user, leagues = logged_in_kickbase
58 | league_user_stats = kickbase.league_user_stats(leagues[0], user)
59 | assert league_user_stats is not None
60 |
61 |
62 | @pytest.mark.online
63 | def test_league_user_profile(logged_in_kickbase):
64 | kickbase, user, leagues = logged_in_kickbase
65 | league_user_profile = kickbase.league_user_profile(leagues[0], user)
66 | assert league_user_profile is not None
67 |
68 |
69 | @pytest.mark.online
70 | def test_league_feed(logged_in_kickbase):
71 | kickbase, user, leagues = logged_in_kickbase
72 | feed_items = kickbase.league_feed(0, leagues[0])
73 | assert feed_items is not None
74 |
75 |
76 | @pytest.mark.online
77 | def test_league_feed_comments(logged_in_kickbase):
78 | kickbase, user, leagues = logged_in_kickbase
79 | feed_items = kickbase.league_feed(0, leagues[0])
80 | feed_item_comments = kickbase.league_feed_comments(leagues[0], feed_items[0])
81 | assert feed_item_comments is not None
82 |
83 |
84 | @pytest.mark.online
85 | def test_league_user_players(logged_in_kickbase):
86 | kickbase, user, leagues = logged_in_kickbase
87 | players = kickbase.league_user_players(leagues[0], user)
88 | assert players is not None
89 |
90 |
91 | @pytest.mark.online
92 | def test_league_user_players_match_day(logged_in_kickbase):
93 | kickbase, user, leagues = logged_in_kickbase
94 | players = kickbase.league_user_players(leagues[0], user, 1)
95 | assert players is not None
96 |
97 | @pytest.mark.online
98 | def test_league_user_players_match_day(logged_in_kickbase):
99 | kickbase, user, leagues = logged_in_kickbase
100 | gift = kickbase.league_current_gift(leagues[0])
101 | assert gift is not None
102 |
103 | @pytest.mark.online
104 | def test_search_player(logged_in_kickbase):
105 | kickbase, user, leagues = logged_in_kickbase
106 | players = kickbase.search_player(search_query="Lewandowski")
107 | assert players is not None
108 |
109 |
110 | @pytest.mark.online
111 | def test_search_player(logged_in_kickbase):
112 | kickbase, user, leagues = logged_in_kickbase
113 | players = kickbase.team_players(40)
114 | assert players is not None
115 |
116 |
117 | @pytest.mark.online
118 | def test_top_25_players(logged_in_kickbase):
119 | kickbase, user, leagues = logged_in_kickbase
120 | players = kickbase.top_25_players()
121 | assert players is not None
122 |
123 |
124 | @pytest.mark.online
125 | def test_line_up(logged_in_kickbase):
126 | kickbase, user, leagues = logged_in_kickbase
127 | line_up = kickbase.line_up(leagues[0])
128 | assert line_up is not None
129 |
130 |
131 | @pytest.mark.online
132 | def test_market(logged_in_kickbase):
133 | kickbase, user, leagues = logged_in_kickbase
134 | market = kickbase.market(leagues[0])
135 | assert market is not None
136 |
137 |
138 | @pytest.mark.online
139 | def test_chat_messages(logged_in_kickbase):
140 | kickbase, user, leagues = logged_in_kickbase
141 | chat_messages, next_page_token = kickbase.chat_messages(leagues[0])
142 | assert chat_messages is not None
--------------------------------------------------------------------------------