Compare commits

...

6 Commits

Author SHA1 Message Date
d18756252c Create .nojekyll 2022-11-05 15:00:19 -05:00
asc
852acafcae intial commit of tests, documentation 2022-11-05 15:00:19 -05:00
9085c184bf updates to use pyteamsnap module 2022-11-05 15:00:19 -05:00
a906e9b2c5 rename to BaseApiObject 2022-11-05 15:00:19 -05:00
39335c3ba8 change readme to readme.rst 2022-11-05 15:00:19 -05:00
94568e0fa7 initial commit 2022-11-05 15:00:19 -05:00
115 changed files with 22158 additions and 288 deletions

21
.editorconfig Normal file
View File

@@ -0,0 +1,21 @@
# http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
insert_final_newline = true
charset = utf-8
end_of_line = lf
[*.bat]
indent_style = tab
end_of_line = crlf
[LICENSE]
insert_final_newline = false
[Makefile]
indent_style = tab

15
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,15 @@
* pyteamsnap version:
* Python version:
* Operating System:
### Description
Describe what you were trying to get done.
Tell us what happened, what went wrong, and what you expected to happen.
### What I Did
```
Paste the command(s) you ran and the output.
If there was a crash, please include the traceback here.
```

83
.gitignore vendored
View File

@@ -1,28 +1,15 @@
# Backup files #
*.bak
# If you are using PyCharm #
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/dictionaries
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.xml
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/gradle.xml
.idea/**/libraries
*.iws /out/
.idea/
# Python #
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python build/
.Python
env/
build/
develop-eggs/
dist/
downloads/
@@ -37,6 +24,10 @@ wheels/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
@@ -50,29 +41,59 @@ htmlcov/
.coverage
.coverage.*
.cache
.pytest_cache/
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery
celerybeat-schedule.*
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
# dotenv
.env
# virtualenv
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
@@ -80,4 +101,8 @@ venv.bak/
# mypy
.mypy_cache/
tests/private_test.py
# IDE settings
.vscode/
.idea/
.run/
/tests/fixtures/cassettes/*.yml

15
.travis.yml Normal file
View File

@@ -0,0 +1,15 @@
# Config file for automatic testing at travis-ci.com
language: python
python:
- 3.8
- 3.7
- 3.6
# Command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
install: pip install -U tox-travis
# Command to run tests, e.g. python setup.py test
script: tox

13
AUTHORS.rst Normal file
View File

@@ -0,0 +1,13 @@
=======
Credits
=======
Development Lead
----------------
* Anthony Correa <https://github.com/anthonyscorrea>
Contributors
------------
None yet. Why not be the first?

128
CONTRIBUTING.rst Normal file
View File

@@ -0,0 +1,128 @@
.. highlight:: shell
============
Contributing
============
Contributions are welcome, and they are greatly appreciated! Every little bit
helps, and credit will always be given.
You can contribute in many ways:
Types of Contributions
----------------------
Report Bugs
~~~~~~~~~~~
Report bugs at https://github.com/anthonyscorrea/pyteamsnap/issues.
If you are reporting a bug, please include:
* Your operating system name and version.
* Any details about your local setup that might be helpful in troubleshooting.
* Detailed steps to reproduce the bug.
Fix Bugs
~~~~~~~~
Look through the GitHub issues for bugs. Anything tagged with "bug" and "help
wanted" is open to whoever wants to implement it.
Implement Features
~~~~~~~~~~~~~~~~~~
Look through the GitHub issues for features. Anything tagged with "enhancement"
and "help wanted" is open to whoever wants to implement it.
Write Documentation
~~~~~~~~~~~~~~~~~~~
pyteamsnap could always use more documentation, whether as part of the
official pyteamsnap docs, in docstrings, or even on the web in blog posts,
articles, and such.
Submit Feedback
~~~~~~~~~~~~~~~
The best way to send feedback is to file an issue at https://github.com/anthonyscorrea/pyteamsnap/issues.
If you are proposing a feature:
* Explain in detail how it would work.
* Keep the scope as narrow as possible, to make it easier to implement.
* Remember that this is a volunteer-driven project, and that contributions
are welcome :)
Get Started!
------------
Ready to contribute? Here's how to set up `pyteamsnap` for local development.
1. Fork the `pyteamsnap` repo on GitHub.
2. Clone your fork locally::
$ git clone git@github.com:your_name_here/pyteamsnap.git
3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development::
$ mkvirtualenv pyteamsnap
$ cd pyteamsnap/
$ python setup.py develop
4. Create a branch for local development::
$ git checkout -b name-of-your-bugfix-or-feature
Now you can make your changes locally.
5. When you're done making changes, check that your changes pass flake8 and the
tests, including testing other Python versions with tox::
$ flake8 pyteamsnap tests
$ python setup.py test or pytest
$ tox
To get flake8 and tox, just pip install them into your virtualenv.
6. Commit your changes and push your branch to GitHub::
$ git add .
$ git commit -m "Your detailed description of your changes."
$ git push origin name-of-your-bugfix-or-feature
7. Submit a pull request through the GitHub website.
Pull Request Guidelines
-----------------------
Before you submit a pull request, check that it meets these guidelines:
1. The pull request should include tests.
2. If the pull request adds functionality, the docs should be updated. Put
your new functionality into a function with a docstring, and add the
feature to the list in README.rst.
3. The pull request should work for Python 3.5, 3.6, 3.7 and 3.8, and for PyPy. Check
https://travis-ci.com/anthonyscorrea/pyteamsnap/pull_requests
and make sure that the tests pass for all supported Python versions.
Tips
----
To run a subset of tests::
$ python -m unittest tests.test_pyteamsnap
Deploying
---------
A reminder for the maintainers on how to deploy.
Make sure all your changes are committed (including an entry in HISTORY.rst).
Then run::
$ bump2version patch # possible: major / minor / patch
$ git push
$ git push --tags
Travis will then deploy to PyPI if tests pass.

8
HISTORY.rst Normal file
View File

@@ -0,0 +1,8 @@
=======
History
=======
0.1.0 (2022-06-20)
------------------
* First release.

22
LICENSE Normal file
View File

@@ -0,0 +1,22 @@
MIT License
Copyright (c) 2022, Anthony Correa
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

11
MANIFEST.in Normal file
View File

@@ -0,0 +1,11 @@
include AUTHORS.rst
include CONTRIBUTING.rst
include HISTORY.rst
include LICENSE
include README.rst
recursive-include tests *
recursive-exclude * __pycache__
recursive-exclude * *.py[co]
recursive-include docs *.rst conf.py Makefile make.bat *.jpg *.png *.gif

89
Makefile Normal file
View File

@@ -0,0 +1,89 @@
.PHONY: clean clean-build clean-pyc clean-test coverage dist docs help install lint lint/flake8 lint/black
.DEFAULT_GOAL := help
define BROWSER_PYSCRIPT
import os, webbrowser, sys
from urllib.request import pathname2url
webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1])))
endef
export BROWSER_PYSCRIPT
define PRINT_HELP_PYSCRIPT
import re, sys
for line in sys.stdin:
match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line)
if match:
target, help = match.groups()
print("%-20s %s" % (target, help))
endef
export PRINT_HELP_PYSCRIPT
BROWSER := python -c "$$BROWSER_PYSCRIPT"
help:
@python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST)
clean: clean-build clean-pyc clean-test ## remove all build, test, coverage and Python artifacts
clean-build: ## remove build artifacts
rm -fr build/
rm -fr dist/
rm -fr .eggs/
find . -name '*.egg-info' -exec rm -fr {} +
find . -name '*.egg' -exec rm -f {} +
clean-pyc: ## remove Python file artifacts
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
find . -name '__pycache__' -exec rm -fr {} +
clean-test: ## remove test and coverage artifacts
rm -fr .tox/
rm -f .coverage
rm -fr htmlcov/
rm -fr .pytest_cache
lint/flake8: ## check style with flake8
flake8 pyteamsnap tests
lint/black: ## check style with black
black --check pyteamsnap tests
lint: lint/flake8 lint/black ## check style
test: ## run tests quickly with the default Python
python setup.py test
test-all: ## run tests on every Python version with tox
tox
coverage: ## check code coverage quickly with the default Python
coverage run --source pyteamsnap setup.py test
coverage report -m
coverage html
$(BROWSER) htmlcov/index.html
docs: ## generate Sphinx HTML documentation, including API docs
rm -f docs/pyteamsnap.rst
rm -f docs/modules.rst
sphinx-apidoc -o docs/ pyteamsnap
$(MAKE) -C docs clean
$(MAKE) -C docs html
$(BROWSER) docs/_build/html/index.html
servedocs: docs ## compile the docs watching for changes
watchmedo shell-command -p '*.rst' -c '$(MAKE) -C docs html' -R -D .
release: dist ## package and upload a release
twine upload dist/*
dist: clean ## builds source and wheel package
python setup.py sdist
python setup.py bdist_wheel
ls -l dist
install: clean ## install the package to the active Python's site-packages
python setup.py install

239
README.md
View File

@@ -1,239 +0,0 @@
<div id="top"></div>
<!-- PROJECT SHIELDS -->
<!--
*** I'm using markdown "reference style" links for readability.
*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).
*** See the bottom of this document for the declaration of the reference variables
*** for contributors-url, forks-url, etc. This is n optional, concise syntax you may use.
*** https://www.markdownguide.org/basic-syntax/#reference-style-links
-->
[![Contributors][contributors-shield]][contributors-url]
[![Forks][forks-shield]][forks-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![LinkedIn][linkedin-shield]][linkedin-url]
<!-- PROJECT LOGO -->
<br />
<div style="text-align:center;">
<a href="https://github.com/anthonyscorrea/pyteamsnap">
<img src="https://www.teamsnap.com/images/logo.svg" alt="Logo" width="160" height="80">
</a>
<h3 style="text-align:center;">pyteamsnap</h3>
<p style="text-align:center;">
Unofficial TeamSnap API wrapper for python.
<br />
·
<a href="https://github.com/anthonyscorrea/pyteamsnap/issues">Report Bug</a>
·
<a href="https://github.com/anthonyscorrea/pyteamsnap/issues">Request Feature</a>
</p>
</div>
<!-- TABLE OF CONTENTS -->
<details>
<summary>Table of Contents</summary>
<ol>
<li>
<a href="#about-the-project">About The Project</a>
<ul>
<li><a href="#built-with">Built With</a></li>
</ul>
</li>
<li>
<a href="#getting-started">Getting Started</a>
<ul>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#installation">Installation</a></li>
</ul>
</li>
<li><a href="#usage">Usage</a></li>
<li><a href="#roadmap">Roadmap</a></li>
<li><a href="#contributing">Contributing</a></li>
<li><a href="#license">License</a></li>
<li><a href="#contact">Contact</a></li>
</ol>
</details>
<!-- ABOUT THE PROJECT -->
## About The Project
An unoffical python wrapper for the [TeamSnap API](https://www.teamsnap.com/documentation/apiv3). A work in progress.
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
### Built With
* [api-client](https://github.com/MikeWooster/api-client)
* [collection-json](https://github.com/ricardokirkner/collection-json.python)
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
<!-- GETTING STARTED -->
## Getting Started
### Prerequisites
* [api-client](https://github.com/MikeWooster/api-client)
```shell
pip install api-client
```
* [collection-json](https://github.com/ricardokirkner/collection-json.python)
```shell
pip install json-collection
```
### Installation
1. Get OAuth 2 Credentials from TeamSnap at [https://auth.teamsnap.com/](https://auth.teamsnap.com/login) ([TeamSnap Documentation](https://www.teamsnap.com/documentation/apiv3/authorization))
2. Install pyteamsnap
```shell
pip install git+https://github.com/anthonyscorrea/pyteamsnap
```
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
<!-- USAGE EXAMPLES -->
## Usage Example
```python
from pyteamsnap.api import TeamSnap, Me, Event, EventLineupEntry, Member
client = TeamSnap(token=TOKEN)
# get authenticated user
me = Me(client)
# get a list of team_ids for the user
managed_team_ids = me.data['managed_teams']
# get a list of events for managed team
managed_team_id = me.data['managed_teams'][0]
events = Event.search(client, team_id=managed_team_id)
# get an object with the object id of EVENT_ID
event = Event.get(client, id=EVENT_ID)
# get some information about the event
start_date = event.data['start_date']
# create a new member
member = Member.new(client)
member.data['first_name'] = 'Ferguson'
member.post()
# update a Member with id of MEMBER_ID
member = Member.get(client, id=MEMBER_ID)
member.data['last_name'] = 'Jenkins'
member.put()
# delete a Member
member.delete()
# perform a bulk load
list_of_ts_objects = client.bulk_load(team_id = TEAM_ID, types = [Event, Member], event__id=EVENT_ID)
```
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
<!-- ROADMAP -->
## Roadmap
Implemented objects
- [X] Me
- [X] User
- [X] Event
- [X] Team
- [X] Availability
- [X] Member
- [X] Location
- [X] Opponent
- [X] EventLineupEntry
- [X] EventLineup
- [X] AvailabilitySummary
Implemented Queries
- [x] search
- [x] bulk_load
Implemented Actions
- [x] create
- [x] read
- [x] update
- [x] destroy
Implemented objects, but not tested.
- [ ] Statistics
- [ ] MemberStatistics
See the [open issues](https://github.com/anthonyscorrea/pyteamsnap/issues) for a full list of proposed features (and known issues).
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
<!-- CONTRIBUTING -->
## Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
Don't forget to give the project a star! Thanks again!
1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
<!-- LICENSE -->
## License
Distributed under the MIT License. See `LICENSE.txt` for more information.
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
<!-- CONTACT -->
## Contact
Your Name - [@anthonyscorrea](https://twitter.com/anthonyscorrea) - a@correa.co
Project Link: [https://github.com/anthonyscorrea/pyteamsnap](https://github.com/anthonyscorrea/pyteamsnap)
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
<!-- MARKDOWN LINKS & IMAGES -->
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->
[contributors-shield]: https://img.shields.io/github/contributors/anthonyscorrea/pyteamsnap.svg?style=for-the-badge
[contributors-url]: https://github.com/anthonyscorrea/pyteamsnap/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/anthonyscorrea/pyteamsnap.svg?style=for-the-badge
[forks-url]: https://github.com/anthonyscorrea/pyteamsnap/network/members
[stars-shield]: https://img.shields.io/github/stars/anthonyscorrea/pyteamsnap.svg?style=for-the-badge
[stars-url]: https://github.com/anthonyscorrea/pyteamsnap/stargazers
[issues-shield]: https://img.shields.io/github/issues/anthonyscorrea/pyteamsnap.svg?style=for-the-badge
[issues-url]: https://github.com/anthonyscorrea/pyteamsnap/issues
[license-shield]: https://img.shields.io/github/license/anthonyscorrea/pyteamsnap.svg?style=for-the-badge
[license-url]: https://github.com/anthonyscorrea/pyteamsnap/blob/master/LICENSE.txt
[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555
[linkedin-url]: https://linkedin.com/in/anthonyscorrea
[product-screenshot]: images/screenshot.png

120
README.rst Normal file
View File

@@ -0,0 +1,120 @@
==========
pyteamsnap
==========
.. image:: media/pyteamsnap_logo.svg
:width: 75%
:align: center
:alt: TeamSnap Logo
An unofficial python wrapper for the `TeamSnap API <https://www.teamsnap.com/documentation/apiv3>`_. A work in progress.
Installation
------------
Install **pyteamsnap** from GitHub
.. code-block:: console
$ pip install git+https://github.com/anthonyscorrea/pyteamsnap
Getting Started
---------------
To connect to TeamSnap, get OAuth 2 Credentials from TeamSnap at `https://auth.teamsnap.com/ <https://auth.teamsnap.com/login>`_ (`TeamSnap Documentation <https://www.teamsnap.com/documentation/apiv3/authorization>`_)
.. code-block:: python
from pyteamsnap.client import TeamSnap
client = TeamSnap(token=TOKEN)
You can use pyteamsnap constructors in pyteamsnap models to create instances.
Getting the user object for the authenticated user.
.. code-block:: python
>>> from pyteamsnap.models import Me
>>> me = Me(client)
>>> me
TeamSnap<User:00000000> "FirstName LastName"
There is only one "Me" for a session, so no searching required.
Information can be accessed using keys just like a dictionary. See `documentation <https://anthonyscorrea.github.io/pyteamsnap/>`_ for each models' ``data`` property for a list of available keys.
A few examples:
.. code-block:: python
>>> managed_teams = me['managed_teams']
>>> managed_teams
[TeamSnap<Team:00000000> "TeamName"]
>>> team = managed_teams[0]
>>> team['name']
TeamName
Objects have a search function, where search criteria is passed as keyword arguments
.. code-block:: python
>>> from pyteamsnap.models import Event
>>> events = Event.search(client, team_id=team['id'])
>>> events
[Teamsnap<Event:00000000> "Event Title", TeamSnap<Event:00000001> "Event Title"]
>>> event = events[0]
>>> event['start_date']
datetime.datetime(2000, 1, 1, 12, 00, 00, 0)
Objects can be retrieved singularly with an id.
.. code-block:: python
>>> event = Event.get(client, 00000000)
>>> event
TeamSnap<Event:00000000> "Event Title"
Objects can be created, updated, and deleted (as permissions allow).
.. code-block:: python
>>> from pyteamsnap import Member
>>> new_member = Member.new(client)
>>> new_member['first_name'] = 'Ferguson'
>>> new_member['last_name'] = 'Jenkins'
>>> member.post()
TeamSnap<Member:00000001> "Ferguson Jenkins"
>>> member['jersey_number'] = 31
>>> member.put()
>>> member.delete()
To load a hetereogeneous list of objects given parameters, the ``bulk_load`` function can be used
.. code-block:: python
>> list_of_ts_objects = client.bulk_load(team_id = TEAM_ID, types = [Event, Member], event__id=00000001)
[TeamSnap<Event:00000001> "Event Title", TeamSnap<Member:00000000> "Ferguson Jenkins"]
Documentation
-------------
`Documentation can be found here. <https://anthonyscorrea.github.io/pyteamsnap/>`_

4
docs/.buildinfo Normal file
View File

@@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 569f3f44b228cbf3734211ac59aa07be
tags: 645f666f9bcd5a90fca523b33c5a78b7

1
docs/.nojekyll Normal file
View File

@@ -0,0 +1 @@

24
docs/Makefile Normal file
View File

@@ -0,0 +1,24 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
github:
@make html
@cp -a $(BUILDDIR)/html/. ../docs

View File

@@ -0,0 +1,14 @@
.. pyteamsnap documentation master file, created by
sphinx-quickstart on Sat Nov 5 11:06:19 2022.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
.. include:: ../../README.rst
.. toctree::
:hidden:
:caption: Contents:
:maxdepth: 3
modules

View File

@@ -0,0 +1,7 @@
pyteamsnap
==========
.. toctree::
:maxdepth: 3
pyteamsnap

View File

@@ -0,0 +1,10 @@
pyteamsnap.models package
=========================
Module contents
---------------
.. automodule:: pyteamsnap.models
:members:
:undoc-members:
:show-inheritance:

View File

@@ -0,0 +1,29 @@
pyteamsnap package
==================
Subpackages
-----------
.. toctree::
:maxdepth: 4
pyteamsnap.models
Submodules
----------
pyteamsnap.client module
------------------------
.. automodule:: pyteamsnap.client
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: pyteamsnap
:members:
:undoc-members:
:show-inheritance:

View File

@@ -0,0 +1,134 @@
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

701
docs/_static/alabaster.css vendored Normal file
View File

@@ -0,0 +1,701 @@
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: Georgia, serif;
font-size: 17px;
background-color: #fff;
color: #000;
margin: 0;
padding: 0;
}
div.document {
width: 940px;
margin: 30px auto 0 auto;
}
div.documentwrapper {
float: left;
width: 100%;
}
div.bodywrapper {
margin: 0 0 0 220px;
}
div.sphinxsidebar {
width: 220px;
font-size: 14px;
line-height: 1.5;
}
hr {
border: 1px solid #B1B4B6;
}
div.body {
background-color: #fff;
color: #3E4349;
padding: 0 30px 0 30px;
}
div.body > .section {
text-align: left;
}
div.footer {
width: 940px;
margin: 20px auto 30px auto;
font-size: 14px;
color: #888;
text-align: right;
}
div.footer a {
color: #888;
}
p.caption {
font-family: inherit;
font-size: inherit;
}
div.relations {
display: none;
}
div.sphinxsidebar a {
color: #444;
text-decoration: none;
border-bottom: 1px dotted #999;
}
div.sphinxsidebar a:hover {
border-bottom: 1px solid #999;
}
div.sphinxsidebarwrapper {
padding: 18px 10px;
}
div.sphinxsidebarwrapper p.logo {
padding: 0;
margin: -10px 0 0 0px;
text-align: center;
}
div.sphinxsidebarwrapper h1.logo {
margin-top: -10px;
text-align: center;
margin-bottom: 5px;
text-align: left;
}
div.sphinxsidebarwrapper h1.logo-name {
margin-top: 0px;
}
div.sphinxsidebarwrapper p.blurb {
margin-top: 0;
font-style: normal;
}
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: Georgia, serif;
color: #444;
font-size: 24px;
font-weight: normal;
margin: 0 0 5px 0;
padding: 0;
}
div.sphinxsidebar h4 {
font-size: 20px;
}
div.sphinxsidebar h3 a {
color: #444;
}
div.sphinxsidebar p.logo a,
div.sphinxsidebar h3 a,
div.sphinxsidebar p.logo a:hover,
div.sphinxsidebar h3 a:hover {
border: none;
}
div.sphinxsidebar p {
color: #555;
margin: 10px 0;
}
div.sphinxsidebar ul {
margin: 10px 0;
padding: 0;
color: #000;
}
div.sphinxsidebar ul li.toctree-l1 > a {
font-size: 120%;
}
div.sphinxsidebar ul li.toctree-l2 > a {
font-size: 110%;
}
div.sphinxsidebar input {
border: 1px solid #CCC;
font-family: Georgia, serif;
font-size: 1em;
}
div.sphinxsidebar hr {
border: none;
height: 1px;
color: #AAA;
background: #AAA;
text-align: left;
margin-left: 0;
width: 50%;
}
div.sphinxsidebar .badge {
border-bottom: none;
}
div.sphinxsidebar .badge:hover {
border-bottom: none;
}
/* To address an issue with donation coming after search */
div.sphinxsidebar h3.donation {
margin-top: 10px;
}
/* -- body styles ----------------------------------------------------------- */
a {
color: #004B6B;
text-decoration: underline;
}
a:hover {
color: #6D4100;
text-decoration: underline;
}
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: Georgia, serif;
font-weight: normal;
margin: 30px 0px 10px 0px;
padding: 0;
}
div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }
a.headerlink {
color: #DDD;
padding: 0 4px;
text-decoration: none;
}
a.headerlink:hover {
color: #444;
background: #EAEAEA;
}
div.body p, div.body dd, div.body li {
line-height: 1.4em;
}
div.admonition {
margin: 20px 0px;
padding: 10px 30px;
background-color: #EEE;
border: 1px solid #CCC;
}
div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
background-color: #FBFBFB;
border-bottom: 1px solid #fafafa;
}
div.admonition p.admonition-title {
font-family: Georgia, serif;
font-weight: normal;
font-size: 24px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
}
div.admonition p.last {
margin-bottom: 0;
}
div.highlight {
background-color: #fff;
}
dt:target, .highlight {
background: #FAF3E8;
}
div.warning {
background-color: #FCC;
border: 1px solid #FAA;
}
div.danger {
background-color: #FCC;
border: 1px solid #FAA;
-moz-box-shadow: 2px 2px 4px #D52C2C;
-webkit-box-shadow: 2px 2px 4px #D52C2C;
box-shadow: 2px 2px 4px #D52C2C;
}
div.error {
background-color: #FCC;
border: 1px solid #FAA;
-moz-box-shadow: 2px 2px 4px #D52C2C;
-webkit-box-shadow: 2px 2px 4px #D52C2C;
box-shadow: 2px 2px 4px #D52C2C;
}
div.caution {
background-color: #FCC;
border: 1px solid #FAA;
}
div.attention {
background-color: #FCC;
border: 1px solid #FAA;
}
div.important {
background-color: #EEE;
border: 1px solid #CCC;
}
div.note {
background-color: #EEE;
border: 1px solid #CCC;
}
div.tip {
background-color: #EEE;
border: 1px solid #CCC;
}
div.hint {
background-color: #EEE;
border: 1px solid #CCC;
}
div.seealso {
background-color: #EEE;
border: 1px solid #CCC;
}
div.topic {
background-color: #EEE;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre, tt, code {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.9em;
}
.hll {
background-color: #FFC;
margin: 0 -12px;
padding: 0 12px;
display: block;
}
img.screenshot {
}
tt.descname, tt.descclassname, code.descname, code.descclassname {
font-size: 0.95em;
}
tt.descname, code.descname {
padding-right: 0.08em;
}
img.screenshot {
-moz-box-shadow: 2px 2px 4px #EEE;
-webkit-box-shadow: 2px 2px 4px #EEE;
box-shadow: 2px 2px 4px #EEE;
}
table.docutils {
border: 1px solid #888;
-moz-box-shadow: 2px 2px 4px #EEE;
-webkit-box-shadow: 2px 2px 4px #EEE;
box-shadow: 2px 2px 4px #EEE;
}
table.docutils td, table.docutils th {
border: 1px solid #888;
padding: 0.25em 0.7em;
}
table.field-list, table.footnote {
border: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
table.footnote {
margin: 15px 0;
width: 100%;
border: 1px solid #EEE;
background: #FDFDFD;
font-size: 0.9em;
}
table.footnote + table.footnote {
margin-top: -15px;
border-top: none;
}
table.field-list th {
padding: 0 0.8em 0 0;
}
table.field-list td {
padding: 0;
}
table.field-list p {
margin-bottom: 0.8em;
}
/* Cloned from
* https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
*/
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
table.footnote td.label {
width: .1px;
padding: 0.3em 0 0.3em 0.5em;
}
table.footnote td {
padding: 0.3em 0.5em;
}
dl {
margin: 0;
padding: 0;
}
dl dd {
margin-left: 30px;
}
blockquote {
margin: 0 0 0 30px;
padding: 0;
}
ul, ol {
/* Matches the 30px from the narrow-screen "li > ul" selector below */
margin: 10px 0 10px 30px;
padding: 0;
}
pre {
background: #EEE;
padding: 7px 30px;
margin: 15px 0px;
line-height: 1.3em;
}
div.viewcode-block:target {
background: #ffd;
}
dl pre, blockquote pre, li pre {
margin-left: 0;
padding-left: 30px;
}
tt, code {
background-color: #ecf0f3;
color: #222;
/* padding: 1px 2px; */
}
tt.xref, code.xref, a tt {
background-color: #FBFBFB;
border-bottom: 1px solid #fff;
}
a.reference {
text-decoration: none;
border-bottom: 1px dotted #004B6B;
}
/* Don't put an underline on images */
a.image-reference, a.image-reference:hover {
border-bottom: none;
}
a.reference:hover {
border-bottom: 1px solid #6D4100;
}
a.footnote-reference {
text-decoration: none;
font-size: 0.7em;
vertical-align: top;
border-bottom: 1px dotted #004B6B;
}
a.footnote-reference:hover {
border-bottom: 1px solid #6D4100;
}
a:hover tt, a:hover code {
background: #EEE;
}
@media screen and (max-width: 870px) {
div.sphinxsidebar {
display: none;
}
div.document {
width: 100%;
}
div.documentwrapper {
margin-left: 0;
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
}
div.bodywrapper {
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 0;
}
ul {
margin-left: 0;
}
li > ul {
/* Matches the 30px from the "ul, ol" selector above */
margin-left: 30px;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.bodywrapper {
margin: 0;
}
.footer {
width: auto;
}
.github {
display: none;
}
}
@media screen and (max-width: 875px) {
body {
margin: 0;
padding: 20px 30px;
}
div.documentwrapper {
float: none;
background: #fff;
}
div.sphinxsidebar {
display: block;
float: none;
width: 102.5%;
margin: 50px -30px -20px -30px;
padding: 10px 20px;
background: #333;
color: #FFF;
}
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
div.sphinxsidebar h3 a {
color: #fff;
}
div.sphinxsidebar a {
color: #AAA;
}
div.sphinxsidebar p.logo {
display: none;
}
div.document {
width: 100%;
margin: 0;
}
div.footer {
display: none;
}
div.bodywrapper {
margin: 0;
}
div.body {
min-height: 0;
padding: 0;
}
.rtd_doc_footer {
display: none;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.footer {
width: auto;
}
.github {
display: none;
}
}
/* misc. */
.revsys-inline {
display: none!important;
}
/* Make nested-list/multi-paragraph items look better in Releases changelog
* pages. Without this, docutils' magical list fuckery causes inconsistent
* formatting between different release sub-lists.
*/
div#changelog > div.section > ul > li > p:only-child {
margin-bottom: 0;
}
/* Hide fugly table cell borders in ..bibliography:: directive output */
table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
border: none;
/* Below needed in some edge cases; if not applied, bottom shadows appear */
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
/* relbar */
.related {
line-height: 30px;
width: 100%;
font-size: 0.9rem;
}
.related.top {
border-bottom: 1px solid #EEE;
margin-bottom: 20px;
}
.related.bottom {
border-top: 1px solid #EEE;
}
.related ul {
padding: 0;
margin: 0;
list-style: none;
}
.related li {
display: inline;
}
nav#rellinks {
float: right;
}
nav#rellinks li+li:before {
content: "|";
}
nav#breadcrumbs li+li:before {
content: "\00BB";
}
/* Hide certain items when printing */
@media print {
div.related {
display: none;
}
}

899
docs/_static/basic.css vendored Normal file
View File

@@ -0,0 +1,899 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
div.section::after {
display: block;
content: '';
clear: left;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}
div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li p.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
max-width: 800px;
}
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, figure.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, figure.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, figure.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.align-default, figure.align-default, .figure.align-default {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-default {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar,
aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
background-color: #ffe;
width: 40%;
float: right;
clear: right;
overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
div.topic {
border: 1px solid #ccc;
padding: 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
aside.sidebar > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::after,
div.topic::after,
div.admonition::after,
blockquote::after {
display: block;
content: '';
clear: both;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table.align-default {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
th > :first-child,
td > :first-child {
margin-top: 0px;
}
th > :last-child,
td > :last-child {
margin-bottom: 0px;
}
/* -- figures --------------------------------------------------------------- */
div.figure, figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption, figcaption {
padding: 0.3em;
}
div.figure p.caption span.caption-number,
figcaption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text,
figcaption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist {
margin: 1em 0;
}
table.hlist td {
vertical-align: top;
}
/* -- object description styles --------------------------------------------- */
.sig {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
}
.sig-name, code.descname {
background-color: transparent;
font-weight: bold;
}
.sig-name {
font-size: 1.1em;
}
code.descname {
font-size: 1.2em;
}
.sig-prename, code.descclassname {
background-color: transparent;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.sig-param.n {
font-style: italic;
}
/* C++ specific styling */
.sig-inline.c-texpr,
.sig-inline.cpp-texpr {
font-family: unset;
}
.sig.c .k, .sig.c .kt,
.sig.cpp .k, .sig.cpp .kt {
color: #0033B3;
}
.sig.c .m,
.sig.cpp .m {
color: #1750EB;
}
.sig.c .s, .sig.c .sc,
.sig.cpp .s, .sig.cpp .sc {
color: #067D17;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
:not(li) > ol > li:first-child > :first-child,
:not(li) > ul > li:first-child > :first-child {
margin-top: 0px;
}
:not(li) > ol > li:last-child > :last-child,
:not(li) > ul > li:last-child > :last-child {
margin-bottom: 0px;
}
ol.simple ol p,
ol.simple ul p,
ul.simple ol p,
ul.simple ul p {
margin-top: 0;
}
ol.simple > li:not(:first-child) > p,
ul.simple > li:not(:first-child) > p {
margin-top: 0;
}
ol.simple p,
ul.simple p {
margin-bottom: 0;
}
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
}
dl.field-list > dt {
font-weight: bold;
word-break: break-word;
padding-left: 0.5em;
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
margin-left: 0em;
margin-bottom: 0em;
}
dl {
margin-bottom: 15px;
}
dd > :first-child {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
.classifier:before {
font-style: normal;
margin: 0 0.5em;
content: ":";
display: inline-block;
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
pre, div[class*="highlight-"] {
clear: both;
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
white-space: nowrap;
}
div[class*="highlight-"] {
margin: 1em 0;
}
td.linenos pre {
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
display: block;
}
table.highlighttable tbody {
display: block;
}
table.highlighttable tr {
display: flex;
}
table.highlighttable td {
margin: 0;
padding: 0;
}
table.highlighttable td.linenos {
padding-right: 0.5em;
}
table.highlighttable td.code {
flex: 1;
overflow: hidden;
}
.highlight .hll {
display: block;
}
div.highlight pre,
table.highlighttable pre {
margin: 0;
}
div.code-block-caption + div {
margin-top: 0;
}
div.code-block-caption {
margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
table.highlighttable td.linenos,
span.linenos,
div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none;
-webkit-user-select: text; /* Safari fallback only */
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
margin: 1em 0;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: absolute;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

1
docs/_static/css/badge_only.css vendored Normal file
View File

@@ -0,0 +1 @@
.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/_static/css/fonts/lato-bold.woff vendored Normal file

Binary file not shown.

BIN
docs/_static/css/fonts/lato-bold.woff2 vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/_static/css/fonts/lato-normal.woff vendored Normal file

Binary file not shown.

BIN
docs/_static/css/fonts/lato-normal.woff2 vendored Normal file

Binary file not shown.

4
docs/_static/css/theme.css vendored Normal file

File diff suppressed because one or more lines are too long

1
docs/_static/custom.css vendored Normal file
View File

@@ -0,0 +1 @@
/* This file intentionally left blank. */

156
docs/_static/doctools.js vendored Normal file
View File

@@ -0,0 +1,156 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
}
};
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE: "unknown",
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
},
/**
* Initialise the domain index toggle buttons
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
},
initOnKeyListeners: () => {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.altKey || event.ctrlKey || event.metaKey) return;
if (!event.shiftKey) {
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
};
// quick alias for translations
const _ = Documentation.gettext;
_ready(Documentation.init);

14
docs/_static/documentation_options.js vendored Normal file
View File

@@ -0,0 +1,14 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '0.1',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false,
SHOW_SEARCH_SUMMARY: true,
ENABLE_SEARCH_SHORTCUTS: true,
};

BIN
docs/_static/file.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

10881
docs/_static/jquery-3.6.0.js vendored Normal file

File diff suppressed because it is too large Load Diff

2
docs/_static/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

1
docs/_static/js/badge_only.js vendored Normal file
View File

@@ -0,0 +1 @@
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});

View File

@@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);

4
docs/_static/js/html5shiv.min.js vendored Normal file
View File

@@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);

1
docs/_static/js/theme.js vendored Normal file

File diff suppressed because one or more lines are too long

199
docs/_static/language_data.js vendored Normal file
View File

@@ -0,0 +1,199 @@
/*
* language_data.js
* ~~~~~~~~~~~~~~~~
*
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
/* Non-minified version is copied as a separate JS file, is available */
/**
* Porter Stemmer
*/
var Stemmer = function() {
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
};
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
}
}

BIN
docs/_static/minus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

BIN
docs/_static/plus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

74
docs/_static/pygments.css vendored Normal file
View File

@@ -0,0 +1,74 @@
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #9C6500 } /* Comment.Preproc */
.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #E40000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #008400 } /* Generic.Inserted */
.highlight .go { color: #717171 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #687822 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #767600 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */

566
docs/_static/searchtools.js vendored Normal file
View File

@@ -0,0 +1,566 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
/**
* Simple result scoring code.
*/
if (typeof Scorer === "undefined") {
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [docname, title, anchor, descr, score, filename]
// and returns the new score.
/*
score: result => {
const [docname, title, anchor, descr, score, filename] = result
return score
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
};
}
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr, score, _filename] = item;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
}
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + anchor;
linkEl.dataset.score = score;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerHTML =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms)
);
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
}
/**
* Search Module
*/
const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
htmlToText: (htmlString) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
);
return "";
},
init: () => {
const query = new URLSearchParams(window.location.search).get("q");
document
.querySelectorAll('input[name="q"]')
.forEach((el) => (el.value = query));
if (query) Search.performSearch(query);
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
}
},
hasIndex: () => Search._index !== null,
deferQuery: (query) => (Search._queued_query = query),
stopPulse: () => (Search._pulse_status = -1),
startPulse: () => {
if (Search._pulse_status >= 0) return;
const pulse = () => {
Search._pulse_status = (Search._pulse_status + 1) % 4;
Search.dots.innerText = ".".repeat(Search._pulse_status);
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
};
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch: (query) => {
// create the required interface elements
const searchText = document.createElement("h2");
searchText.textContent = _("Searching");
const searchSummary = document.createElement("p");
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
const out = document.getElementById("search-results");
Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
// index already loaded, the browser was quick!
if (Search.hasIndex()) Search.query(query);
else Search.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query: (query) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const allTitles = Search._index.alltitles;
const indexEntries = Search._index.indexentries;
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// maybe skip this "word"
// stopwords array is from language_data.js
if (
stopwords.indexOf(queryTermLower) !== -1 ||
queryTerm.match(/^\d+$/)
)
return;
// stem the word
let word = stemmer.stemWord(queryTermLower);
// select the correct list
if (word[0] === "-") excludedTerms.add(word.substr(1));
else {
searchTerms.add(word);
highlightTerms.add(queryTermLower);
}
});
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
}
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
// array of [docname, title, anchor, descr, score, filename]
let results = [];
_removeChildren(document.getElementById("search-progress"));
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// search for explicit entries in index directives
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
for (const [file, id] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
);
// lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
}
return leftScore > rightScore ? 1 : -1;
});
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms);
},
/**
* search for object names
*/
performObjectSearch: (object, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const objects = Search._index.objects;
const objNames = Search._index.objnames;
const titles = Search._index.titles;
const results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
let score = 0;
const parts = fullnameLower.split(".");
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch;
else if (parts.slice(-1)[0].indexOf(object) > -1)
score += Scorer.objPartialMatch; // matches in last name
const objName = objNames[match[1]][2];
const title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results;
},
/**
* search for full-text terms in the index
*/
performTermsSearch: (searchTerms, excludedTerms) => {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const titles = Search._index.titles;
const scoreMap = new Map();
const fileMap = new Map();
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word])
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word])
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
});
}
// no match but word was a required one
if (arr.every((record) => record.files === undefined)) return;
// found search word in contents
arr.forEach((record) => {
if (record.files === undefined) return;
let recordFiles = record.files;
if (recordFiles.length === undefined) recordFiles = [recordFiles];
files.push(...recordFiles);
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
});
});
// create the mapping
files.forEach((file) => {
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
fileMap.get(file).push(word);
else fileMap.set(file, [word]);
});
});
// now check if the files don't contain excluded terms
const results = [];
for (const [file, wordList] of fileMap) {
// check if all requirements are matched
// as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
if (
wordList.length !== searchTerms.size &&
wordList.length !== filteredTermCount
)
continue;
// ensure that none of the excluded terms is in the search result
if (
[...excludedTerms].some(
(term) =>
terms[term] === file ||
titleTerms[term] === file ||
(terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break;
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
]);
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words.
*/
makeSearchSummary: (htmlText, keywords) => {
const text = Search.htmlToText(htmlText);
if (text === "") return null;
const textLower = text.toLowerCase();
const actualStartPosition = [...keywords]
.map((k) => textLower.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("p");
summary.classList.add("context");
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
return summary;
},
};
_ready(Search.init);

144
docs/_static/sphinx_highlight.js vendored Normal file
View File

@@ -0,0 +1,144 @@
/* Highlighting utilities for Sphinx HTML documentation. */
"use strict";
const SPHINX_HIGHLIGHT_ENABLED = true
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const SphinxHighlight = {
/**
* highlight the search words provided in localstorage in the text
*/
highlightSearchWords: () => {
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
// get and clear terms from localstorage
const url = new URL(window.location);
const highlight =
localStorage.getItem("sphinx_highlight_terms")
|| url.searchParams.get("highlight")
|| "";
localStorage.removeItem("sphinx_highlight_terms")
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
// get individual terms from highlight string
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
localStorage.removeItem("sphinx_highlight_terms")
},
initEscapeListener: () => {
// only install a listener if it is really needed
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
document.addEventListener("keydown", (event) => {
// bail for input elements
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
// bail with special keys
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
SphinxHighlight.hideSearchWords();
event.preventDefault();
}
});
},
};
_ready(SphinxHighlight.highlightSearchWords);
_ready(SphinxHighlight.initEscapeListener);

2042
docs/_static/underscore-1.13.1.js vendored Normal file

File diff suppressed because it is too large Load Diff

6
docs/_static/underscore.js vendored Normal file

File diff suppressed because one or more lines are too long

418
docs/genindex.html Normal file
View File

@@ -0,0 +1,418 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Index &mdash; pyteamsnap 0.1 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> pyteamsnap
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">pyteamsnap</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">pyteamsnap</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a></li>
<li class="breadcrumb-item active">Index</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
<a href="#A"><strong>A</strong></a>
| <a href="#B"><strong>B</strong></a>
| <a href="#C"><strong>C</strong></a>
| <a href="#D"><strong>D</strong></a>
| <a href="#E"><strong>E</strong></a>
| <a href="#G"><strong>G</strong></a>
| <a href="#L"><strong>L</strong></a>
| <a href="#M"><strong>M</strong></a>
| <a href="#O"><strong>O</strong></a>
| <a href="#P"><strong>P</strong></a>
| <a href="#Q"><strong>Q</strong></a>
| <a href="#R"><strong>R</strong></a>
| <a href="#S"><strong>S</strong></a>
| <a href="#T"><strong>T</strong></a>
| <a href="#U"><strong>U</strong></a>
| <a href="#V"><strong>V</strong></a>
</div>
<h2 id="A">A</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Availability">Availability (class in pyteamsnap.models)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.AvailabilitySummary">AvailabilitySummary (class in pyteamsnap.models)</a>
</li>
</ul></td>
</tr></table>
<h2 id="B">B</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap.base_url">base_url (pyteamsnap.client.TeamSnap attribute)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap.bulk_load">bulk_load() (pyteamsnap.client.TeamSnap method)</a>
</li>
</ul></td>
</tr></table>
<h2 id="C">C</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap.command">command() (pyteamsnap.client.TeamSnap method)</a>
</li>
</ul></td>
</tr></table>
<h2 id="D">D</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Availability.data">data (pyteamsnap.models.Availability property)</a>
<ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.AvailabilitySummary.data">(pyteamsnap.models.AvailabilitySummary property)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Event.data">(pyteamsnap.models.Event property)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineup.data">(pyteamsnap.models.EventLineup property)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry.data">(pyteamsnap.models.EventLineupEntry property)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Location.data">(pyteamsnap.models.Location property)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Member.data">(pyteamsnap.models.Member property)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Opponent.data">(pyteamsnap.models.Opponent property)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Statistics.data">(pyteamsnap.models.Statistics property)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Team.data">(pyteamsnap.models.Team property)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.User.data">(pyteamsnap.models.User property)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap.delete_item">delete_item() (pyteamsnap.client.TeamSnap method)</a>
</li>
</ul></td>
</tr></table>
<h2 id="E">E</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Event">Event (class in pyteamsnap.models)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineup">EventLineup (class in pyteamsnap.models)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry">EventLineupEntry (class in pyteamsnap.models)</a>
</li>
</ul></td>
</tr></table>
<h2 id="G">G</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap.get_item">get_item() (pyteamsnap.client.TeamSnap method)</a>
</li>
</ul></td>
</tr></table>
<h2 id="L">L</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap.link">link() (pyteamsnap.client.TeamSnap method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Location">Location (class in pyteamsnap.models)</a>
</li>
</ul></td>
</tr></table>
<h2 id="M">M</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Me">Me (class in pyteamsnap.models)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Member">Member (class in pyteamsnap.models)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.MemberStatistics">MemberStatistics (class in pyteamsnap.models)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li>
module
<ul>
<li><a href="pyteamsnap.html#module-pyteamsnap">pyteamsnap</a>
</li>
<li><a href="pyteamsnap.html#module-pyteamsnap.client">pyteamsnap.client</a>
</li>
<li><a href="pyteamsnap.models.html#module-pyteamsnap.models">pyteamsnap.models</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="O">O</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Opponent">Opponent (class in pyteamsnap.models)</a>
</li>
</ul></td>
</tr></table>
<h2 id="P">P</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap.parse_response">parse_response() (pyteamsnap.client.TeamSnap class method)</a>
</li>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap.post_item">post_item() (pyteamsnap.client.TeamSnap method)</a>
</li>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap.put_item">put_item() (pyteamsnap.client.TeamSnap method)</a>
</li>
<li>
pyteamsnap
<ul>
<li><a href="pyteamsnap.html#module-pyteamsnap">module</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li>
pyteamsnap.client
<ul>
<li><a href="pyteamsnap.html#module-pyteamsnap.client">module</a>
</li>
</ul></li>
<li>
pyteamsnap.models
<ul>
<li><a href="pyteamsnap.models.html#module-pyteamsnap.models">module</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="Q">Q</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap.query">query() (pyteamsnap.client.TeamSnap method)</a>
</li>
</ul></td>
</tr></table>
<h2 id="R">R</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Availability.rel">rel (pyteamsnap.models.Availability attribute)</a>
<ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.AvailabilitySummary.rel">(pyteamsnap.models.AvailabilitySummary attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Event.rel">(pyteamsnap.models.Event attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineup.rel">(pyteamsnap.models.EventLineup attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry.rel">(pyteamsnap.models.EventLineupEntry attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Location.rel">(pyteamsnap.models.Location attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Me.rel">(pyteamsnap.models.Me attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Member.rel">(pyteamsnap.models.Member attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.MemberStatistics.rel">(pyteamsnap.models.MemberStatistics attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Opponent.rel">(pyteamsnap.models.Opponent attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Statistics.rel">(pyteamsnap.models.Statistics attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Team.rel">(pyteamsnap.models.Team attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.User.rel">(pyteamsnap.models.User attribute)</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="S">S</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry.search">search() (pyteamsnap.models.EventLineupEntry class method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Statistics">Statistics (class in pyteamsnap.models)</a>
</li>
</ul></td>
</tr></table>
<h2 id="T">T</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Team">Team (class in pyteamsnap.models)</a>
</li>
<li><a href="pyteamsnap.html#pyteamsnap.client.TeamSnap">TeamSnap (class in pyteamsnap.client)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineup.template">template (pyteamsnap.models.EventLineup attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Availability.type">type (pyteamsnap.models.Availability attribute)</a>
<ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.AvailabilitySummary.type">(pyteamsnap.models.AvailabilitySummary attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Event.type">(pyteamsnap.models.Event attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineup.type">(pyteamsnap.models.EventLineup attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry.type">(pyteamsnap.models.EventLineupEntry attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Location.type">(pyteamsnap.models.Location attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Me.type">(pyteamsnap.models.Me attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Member.type">(pyteamsnap.models.Member attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Opponent.type">(pyteamsnap.models.Opponent attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Statistics.type">(pyteamsnap.models.Statistics attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Team.type">(pyteamsnap.models.Team attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.User.type">(pyteamsnap.models.User attribute)</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="U">U</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.User">User (class in pyteamsnap.models)</a>
</li>
</ul></td>
</tr></table>
<h2 id="V">V</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Availability.version">version (pyteamsnap.models.Availability attribute)</a>
<ul>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.AvailabilitySummary.version">(pyteamsnap.models.AvailabilitySummary attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Event.version">(pyteamsnap.models.Event attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineup.version">(pyteamsnap.models.EventLineup attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry.version">(pyteamsnap.models.EventLineupEntry attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Location.version">(pyteamsnap.models.Location attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Me.version">(pyteamsnap.models.Me attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Member.version">(pyteamsnap.models.Member attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Opponent.version">(pyteamsnap.models.Opponent attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Statistics.version">(pyteamsnap.models.Statistics attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.Team.version">(pyteamsnap.models.Team attribute)</a>
</li>
<li><a href="pyteamsnap.models.html#pyteamsnap.models.User.version">(pyteamsnap.models.User attribute)</a>
</li>
</ul></li>
</ul></td>
</tr></table>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2022, Anthony Correa.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

196
docs/index.html Normal file
View File

@@ -0,0 +1,196 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pyteamsnap &mdash; pyteamsnap 0.1 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="pyteamsnap" href="modules.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="#" class="icon icon-home"> pyteamsnap
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">pyteamsnap</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="#">pyteamsnap</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="#" class="icon icon-home"></a></li>
<li class="breadcrumb-item active">pyteamsnap</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/index.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="pyteamsnap">
<h1>pyteamsnap<a class="headerlink" href="#pyteamsnap" title="Permalink to this heading"></a></h1>
<a class="reference internal image-reference" href="media/pyteamsnap_logo.svg"><img alt="TeamSnap Logo" class="align-center" src="media/pyteamsnap_logo.svg" width="75%" /></a>
<p>An unofficial python wrapper for the <a class="reference external" href="https://www.teamsnap.com/documentation/apiv3">TeamSnap API</a>. A work in progress.</p>
<section id="installation">
<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this heading"></a></h2>
<p>Install <strong>pyteamsnap</strong> from GitHub</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>pip install git+https://github.com/anthonyscorrea/pyteamsnap
</pre></div>
</div>
</section>
<section id="getting-started">
<h2>Getting Started<a class="headerlink" href="#getting-started" title="Permalink to this heading"></a></h2>
<p>To connect to TeamSnap, get OAuth 2 Credentials from TeamSnap at <a class="reference external" href="https://auth.teamsnap.com/login">https://auth.teamsnap.com/</a> (<a class="reference external" href="https://www.teamsnap.com/documentation/apiv3/authorization">TeamSnap Documentation</a>)</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">pyteamsnap.client</span> <span class="kn">import</span> <span class="n">TeamSnap</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">TeamSnap</span><span class="p">(</span><span class="n">token</span><span class="o">=</span><span class="n">TOKEN</span><span class="p">)</span>
</pre></div>
</div>
<p>You can use pyteamsnap constructors in pyteamsnap models to create instances.</p>
<p>Getting the user object for the authenticated user.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">pyteamsnap.models</span> <span class="kn">import</span> <span class="n">Me</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">me</span> <span class="o">=</span> <span class="n">Me</span><span class="p">(</span><span class="n">client</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">me</span>
<span class="go">TeamSnap&lt;User:00000000&gt; &quot;FirstName LastName&quot;</span>
</pre></div>
</div>
<p>There is only one “Me” for a session, so no searching required.</p>
<p>Information can be accessed using keys just like a dictionary. See <a class="reference external" href="https://anthonyscorrea.github.io/pyteamsnap/">documentation</a> for each models <code class="docutils literal notranslate"><span class="pre">data</span></code> property for a list of available keys.</p>
<p>A few examples:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">managed_teams</span> <span class="o">=</span> <span class="n">me</span><span class="p">[</span><span class="s1">&#39;managed_teams&#39;</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">managed_teams</span>
<span class="go">[TeamSnap&lt;Team:00000000&gt; &quot;TeamName&quot;]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">team</span> <span class="o">=</span> <span class="n">managed_teams</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">team</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span>
<span class="go">TeamName</span>
</pre></div>
</div>
<p>Objects have a search function, where search criteria is passed as keyword arguments</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">pyteamsnap.models</span> <span class="kn">import</span> <span class="n">Event</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">events</span> <span class="o">=</span> <span class="n">Event</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">team_id</span><span class="o">=</span><span class="n">team</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">events</span>
<span class="go">[Teamsnap&lt;Event:00000000&gt; &quot;Event Title&quot;, TeamSnap&lt;Event:00000001&gt; &quot;Event Title&quot;]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">event</span> <span class="o">=</span> <span class="n">events</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">event</span><span class="p">[</span><span class="s1">&#39;start_date&#39;</span><span class="p">]</span>
<span class="go">datetime.datetime(2000, 1, 1, 12, 00, 00, 0)</span>
</pre></div>
</div>
<p>Objects can be retrieved singularly with an id.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">event</span> <span class="o">=</span> <span class="n">Event</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="mi">00000000</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">event</span>
<span class="go">TeamSnap&lt;Event:00000000&gt; &quot;Event Title&quot;</span>
</pre></div>
</div>
<p>Objects can be created, updated, and deleted (as permissions allow).</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">pyteamsnap</span> <span class="kn">import</span> <span class="n">Member</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">new_member</span> <span class="o">=</span> <span class="n">Member</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">client</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">new_member</span><span class="p">[</span><span class="s1">&#39;first_name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Ferguson&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">new_member</span><span class="p">[</span><span class="s1">&#39;last_name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Jenkins&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">member</span><span class="o">.</span><span class="n">post</span><span class="p">()</span>
<span class="go">TeamSnap&lt;Member:00000001&gt; &quot;Ferguson Jenkins&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">member</span><span class="p">[</span><span class="s1">&#39;jersey_number&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">31</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">member</span><span class="o">.</span><span class="n">put</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">member</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
</pre></div>
</div>
<p>To load a hetereogeneous list of objects given parameters, the <code class="docutils literal notranslate"><span class="pre">bulk_load</span></code> function can be used</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="o">&gt;&gt;</span> <span class="n">list_of_ts_objects</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">bulk_load</span><span class="p">(</span><span class="n">team_id</span> <span class="o">=</span> <span class="n">TEAM_ID</span><span class="p">,</span> <span class="n">types</span> <span class="o">=</span> <span class="p">[</span><span class="n">Event</span><span class="p">,</span> <span class="n">Member</span><span class="p">],</span> <span class="n">event__id</span><span class="o">=</span><span class="mi">00000001</span><span class="p">)</span>
<span class="p">[</span><span class="n">TeamSnap</span><span class="o">&lt;</span><span class="n">Event</span><span class="p">:</span><span class="mi">00000001</span><span class="o">&gt;</span> <span class="s2">&quot;Event Title&quot;</span><span class="p">,</span> <span class="n">TeamSnap</span><span class="o">&lt;</span><span class="n">Member</span><span class="p">:</span><span class="mi">00000000</span><span class="o">&gt;</span> <span class="s2">&quot;Ferguson Jenkins&quot;</span><span class="p">]</span>
</pre></div>
</div>
</section>
<section id="id1">
<h2>Documentation<a class="headerlink" href="#id1" title="Permalink to this heading"></a></h2>
<p><a class="reference external" href="https://anthonyscorrea.github.io/pyteamsnap/">Documentation can be found here.</a></p>
<div class="toctree-wrapper compound">
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="modules.html" class="btn btn-neutral float-right" title="pyteamsnap" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2022, Anthony Correa.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

35
docs/make.bat Normal file
View File

@@ -0,0 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)
if "%1" == "" goto help
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.5 KiB

126
docs/modules.html Normal file
View File

@@ -0,0 +1,126 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pyteamsnap &mdash; pyteamsnap 0.1 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="pyteamsnap package" href="pyteamsnap.html" />
<link rel="prev" title="pyteamsnap" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> pyteamsnap
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">pyteamsnap</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pyteamsnap.html">pyteamsnap package</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">pyteamsnap</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a></li>
<li class="breadcrumb-item active">pyteamsnap</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/modules.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="pyteamsnap">
<h1>pyteamsnap<a class="headerlink" href="#pyteamsnap" title="Permalink to this heading"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="pyteamsnap.html">pyteamsnap package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pyteamsnap.html#subpackages">Subpackages</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html">pyteamsnap.models package</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pyteamsnap.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyteamsnap.html#module-pyteamsnap.client">pyteamsnap.client module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.html#pyteamsnap.client.TeamSnap"><code class="docutils literal notranslate"><span class="pre">TeamSnap</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pyteamsnap.html#module-pyteamsnap">Module contents</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="index.html" class="btn btn-neutral float-left" title="pyteamsnap" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="pyteamsnap.html" class="btn btn-neutral float-right" title="pyteamsnap package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2022, Anthony Correa.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

BIN
docs/objects.inv Normal file

Binary file not shown.

127
docs/py-modindex.html Normal file
View File

@@ -0,0 +1,127 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Python Module Index &mdash; pyteamsnap 0.1 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> pyteamsnap
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">pyteamsnap</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">pyteamsnap</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a></li>
<li class="breadcrumb-item active">Python Module Index</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Python Module Index</h1>
<div class="modindex-jumpbox">
<a href="#cap-p"><strong>p</strong></a>
</div>
<table class="indextable modindextable">
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-p"><td></td><td>
<strong>p</strong></td><td></td></tr>
<tr>
<td><img src="_static/minus.png" class="toggler"
id="toggle-1" style="display: none" alt="-" /></td>
<td>
<a href="pyteamsnap.html#module-pyteamsnap"><code class="xref">pyteamsnap</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pyteamsnap.html#module-pyteamsnap.client"><code class="xref">pyteamsnap.client</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pyteamsnap.models.html#module-pyteamsnap.models"><code class="xref">pyteamsnap.models</code></a></td><td>
<em></em></td></tr>
</table>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2022, Anthony Correa.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

306
docs/pyteamsnap.html Normal file
View File

@@ -0,0 +1,306 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pyteamsnap package &mdash; pyteamsnap 0.1 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="pyteamsnap.models package" href="pyteamsnap.models.html" />
<link rel="prev" title="pyteamsnap" href="modules.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> pyteamsnap
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pyteamsnap</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">pyteamsnap package</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#subpackages">Subpackages</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html">pyteamsnap.models package</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-pyteamsnap.client">pyteamsnap.client module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#pyteamsnap.client.TeamSnap"><code class="docutils literal notranslate"><span class="pre">TeamSnap</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#module-pyteamsnap">Module contents</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">pyteamsnap</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a></li>
<li class="breadcrumb-item"><a href="modules.html">pyteamsnap</a></li>
<li class="breadcrumb-item active">pyteamsnap package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/pyteamsnap.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="pyteamsnap-package">
<h1>pyteamsnap package<a class="headerlink" href="#pyteamsnap-package" title="Permalink to this heading"></a></h1>
<section id="subpackages">
<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this heading"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="pyteamsnap.models.html">pyteamsnap.models package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pyteamsnap.models.html#module-pyteamsnap.models">Module contents</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Availability"><code class="docutils literal notranslate"><span class="pre">Availability</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Availability.data"><code class="docutils literal notranslate"><span class="pre">Availability.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Availability.rel"><code class="docutils literal notranslate"><span class="pre">Availability.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Availability.type"><code class="docutils literal notranslate"><span class="pre">Availability.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Availability.version"><code class="docutils literal notranslate"><span class="pre">Availability.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.AvailabilitySummary"><code class="docutils literal notranslate"><span class="pre">AvailabilitySummary</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.AvailabilitySummary.data"><code class="docutils literal notranslate"><span class="pre">AvailabilitySummary.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.AvailabilitySummary.rel"><code class="docutils literal notranslate"><span class="pre">AvailabilitySummary.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.AvailabilitySummary.type"><code class="docutils literal notranslate"><span class="pre">AvailabilitySummary.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.AvailabilitySummary.version"><code class="docutils literal notranslate"><span class="pre">AvailabilitySummary.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Event"><code class="docutils literal notranslate"><span class="pre">Event</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Event.data"><code class="docutils literal notranslate"><span class="pre">Event.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Event.rel"><code class="docutils literal notranslate"><span class="pre">Event.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Event.type"><code class="docutils literal notranslate"><span class="pre">Event.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Event.version"><code class="docutils literal notranslate"><span class="pre">Event.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineup"><code class="docutils literal notranslate"><span class="pre">EventLineup</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineup.data"><code class="docutils literal notranslate"><span class="pre">EventLineup.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineup.rel"><code class="docutils literal notranslate"><span class="pre">EventLineup.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineup.template"><code class="docutils literal notranslate"><span class="pre">EventLineup.template</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineup.type"><code class="docutils literal notranslate"><span class="pre">EventLineup.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineup.version"><code class="docutils literal notranslate"><span class="pre">EventLineup.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry"><code class="docutils literal notranslate"><span class="pre">EventLineupEntry</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry.data"><code class="docutils literal notranslate"><span class="pre">EventLineupEntry.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry.rel"><code class="docutils literal notranslate"><span class="pre">EventLineupEntry.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry.search"><code class="docutils literal notranslate"><span class="pre">EventLineupEntry.search()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry.type"><code class="docutils literal notranslate"><span class="pre">EventLineupEntry.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.EventLineupEntry.version"><code class="docutils literal notranslate"><span class="pre">EventLineupEntry.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Location"><code class="docutils literal notranslate"><span class="pre">Location</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Location.data"><code class="docutils literal notranslate"><span class="pre">Location.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Location.rel"><code class="docutils literal notranslate"><span class="pre">Location.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Location.type"><code class="docutils literal notranslate"><span class="pre">Location.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Location.version"><code class="docutils literal notranslate"><span class="pre">Location.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Me"><code class="docutils literal notranslate"><span class="pre">Me</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Me.rel"><code class="docutils literal notranslate"><span class="pre">Me.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Me.type"><code class="docutils literal notranslate"><span class="pre">Me.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Me.version"><code class="docutils literal notranslate"><span class="pre">Me.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Member"><code class="docutils literal notranslate"><span class="pre">Member</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Member.data"><code class="docutils literal notranslate"><span class="pre">Member.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Member.rel"><code class="docutils literal notranslate"><span class="pre">Member.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Member.type"><code class="docutils literal notranslate"><span class="pre">Member.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Member.version"><code class="docutils literal notranslate"><span class="pre">Member.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.MemberStatistics"><code class="docutils literal notranslate"><span class="pre">MemberStatistics</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.MemberStatistics.rel"><code class="docutils literal notranslate"><span class="pre">MemberStatistics.rel</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Opponent"><code class="docutils literal notranslate"><span class="pre">Opponent</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Opponent.data"><code class="docutils literal notranslate"><span class="pre">Opponent.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Opponent.rel"><code class="docutils literal notranslate"><span class="pre">Opponent.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Opponent.type"><code class="docutils literal notranslate"><span class="pre">Opponent.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Opponent.version"><code class="docutils literal notranslate"><span class="pre">Opponent.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Statistics"><code class="docutils literal notranslate"><span class="pre">Statistics</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Statistics.data"><code class="docutils literal notranslate"><span class="pre">Statistics.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Statistics.rel"><code class="docutils literal notranslate"><span class="pre">Statistics.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Statistics.type"><code class="docutils literal notranslate"><span class="pre">Statistics.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Statistics.version"><code class="docutils literal notranslate"><span class="pre">Statistics.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Team"><code class="docutils literal notranslate"><span class="pre">Team</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Team.data"><code class="docutils literal notranslate"><span class="pre">Team.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Team.rel"><code class="docutils literal notranslate"><span class="pre">Team.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Team.type"><code class="docutils literal notranslate"><span class="pre">Team.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.Team.version"><code class="docutils literal notranslate"><span class="pre">Team.version</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.User"><code class="docutils literal notranslate"><span class="pre">User</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.User.data"><code class="docutils literal notranslate"><span class="pre">User.data</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.User.rel"><code class="docutils literal notranslate"><span class="pre">User.rel</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.User.type"><code class="docutils literal notranslate"><span class="pre">User.type</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="pyteamsnap.models.html#pyteamsnap.models.User.version"><code class="docutils literal notranslate"><span class="pre">User.version</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</section>
<section id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this heading"></a></h2>
</section>
<section id="module-pyteamsnap.client">
<span id="pyteamsnap-client-module"></span><h2>pyteamsnap.client module<a class="headerlink" href="#module-pyteamsnap.client" title="Permalink to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.client.</span></span><span class="sig-name descname"><span class="pre">TeamSnap</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">token</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.client.TeamSnap" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">APIClient</span></code></p>
<p>A client to access the TeamSnap API</p>
<p>The TeamSnap API is a hypermedia JSON API, using Collection+JSON.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap.base_url">
<span class="sig-name descname"><span class="pre">base_url</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'https://api.teamsnap.com/v3'</span></em><a class="headerlink" href="#pyteamsnap.client.TeamSnap.base_url" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap.bulk_load">
<span class="sig-name descname"><span class="pre">bulk_load</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">team_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">types</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">BaseApiObject</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">TTeamSnap</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#pyteamsnap.client.TeamSnap.bulk_load" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>team_id</strong> </p></li>
<li><p><strong>types</strong> List of items to fetch, in the form of BaseApiObject classes</p></li>
<li><p><strong>kwargs</strong> Additional filters passed into requested types by passing them in the urls querystring
as type__filter=value (i.e. ?event__start_date=2015-01-01).
Any filter can be passed that is available on the search for the specified type.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Heterogeneous collection of the specified types for a specified team or teams.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap.command">
<span class="sig-name descname"><span class="pre">command</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">rel</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">command</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">list</span></span></span><a class="headerlink" href="#pyteamsnap.client.TeamSnap.command" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap.delete_item">
<span class="sig-name descname"><span class="pre">delete_item</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">rel</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#pyteamsnap.client.TeamSnap.delete_item" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap.get_item">
<span class="sig-name descname"><span class="pre">get_item</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">rel</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">dict</span></span></span><a class="headerlink" href="#pyteamsnap.client.TeamSnap.get_item" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap.link">
<span class="sig-name descname"><span class="pre">link</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">link_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.client.TeamSnap.link" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap.parse_response">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">parse_response</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">response</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">list</span></span></span><a class="headerlink" href="#pyteamsnap.client.TeamSnap.parse_response" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap.post_item">
<span class="sig-name descname"><span class="pre">post_item</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">rel</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">dict</span></span></span><a class="headerlink" href="#pyteamsnap.client.TeamSnap.post_item" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap.put_item">
<span class="sig-name descname"><span class="pre">put_item</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">rel</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">dict</span></span></span><a class="headerlink" href="#pyteamsnap.client.TeamSnap.put_item" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pyteamsnap.client.TeamSnap.query">
<span class="sig-name descname"><span class="pre">query</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">rel</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">query</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">list</span></span></span><a class="headerlink" href="#pyteamsnap.client.TeamSnap.query" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</section>
<section id="module-pyteamsnap">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-pyteamsnap" title="Permalink to this heading"></a></h2>
<p>Top-level package for pyteamsnap.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="modules.html" class="btn btn-neutral float-left" title="pyteamsnap" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="pyteamsnap.models.html" class="btn btn-neutral float-right" title="pyteamsnap.models package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2022, Anthony Correa.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

684
docs/pyteamsnap.models.html Normal file
View File

@@ -0,0 +1,684 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pyteamsnap.models package &mdash; pyteamsnap 0.1 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="prev" title="pyteamsnap package" href="pyteamsnap.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> pyteamsnap
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pyteamsnap</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="pyteamsnap.html">pyteamsnap package</a><ul class="current">
<li class="toctree-l3 current"><a class="reference internal" href="pyteamsnap.html#subpackages">Subpackages</a><ul class="current">
<li class="toctree-l4 current"><a class="current reference internal" href="#">pyteamsnap.models package</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.html#submodules">Submodules</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.html#module-pyteamsnap.client">pyteamsnap.client module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pyteamsnap.html#module-pyteamsnap">Module contents</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">pyteamsnap</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a></li>
<li class="breadcrumb-item"><a href="modules.html">pyteamsnap</a></li>
<li class="breadcrumb-item"><a href="pyteamsnap.html">pyteamsnap package</a></li>
<li class="breadcrumb-item active">pyteamsnap.models package</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/pyteamsnap.models.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="pyteamsnap-models-package">
<h1>pyteamsnap.models package<a class="headerlink" href="#pyteamsnap-models-package" title="Permalink to this heading"></a></h1>
<section id="module-pyteamsnap.models">
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-pyteamsnap.models" title="Permalink to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.Availability">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">Availability</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.Availability" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.Availability.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.Availability.data" title="Permalink to this definition"></a></dt>
<dd><p>Data dictionary for object</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with keys:</p>
</dd>
</dl>
<ul class="simple">
<li><p>event_id</p></li>
<li><p>member_id</p></li>
<li><p>notes</p></li>
<li><p>notes_author_member_id</p></li>
<li><p>source</p></li>
<li><p>status_code</p></li>
<li><p>type</p></li>
</ul>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Availability.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'availabilities'</span></em><a class="headerlink" href="#pyteamsnap.models.Availability.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Availability.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'availability'</span></em><a class="headerlink" href="#pyteamsnap.models.Availability.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Availability.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.Availability.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.AvailabilitySummary">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">AvailabilitySummary</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.AvailabilitySummary" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.AvailabilitySummary.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.AvailabilitySummary.data" title="Permalink to this definition"></a></dt>
<dd><p>Data dictionary for object</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with keys:</p>
</dd>
</dl>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.AvailabilitySummary.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'availability_summaries'</span></em><a class="headerlink" href="#pyteamsnap.models.AvailabilitySummary.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.AvailabilitySummary.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'availability_summary'</span></em><a class="headerlink" href="#pyteamsnap.models.AvailabilitySummary.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.AvailabilitySummary.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.AvailabilitySummary.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.Event">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">Event</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.Event" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<p>Associated object to a team; and represents an event or game that is tracked in the TeamSnap system.
<a class="reference external" href="https://www.teamsnap.com/documentation/apiv3/objects#Events">https://www.teamsnap.com/documentation/apiv3/objects#Events</a></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.Event.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.Event.data" title="Permalink to this definition"></a></dt>
<dd><p>Data dictionary for object</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with strings:</p>
</dd>
</dl>
<ul class="simple">
<li><p>type</p></li>
<li><p>additional_location_details</p></li>
<li><p>browser_time_zone</p></li>
<li><p>division_location_id</p></li>
<li><p>doesnt_count_towards_record</p></li>
<li><p>duration_in_minutes</p></li>
<li><p>game_type_code</p></li>
<li><p>icon_color</p></li>
<li><p>is_canceled</p></li>
<li><p>is_game</p></li>
<li><p>is_overtime</p></li>
<li><p>is_shootout</p></li>
<li><p>is_tbd</p></li>
<li><p>label</p></li>
<li><p>location_id</p></li>
<li><p>minutes_to_arrive_early</p></li>
<li><p>name</p></li>
<li><p>notes</p></li>
<li><p>notify_opponent</p></li>
<li><p>notify_opponent_contacts_email</p></li>
<li><p>notify_opponent_contacts_name</p></li>
<li><p>notify_opponent_notes</p></li>
<li><p>notify_team</p></li>
<li><p>notify_team_as_member_id</p></li>
<li><p>opponent_id</p></li>
<li><p>points_for_opponent</p></li>
<li><p>points_for_team</p></li>
<li><p>repeating_include</p></li>
<li><p>repeating_type_code</p></li>
<li><p>repeating_until</p></li>
<li><p>results</p></li>
<li><p>results_url</p></li>
<li><p>shootout_points_for_opponent</p></li>
<li><p>shootout_points_for_team</p></li>
<li><p>start_date</p></li>
<li><p>team_id</p></li>
<li><p>time_zone</p></li>
<li><p>tracks_availability</p></li>
<li><p>uniform</p></li>
</ul>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Event.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'events'</span></em><a class="headerlink" href="#pyteamsnap.models.Event.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Event.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'event'</span></em><a class="headerlink" href="#pyteamsnap.models.Event.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Event.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.Event.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineup">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">EventLineup</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.EventLineup" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineup.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.EventLineup.data" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with strings:</p>
</dd>
</dl>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineup.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'event_lineups'</span></em><a class="headerlink" href="#pyteamsnap.models.EventLineup.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineup.template">
<span class="sig-name descname"><span class="pre">template</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{}</span></em><a class="headerlink" href="#pyteamsnap.models.EventLineup.template" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineup.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'event_lineup'</span></em><a class="headerlink" href="#pyteamsnap.models.EventLineup.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineup.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.EventLineup.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineupEntry">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">EventLineupEntry</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.EventLineupEntry" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineupEntry.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.EventLineupEntry.data" title="Permalink to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with strings:</p>
</dd>
</dl>
<ul class="simple">
<li><p>member_id</p></li>
<li><p>sequence</p></li>
<li><p>label</p></li>
<li><p>type</p></li>
</ul>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineupEntry.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'event_lineup_entries'</span></em><a class="headerlink" href="#pyteamsnap.models.EventLineupEntry.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineupEntry.search">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">search</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.EventLineupEntry.search" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineupEntry.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'event_lineup_entry'</span></em><a class="headerlink" href="#pyteamsnap.models.EventLineupEntry.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.EventLineupEntry.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.EventLineupEntry.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.Location">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">Location</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.Location" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.Location.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.Location.data" title="Permalink to this definition"></a></dt>
<dd><p>Data dictionary for object</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with keys:</p>
</dd>
</dl>
<ul class="simple">
<li><p>name</p></li>
<li><p>url</p></li>
<li><p>phone</p></li>
<li><p>notes</p></li>
<li><p>address</p></li>
<li><p>latitude</p></li>
<li><p>longitude</p></li>
<li><p>team_id</p></li>
<li><p>is_retired</p></li>
<li><p>type</p></li>
</ul>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Location.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'locations'</span></em><a class="headerlink" href="#pyteamsnap.models.Location.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Location.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'location'</span></em><a class="headerlink" href="#pyteamsnap.models.Location.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Location.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.Location.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.Me">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">Me</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.Me" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pyteamsnap.models.User" title="pyteamsnap.models.user.User"><code class="xref py py-class docutils literal notranslate"><span class="pre">User</span></code></a></p>
<p>The current users object. It is not possible to create or delete users via the API;
however, it is possible to update data on a users record.
<a class="reference external" href="https://www.teamsnap.com/documentation/apiv3/objects#Me">https://www.teamsnap.com/documentation/apiv3/objects#Me</a></p>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Me.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'me'</span></em><a class="headerlink" href="#pyteamsnap.models.Me.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Me.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'user'</span></em><a class="headerlink" href="#pyteamsnap.models.Me.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Me.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.Me.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.Member">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">Member</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.Member" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<p>A member (also referred to as a roster in our web and mobile apps) is a member of a team.
<a class="reference external" href="https://www.teamsnap.com/documentation/apiv3/objects#Members">https://www.teamsnap.com/documentation/apiv3/objects#Members</a></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.Member.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.Member.data" title="Permalink to this definition"></a></dt>
<dd><p>Data dictionary for object</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with keys:</p>
</dd>
</dl>
<ul class="simple">
<li><p>first_name</p></li>
<li><p>last_name</p></li>
<li><p>address_city</p></li>
<li><p>address_state</p></li>
<li><p>address_street1</p></li>
<li><p>address_street2</p></li>
<li><p>address_zip</p></li>
<li><p>birthday</p></li>
<li><p>gender</p></li>
<li><p>hide_address</p></li>
<li><p>hide_age</p></li>
<li><p>is_address_hidden</p></li>
<li><p>is_age_hidden</p></li>
<li><p>is_manager</p></li>
<li><p>is_non_player</p></li>
<li><p>is_ownership_pending</p></li>
<li><p>jersey_number</p></li>
<li><p>position</p></li>
<li><p>source_action</p></li>
<li><p>team_id</p></li>
<li><p>type</p></li>
</ul>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Member.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'members'</span></em><a class="headerlink" href="#pyteamsnap.models.Member.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Member.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'member'</span></em><a class="headerlink" href="#pyteamsnap.models.Member.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Member.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.Member.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.MemberStatistics">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">MemberStatistics</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.MemberStatistics" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.MemberStatistics.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'member_statistics'</span></em><a class="headerlink" href="#pyteamsnap.models.MemberStatistics.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.Opponent">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">Opponent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.Opponent" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.Opponent.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.Opponent.data" title="Permalink to this definition"></a></dt>
<dd><p>Data dictionary for object</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with keys:</p>
</dd>
</dl>
<ul class="simple">
<li><p>name</p></li>
<li><p>contacts_name</p></li>
<li><p>contacts_phone</p></li>
<li><p>contacts_email</p></li>
<li><p>notes</p></li>
<li><p>team_id</p></li>
<li><p>type</p></li>
</ul>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Opponent.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'opponents'</span></em><a class="headerlink" href="#pyteamsnap.models.Opponent.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Opponent.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'opponent'</span></em><a class="headerlink" href="#pyteamsnap.models.Opponent.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Opponent.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.Opponent.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.Statistics">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">Statistics</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.Statistics" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.Statistics.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.Statistics.data" title="Permalink to this definition"></a></dt>
<dd><p>Data dictionary for object</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with keys:</p>
</dd>
</dl>
<ul class="simple">
<li><p>acronym</p></li>
<li><p>always_display_decimals</p></li>
<li><p>formula</p></li>
<li><p>is_in_descending_order</p></li>
<li><p>display_zero_totals</p></li>
<li><p>is_percentage</p></li>
<li><p>is_private</p></li>
<li><p>is_team_statistic</p></li>
<li><p>is_top_statistic</p></li>
<li><p>name</p></li>
<li><p>precision</p></li>
<li><p>statistic_group_id</p></li>
<li><p>team_id</p></li>
<li><p>type</p></li>
</ul>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Statistics.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'statistics'</span></em><a class="headerlink" href="#pyteamsnap.models.Statistics.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Statistics.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'statistic'</span></em><a class="headerlink" href="#pyteamsnap.models.Statistics.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Statistics.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.Statistics.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.Team">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">Team</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.Team" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<p>Associated teams from your origin object. Full CRUD is possible with the teams endpoint.
<a class="reference external" href="https://www.teamsnap.com/documentation/apiv3/objects#Teams">https://www.teamsnap.com/documentation/apiv3/objects#Teams</a></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.Team.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.Team.data" title="Permalink to this definition"></a></dt>
<dd><p>Data dictionary for object</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with keys:</p>
</dd>
</dl>
<ul class="simple">
<li><p>ad_unit_hero_id</p></li>
<li><p>ad_unit_hero_template_id</p></li>
<li><p>ad_unit_inline_id</p></li>
<li><p>division_id</p></li>
<li><p>division_name</p></li>
<li><p>is_ownership_pending</p></li>
<li><p>league_name</p></li>
<li><p>league_url</p></li>
<li><p>location_country</p></li>
<li><p>location_postal_code</p></li>
<li><p>name</p></li>
<li><p>owner_email</p></li>
<li><p>owner_first_name</p></li>
<li><p>owner_last_name</p></li>
<li><p>season_name</p></li>
<li><p>sport_id</p></li>
<li><p>team</p></li>
<li><p>time_zone</p></li>
<li><p>type</p></li>
</ul>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Team.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'teams'</span></em><a class="headerlink" href="#pyteamsnap.models.Team.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Team.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'team'</span></em><a class="headerlink" href="#pyteamsnap.models.Team.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.Team.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.Team.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pyteamsnap.models.User">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pyteamsnap.models.</span></span><span class="sig-name descname"><span class="pre">User</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">APIClient</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pyteamsnap.models.User" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseApiObject</span></code></p>
<dl class="py property">
<dt class="sig sig-object py" id="pyteamsnap.models.User.data">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">data</span></span><a class="headerlink" href="#pyteamsnap.models.User.data" title="Permalink to this definition"></a></dt>
<dd><p>Data dictionary for object</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>dict: dict with keys:</p>
</dd>
</dl>
<ul class="simple">
<li><p>first_name</p></li>
<li><p>last_name</p></li>
<li><p>password</p></li>
<li><p>birthday</p></li>
<li><p>email</p></li>
<li><p>facebook_id</p></li>
<li><p>facebook_access_token</p></li>
<li><p>type</p></li>
<li><p>is_lab_rat</p></li>
<li><p>receives_newsletter</p></li>
</ul>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.User.rel">
<span class="sig-name descname"><span class="pre">rel</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'users'</span></em><a class="headerlink" href="#pyteamsnap.models.User.rel" title="Permalink to this definition"></a></dt>
<dd><p>rel: Relationship between a linked resource and the current document</p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.User.type">
<span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'user'</span></em><a class="headerlink" href="#pyteamsnap.models.User.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pyteamsnap.models.User.version">
<span class="sig-name descname"><span class="pre">version</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'3.866.0'</span></em><a class="headerlink" href="#pyteamsnap.models.User.version" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="pyteamsnap.html" class="btn btn-neutral float-left" title="pyteamsnap package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2022, Anthony Correa.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

117
docs/search.html Normal file
View File

@@ -0,0 +1,117 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Search &mdash; pyteamsnap 0.1 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="#" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> pyteamsnap
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="#" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">pyteamsnap</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">pyteamsnap</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a></li>
<li class="breadcrumb-item active">Search</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<noscript>
<div id="fallback" class="admonition warning">
<p class="last">
Please activate JavaScript to enable the search functionality.
</p>
</div>
</noscript>
<div id="search-results">
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2022, Anthony Correa.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
<script>
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
<script id="searchindexloader"></script>
</body>
</html>

1
docs/searchindex.js Normal file

File diff suppressed because one or more lines are too long

35
docs/source/conf.py Normal file
View File

@@ -0,0 +1,35 @@
# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
project = 'pyteamsnap'
copyright = '2022, Anthony Correa'
author = 'Anthony Correa'
release = '0.1'
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
extensions = [
'sphinx.ext.duration',
'sphinx.ext.doctest',
'sphinx.ext.autodoc',
'sphinx.ext.autosummary',
'sphinx_rtd_theme',
]
templates_path = ['_templates']
exclude_patterns = []
import os; import sys
sys.path.insert(0, os.path.abspath('../..'))
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
html_theme = "sphinx_rtd_theme"
html_static_path = ['_static']

14
docs/source/index.rst Normal file
View File

@@ -0,0 +1,14 @@
.. pyteamsnap documentation master file, created by
sphinx-quickstart on Sat Nov 5 11:06:19 2022.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
.. include:: ../../README.rst
.. toctree::
:hidden:
:caption: Contents:
:maxdepth: 3
modules

7
docs/source/modules.rst Normal file
View File

@@ -0,0 +1,7 @@
pyteamsnap
==========
.. toctree::
:maxdepth: 3
pyteamsnap

View File

@@ -0,0 +1,10 @@
pyteamsnap.models package
=========================
Module contents
---------------
.. automodule:: pyteamsnap.models
:members:
:undoc-members:
:show-inheritance:

View File

@@ -0,0 +1,29 @@
pyteamsnap package
==================
Subpackages
-----------
.. toctree::
:maxdepth: 4
pyteamsnap.models
Submodules
----------
pyteamsnap.client module
------------------------
.. automodule:: pyteamsnap.client
:members:
:undoc-members:
:show-inheritance:
Module contents
---------------
.. automodule:: pyteamsnap
:members:
:undoc-members:
:show-inheritance:

32
media/pyteamsnap_logo.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -1,3 +1,5 @@
from .api import TeamSnap
"""Top-level package for pyteamsnap."""
__all__ = ['TeamSnap']
__author__ = """Anthony Correa"""
__email__ = "a@correa.co"
__version__ = "0.1.0"

143
pyteamsnap/client.py Normal file
View File

@@ -0,0 +1,143 @@
import typing as T
from apiclient import (
APIClient,
HeaderAuthentication,
JsonResponseHandler,
JsonRequestFormatter,
)
from pyteamsnap.models.base import BaseApiObject
import datetime
TTeamSnap = T.TypeVar("TTeamSnap", bound="TeamSnap")
class TeamSnap(APIClient):
"""A client to access the TeamSnap API
The TeamSnap API is a hypermedia JSON API, using Collection+JSON.
"""
base_url: str = "https://api.teamsnap.com/v3"
def __init__(self, token: str, *args, **kwargs) -> None:
super().__init__(
*args,
authentication_method=HeaderAuthentication(token=token),
response_handler=JsonResponseHandler,
request_formatter=JsonRequestFormatter,
**kwargs,
)
self._root_collection = self.get(self.base_url)["collection"]
self._links = self._by_rel(self.base_url, "links")
self._queries = self._by_rel(self.base_url, "queries")
self._commands = self._by_rel(self.base_url, "commands")
pass
def link(self, link_name):
d = {link["rel"]: link["href"] for link in self._root_collection["links"]}
return d.get(link_name)
def bulk_load(
self, team_id, types: T.List[BaseApiObject], **kwargs
) -> T.List[TTeamSnap]:
"""
:param team_id:
:param types: List of items to fetch, in the form of BaseApiObject classes
:param kwargs: Additional filters passed into requested types by passing them in the url's querystring
as type__filter=value (i.e. ?event__start_date=2015-01-01).
Any filter can be passed that is available on the search for the specified type.
:return: Heterogeneous collection of the specified types for a specified team or teams.
"""
types_dict = {t.type: t for t in types}
r = self.query(
rel="self",
query="bulk_load",
types=",".join(types_dict.keys()),
team_id=team_id,
**kwargs,
)
result = []
for item in r:
cls = types_dict[item["type"]]
instance = cls(self, data=item)
result.append(instance)
return result
def _by_rel(self, url: str, record_key: str) -> dict:
"""Get a mapping of record_key to its collection.
:param url:
:param record_key: one of "href", "version", "links", "items", "queries", "commands", "template", "error"
:return: A mapping of record_key to its collection
"""
collection = self.get(url)["collection"]
return {collection["rel"]: collection for collection in collection[record_key]}
def query(self, rel, query: str, **kwargs) -> list:
queries = self._by_rel(self._get_href(rel), "queries")
response = self.get(self._get_href(rel=query, links=queries), params=kwargs)
return self.parse_response(response)
def command(self, rel, command: str, **kwargs) -> list:
commands = self._by_rel(self._get_href(rel), "commands")
response = self.get(self._get_href(command, commands), params=kwargs)
return self.parse_response(response)
def _get_href(self, rel: str, links: dict = None, url: str = base_url) -> str:
"""
:param rel:
:param links:
:param url:
:return: A hyperlink from the links dictionary. Each item in the links dictionary is a
dictionary with a rel and href key
"""
try:
if links is None:
links = self._by_rel(url, "links")
link = links[rel]["href"]
except Exception as e:
raise e
return link
def get_item(self, rel: str, id: T.Union[int, str]) -> dict:
r = self.get(f"{self.link(rel)}/{id}")
return self.parse_response(r)[0]
def post_item(self, rel: str, data: dict) -> dict:
r = super(TeamSnap, self).post(f"{self.link(rel)}", data=data)
return self.parse_response(r)[0]
def put_item(self, rel, id: T.Union[int, str], data: dict) -> dict:
r = super(TeamSnap, self).put(f"{self.link(rel)}/{id}", data=data)
return self.parse_response(r)[0]
def delete_item(self, rel, id: T.Union[int, str]) -> None:
super(TeamSnap, self).delete(f"{self.link(rel)}/{id}")
return None
@classmethod
def parse_response(self, response: dict) -> list:
result = []
for item in response["collection"].get("items", []):
details = {}
for detail in item["data"]:
value = detail["value"]
value_type = detail["type"]
if value:
if value_type == "DateTime":
value = datetime.datetime.strptime(value, "%Y-%m-%dT%H:%M:%S%z")
elif value_type == "Boolean":
if value is not True:
value = False
elif value_type == "Integer":
value = int(value)
details[detail["name"]] = value
result.append(details)
return result
# return [{detail['name']: detail['value'] for detail in item} for item in items]

View File

@@ -0,0 +1,29 @@
from .availability import Availability
from .availabilitysummary import AvailabilitySummary
from .event import Event
from .eventlineup import EventLineup
from .eventlineupentry import EventLineupEntry
from .location import Location
from .me import Me
from .member import Member
from .memberstatistics import MemberStatistics
from .opponent import Opponent
from .statistics import Statistics
from .team import Team
from .user import User
__all__ = [
"Availability",
"AvailabilitySummary",
"Event",
"EventLineup",
"EventLineupEntry",
"Location",
"Me",
"Member",
"MemberStatistics",
"Opponent",
"Statistics",
"Team",
"User",
]

View File

@@ -0,0 +1,22 @@
from .base import BaseApiObject
class Availability(BaseApiObject):
rel = "availabilities"
type = "availability"
version = "3.866.0"
@property
def data(self):
"""Data dictionary for object
:return: dict: dict with keys:
- event_id
- member_id
- notes
- notes_author_member_id
- source
- status_code
- type
"""
return super().data

View File

@@ -0,0 +1,15 @@
from .base import BaseApiObject
class AvailabilitySummary(BaseApiObject):
rel = "availability_summaries"
type = "availability_summary"
version = "3.866.0"
@property
def data(self):
"""Data dictionary for object
:return: dict: dict with keys:
"""
return super().data

93
pyteamsnap/models/base.py Normal file
View File

@@ -0,0 +1,93 @@
from __future__ import annotations
import apiclient.exceptions
from apiclient import (
APIClient,
)
import typing as T
# Import "preview" of Self typing
# https://stackoverflow.com/a/70932112
from typing_extensions import Self
class BaseApiObject:
rel: str = None
version: str = None
def __init__(
self, client: APIClient, data: T.Dict[str, T.Union[str, list]] = {}
) -> None:
"""
:param client:
:param data: Data to instantiate instance, defaults to empty dict.
"""
self.client = client
self._data = data
self.rel = self.__class__.rel
"""rel: Relationship between a linked resource and the current document"""
def __repr__(self):
return f'TeamSnap<{self.__class__.__name__}:{self.id}> "{self.__str__()}"'
def __getitem__(self, key):
return self._data.__getitem__(key)
def __setitem__(self, key, newvalue):
return self._data.__setitem__(key, newvalue)
def __iter__(self):
return iter(self._data.items())
@property
def id(self) -> int:
return self._data["id"]
@property
def data(self) -> T.Dict[str, T.Union[str, list]]:
"""Data dictionary for object
:return: dict: dict with keys:
"""
return self._data
@classmethod
def search(cls, client: APIClient, **kwargs):
try:
results = client.query(cls.rel, "search", **kwargs)
except apiclient.exceptions.ServerError as e:
raise e
return [cls(client, data=r) for r in results]
@classmethod
def get(cls, client: APIClient, id: T.Union[int, str]) -> Self:
r = client.get(f"{client.link(cls.rel)}/{id}")
return cls(client, cls.rel, client.parse_response(r)[0])
@classmethod
def new(cls, client: Self) -> Self:
return cls(client, cls.rel)
def post(self) -> Self:
data = {
"template": {
"data": [{"name": k, "value": v} for k, v in self.data.items()]
}
}
r = self.client.post_item(self.rel, data=data)
self._data = r
return self
def put(self) -> Self:
data = {
"template": {
"data": [{"name": k, "value": str(v)} for k, v in self.data.items()]
}
}
id = self.data.get("id")
r = self.client.put_item(self.rel, id=id, data=data)
self._data = r
return self
def delete(self):
self.client.delete_item(self.rel, id=self.data["id"])

View File

@@ -0,0 +1,59 @@
from .base import BaseApiObject
class Event(BaseApiObject):
"""Associated object to a team; and represents an event or game that is tracked in the TeamSnap system.
https://www.teamsnap.com/documentation/apiv3/objects#Events
"""
rel = "events"
type = "event"
version = "3.866.0"
@property
def data(self):
"""Data dictionary for object
:return: dict: dict with strings:
- type
- additional_location_details
- browser_time_zone
- division_location_id
- doesnt_count_towards_record
- duration_in_minutes
- game_type_code
- icon_color
- is_canceled
- is_game
- is_overtime
- is_shootout
- is_tbd
- label
- location_id
- minutes_to_arrive_early
- name
- notes
- notify_opponent
- notify_opponent_contacts_email
- notify_opponent_contacts_name
- notify_opponent_notes
- notify_team
- notify_team_as_member_id
- opponent_id
- points_for_opponent
- points_for_team
- repeating_include
- repeating_type_code
- repeating_until
- results
- results_url
- shootout_points_for_opponent
- shootout_points_for_team
- start_date
- team_id
- time_zone
- tracks_availability
- uniform
"""
return super().data

View File

@@ -0,0 +1,15 @@
from .base import BaseApiObject
class EventLineup(BaseApiObject):
rel = "event_lineups"
type = "event_lineup"
version = "3.866.0"
template = {}
@property
def data(self):
"""
:return: dict: dict with strings:
"""
return super().data

View File

@@ -0,0 +1,27 @@
from .base import BaseApiObject
class EventLineupEntry(BaseApiObject):
rel = "event_lineup_entries"
type = "event_lineup_entry"
version = "3.866.0"
@property
def data(self):
"""
:return: dict: dict with strings:
- member_id
- sequence
- label
- type
"""
return super().data
@classmethod
def search(cls, client, **kwargs):
# For some reason the query listed for search at this endpoint is for EventLineup, not EventLineupEntry
# this is a workaround
r = client.get(f"{client.link(cls.rel)}/search", params=kwargs)
results = client.parse_response(r)
[cls(client, rel=cls.rel, data=r) for r in results]
return [cls(client, rel=cls.rel, data=r) for r in results]

View File

@@ -0,0 +1,25 @@
from .base import BaseApiObject
class Location(BaseApiObject):
rel = "locations"
type = "location"
version = "3.866.0"
@property
def data(self):
"""Data dictionary for object
:return: dict: dict with keys:
- name
- url
- phone
- notes
- address
- latitude
- longitude
- team_id
- is_retired
- type
"""
return super().data

17
pyteamsnap/models/me.py Normal file
View File

@@ -0,0 +1,17 @@
from .user import User
class Me(User):
"""The current user's object. It is not possible to create or delete users via the API;
however, it is possible to update data on a user's record.
https://www.teamsnap.com/documentation/apiv3/objects#Me
"""
rel = "me"
type = "user"
version = "3.866.0"
def __new__(self, client):
data = client.parse_response(client.get(client.link(self.rel)))[0]
return User(client=client, data=data)

View File

@@ -0,0 +1,41 @@
from .base import BaseApiObject
class Member(BaseApiObject):
"""A member (also referred to as a roster in our web and mobile apps) is a member of a team.
https://www.teamsnap.com/documentation/apiv3/objects#Members
"""
rel = "members"
type = "member"
version = "3.866.0"
@property
def data(self):
"""Data dictionary for object
:return: dict: dict with keys:
- first_name
- last_name
- address_city
- address_state
- address_street1
- address_street2
- address_zip
- birthday
- gender
- hide_address
- hide_age
- is_address_hidden
- is_age_hidden
- is_manager
- is_non_player
- is_ownership_pending
- jersey_number
- position
- source_action
- team_id
- type
"""
return super().data

View File

@@ -0,0 +1,5 @@
from .base import BaseApiObject
class MemberStatistics(BaseApiObject):
rel = "member_statistics"

View File

@@ -0,0 +1,22 @@
from .base import BaseApiObject
class Opponent(BaseApiObject):
rel = "opponents"
type = "opponent"
version = "3.866.0"
@property
def data(self):
"""Data dictionary for object
:return: dict: dict with keys:
- name
- contacts_name
- contacts_phone
- contacts_email
- notes
- team_id
- type
"""
return super().data

View File

@@ -0,0 +1,29 @@
from .base import BaseApiObject
class Statistics(BaseApiObject):
rel = "statistics"
type = "statistic"
version = "3.866.0"
@property
def data(self):
"""Data dictionary for object
:return: dict: dict with keys:
- acronym
- always_display_decimals
- formula
- is_in_descending_order
- display_zero_totals
- is_percentage
- is_private
- is_team_statistic
- is_top_statistic
- name
- precision
- statistic_group_id
- team_id
- type
"""
return super().data

43
pyteamsnap/models/team.py Normal file
View File

@@ -0,0 +1,43 @@
from .base import BaseApiObject
class Team(BaseApiObject):
"""Associated teams from your origin object. Full CRUD is possible with the teams endpoint.
https://www.teamsnap.com/documentation/apiv3/objects#Teams
"""
rel = "teams"
type = "team"
version = "3.866.0"
# Override this class property to add docstring
# should not change functionality. Probably a better
# to do this...
@property
def data(self):
"""Data dictionary for object
:return: dict: dict with keys:
- ad_unit_hero_id
- ad_unit_hero_template_id
- ad_unit_inline_id
- division_id
- division_name
- is_ownership_pending
- league_name
- league_url
- location_country
- location_postal_code
- name
- owner_email
- owner_first_name
- owner_last_name
- season_name
- sport_id
- team
- time_zone
- type
"""
return super().data

28
pyteamsnap/models/user.py Normal file
View File

@@ -0,0 +1,28 @@
from .base import BaseApiObject
class User(BaseApiObject):
rel = "users"
type = "user"
version = "3.866.0"
def __str__(self):
return f'{self["first_name"]} {self["last_name"]}'
@property
def data(self):
"""Data dictionary for object
:return: dict: dict with keys:
- first_name
- last_name
- password
- birthday
- email
- facebook_id
- facebook_access_token
- type
- is_lab_rat
- receives_newsletter
"""
return super().data

2
requirements.txt Normal file
View File

@@ -0,0 +1,2 @@
api-client==1.3.1
typing-extensions==4.4

7
requirements_dev.txt Normal file
View File

@@ -0,0 +1,7 @@
bump2version==0.5.11
flake8==5.0
tox==3.27
black==22.10
vcrpy==4.2
jinja2==3.1
python-dotenv==0.21

2
requirements_docs.txt Normal file
View File

@@ -0,0 +1,2 @@
Sphinx==5.3
sphinx_rtd_theme==1.1

View File

@@ -1,24 +1,44 @@
#!/usr/bin/env python
"""The setup script."""
from setuptools import setup, find_packages
VERSION = '0.0.1'
DESCRIPTION = 'Python package to interface with TeamSnap API'
LONG_DESCRIPTION = 'https://www.teamsnap.com/documentation'
with open('README.rst') as readme_file:
readme = readme_file.read()
with open('HISTORY.rst') as history_file:
history = history_file.read()
requirements = [ ]
test_requirements = [ ]
# Setting up
setup(
name="pyteamsnap",
version=VERSION,
author="Anthony Correa",
author_email="a@correa.co",
description=DESCRIPTION,
long_description=LONG_DESCRIPTION,
packages=find_packages(),
install_requires=[
"api-client",
"collection_json"
],
keywords=['teamsnap'],
author_email='a@correa.co',
python_requires='>=3.8',
classifiers=[
]
)
'Development Status :: 4 - Beta'
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Natural Language :: English',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
],
description="An unoffical wrapper for the TeamSnap API",
install_requires=requirements,
license="MIT license",
long_description=readme + '\n\n' + history,
include_package_data=True,
keywords='pyteamsnap',
name='pyteamsnap',
packages=find_packages(include=['pyteamsnap', 'pyteamsnap.*']),
test_suite='unittests',
tests_require=test_requirements,
url='https://github.com/anthonyscorrea/pyteamsnap',
version='0.2.0',
zip_safe=False,
)

1
tests/__init__.py Normal file
View File

@@ -0,0 +1 @@
"""Unit test package for pyteamsnap."""

47
tests/base.py Normal file
View File

@@ -0,0 +1,47 @@
#!/usr/bin/env python
"""Tests for `pyteamsnap` package."""
import unittest
from unittest import TestCase
from pyteamsnap import client
from os import getenv
from pyteamsnap.models.base import BaseApiObject
import vcr
TEAMSNAP_TOKEN = getenv('TEAMSNAP_TOKEN')
TEAMSNAP_TEAM = getenv('TEAMSNAP_TEAM')
TEAMSNAP_EVENT = getenv('TEAMSNAP_EVENT')
vcr_options = {
'decode_compressed_response': True,
'cassette_library_dir':'tests/fixtures/cassettes',
'filter_headers':['authorization']
}
class BaseModelTestCase:
"""Tests for `pyteamsnap` package."""
__test__= False
TestClass: BaseApiObject = None
@classmethod
def setUpClass(cls) -> None:
"""Set up test fixtures, if any."""
cls.TEAMSNAP_TOKEN = getenv('TEAMSNAP_TOKEN')
cls.TEAMSNAP_TEAM = int(getenv('TEAMSNAP_TEAM'))
with vcr.use_cassette("client.yml", **vcr_options):
cls.client = client.TeamSnap(token=TEAMSNAP_TOKEN)
cls.cassette = vcr.use_cassette(f"{cls.__name__}.yml", **vcr_options)
super().setUpClass()
def test_data(self):
with self.cassette:
search_results = self.TestClass.search(self.client, team_id=self.TEAMSNAP_TEAM)
instance = search_results[0]
self.assertIsInstance(instance, self.TestClass)
self.assertTrue(len(instance.data))
return instance

Some files were not shown because too many files have changed in this diff Show More