intial commit of tests, documentation

This commit is contained in:
2022-11-05 13:53:37 -05:00
parent 9085c184bf
commit 852acafcae
115 changed files with 21599 additions and 1229 deletions

2
.gitignore vendored
View File

@@ -104,3 +104,5 @@ ENV/
# IDE settings
.vscode/
.idea/
.run/
/tests/fixtures/cassettes/*.yml

View File

@@ -5,7 +5,7 @@ Credits
Development Lead
----------------
* Anthony Correa <a@correa.co>
* Anthony Correa <https://github.com/anthonyscorrea>
Contributors
------------

View File

@@ -1,240 +1,120 @@
<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>
==========
pyteamsnap
==========
<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>
.. 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.
<!-- 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>
Installation
------------
Install **pyteamsnap** from GitHub
.. code-block:: console
<!-- ABOUT THE PROJECT -->
## About The Project
$ pip install git+https://github.com/anthonyscorrea/pyteamsnap
An unoffical python wrapper for the [TeamSnap API](https://www.teamsnap.com/documentation/apiv3). A work in progress.
Getting Started
---------------
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
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)
### Built With
You can use pyteamsnap constructors in pyteamsnap models to create instances.
* [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 the user object for the authenticated user.
.. code-block:: python
>>> from pyteamsnap.models import Me
<!-- GETTING STARTED -->
## Getting Started
>>> me = Me(client)
### Prerequisites
>>> me
TeamSnap<User:00000000> "FirstName LastName"
* [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
```
There is only one "Me" for a session, so no searching required.
### Installation
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.
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
```
A few examples:
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
.. code-block:: python
<!-- USAGE EXAMPLES -->
## Usage Example
>>> managed_teams = me['managed_teams']
```python
from pyteamsnap.client import TeamSnap
from pyteamsnap.objects import Me, Event, EventLineupEntry, Member
client = TeamSnap(token=TOKEN)
>>> managed_teams
[TeamSnap<Team:00000000> "TeamName"]
# get authenticated user
me = Me(client)
>>> team = managed_teams[0]
# get a list of team_ids for the user
managed_team_ids = me.data['managed_teams']
>>> team['name']
TeamName
# 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)
Objects have a search function, where search criteria is passed as keyword arguments
# get an object with the object id of EVENT_ID
event = Event.get(client, id=EVENT_ID)
.. code-block:: python
# get some information about the event
start_date = event.data['start_date']
>>> from pyteamsnap.models import Event
# create a new member
member = Member.new(client)
member.data['first_name'] = 'Ferguson'
member.post()
>>> events = Event.search(client, team_id=team['id'])
# update a Member with id of MEMBER_ID
member = Member.get(client, id=MEMBER_ID)
member.data['last_name'] = 'Jenkins'
member.put()
>>> events
[Teamsnap<Event:00000000> "Event Title", TeamSnap<Event:00000001> "Event Title"]
# delete a Member
member.delete()
>>> event = events[0]
# perform a bulk load
list_of_ts_objects = client.bulk_load(team_id = TEAM_ID, types = [Event, Member], event__id=EVENT_ID)
```
>>> event['start_date']
datetime.datetime(2000, 1, 1, 12, 00, 00, 0)
Objects can be retrieved singularly with an id.
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
.. code-block:: python
>>> event = Event.get(client, 00000000)
<!-- ROADMAP -->
## Roadmap
>>> event
TeamSnap<Event:00000000> "Event Title"
Implemented objects
- [X] Me
- [X] User
- [X] Event
- [X] Team
- [X] Availability
- [X] Member
- [X] Location
- [X] Opponent
- [X] EventLineupEntry
- [X] EventLineup
- [X] AvailabilitySummary
Objects can be created, updated, and deleted (as permissions allow).
Implemented Queries
- [x] search
- [x] bulk_load
.. code-block:: python
Implemented Actions
- [x] create
- [x] read
- [x] update
- [x] destroy
>>> from pyteamsnap import Member
Implemented objects, but not tested.
- [ ] Statistics
- [ ] MemberStatistics
>>> new_member = Member.new(client)
See the [open issues](https://github.com/anthonyscorrea/pyteamsnap/issues) for a full list of proposed features (and known issues).
>>> new_member['first_name'] = 'Ferguson'
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
>>> new_member['last_name'] = 'Jenkins'
>>> member.post()
TeamSnap<Member:00000001> "Ferguson Jenkins"
>>> member['jersey_number'] = 31
<!-- CONTRIBUTING -->
## Contributing
>>> member.put()
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
>>> member.delete()
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!
To load a hetereogeneous list of objects given parameters, the ``bulk_load`` function can be used
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
.. code-block:: python
<p style="text-align:right;">(<a href="#top">back to top</a>)</p>
>> 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
-------------
<!-- 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
`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

View File

@@ -1,12 +1,12 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = python -msphinx
SPHINXPROJ = pyteamsnap
SOURCEDIR = .
BUILDDIR = _build
# 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:
@@ -18,3 +18,7 @@ help:
# "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

View File

@@ -1 +0,0 @@
.. include:: ../AUTHORS.rst

View File

@@ -1,162 +0,0 @@
#!/usr/bin/env python
#
# pyteamsnap documentation build configuration file, created by
# sphinx-quickstart on Fri Jun 9 13:47:02 2017.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
# If extensions (or modules to document with autodoc) are in another
# directory, add these directories to sys.path here. If the directory is
# relative to the documentation root, use os.path.abspath to make it
# absolute, like shown here.
#
import os
import sys
sys.path.insert(0, os.path.abspath('..'))
import pyteamsnap
# -- General configuration ---------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = 'pyteamsnap'
copyright = "2022, Anthony Correa"
author = "Anthony Correa"
# The version info for the project you're documenting, acts as replacement
# for |version| and |release|, also used in various other places throughout
# the built documents.
#
# The short X.Y version.
version = pyteamsnap.__version__
# The full version, including alpha/beta/rc tags.
release = pyteamsnap.__version__
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This patterns also effect to html_static_path and html_extra_path
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = False
# -- Options for HTML output -------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'
# Theme options are theme-specific and customize the look and feel of a
# theme further. For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# -- Options for HTMLHelp output ---------------------------------------
# Output file base name for HTML help builder.
htmlhelp_basename = 'pyteamsnapdoc'
# -- Options for LaTeX output ------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass
# [howto, manual, or own class]).
latex_documents = [
(master_doc, 'pyteamsnap.tex',
'pyteamsnap Documentation',
'Anthony Correa', 'manual'),
]
# -- Options for manual page output ------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'pyteamsnap',
'pyteamsnap Documentation',
[author], 1)
]
# -- Options for Texinfo output ----------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'pyteamsnap',
'pyteamsnap Documentation',
author,
'pyteamsnap',
'One line description of project.',
'Miscellaneous'),
]

View File

@@ -1 +0,0 @@
.. include:: ../CONTRIBUTING.rst

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>

View File

@@ -1 +0,0 @@
.. include:: ../HISTORY.rst

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>

View File

@@ -1,20 +0,0 @@
Welcome to pyteamsnap's documentation!
======================================
.. toctree::
:maxdepth: 2
:caption: Contents:
readme
installation
usage
modules
contributing
authors
history
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

View File

@@ -1,51 +0,0 @@
.. highlight:: shell
============
Installation
============
Stable release
--------------
To install pyteamsnap, run this command in your terminal:
.. code-block:: console
$ pip install pyteamsnap
This is the preferred method to install pyteamsnap, as it will always install the most recent stable release.
If you don't have `pip`_ installed, this `Python installation guide`_ can guide
you through the process.
.. _pip: https://pip.pypa.io
.. _Python installation guide: http://docs.python-guide.org/en/latest/starting/installation/
From sources
------------
The sources for pyteamsnap can be downloaded from the `Github repo`_.
You can either clone the public repository:
.. code-block:: console
$ git clone git://github.com/anthonyscorrea/pyteamsnap
Or download the `tarball`_:
.. code-block:: console
$ curl -OJL https://github.com/anthonyscorrea/pyteamsnap/tarball/master
Once you have a copy of the source, you can install it with:
.. code-block:: console
$ python setup.py install
.. _Github repo: https://github.com/anthonyscorrea/pyteamsnap
.. _tarball: https://github.com/anthonyscorrea/pyteamsnap/tarball/master

View File

@@ -5,32 +5,31 @@ pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=python -msphinx
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=_build
set SPHINXPROJ=pyteamsnap
if "%1" == "" goto help
set SOURCEDIR=source
set BUILDDIR=build
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The Sphinx module was not found. Make sure you have Sphinx installed,
echo.then set the SPHINXBUILD environment variable to point to the full
echo.path of the 'sphinx-build' executable. Alternatively you may add the
echo.Sphinx directory to PATH.
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.http://sphinx-doc.org/
echo.https://www.sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
if "%1" == "" goto help
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
%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>

View File

@@ -1 +0,0 @@
.. include:: ../README.rst

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:

View File

@@ -1,7 +0,0 @@
=====
Usage
=====
To use pyteamsnap in a project::
import pyteamsnap

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,5 +1,5 @@
"""Top-level package for pyteamsnap."""
__author__ = """Anthony Correa"""
__email__ = 'a@correa.co'
__version__ = '0.1.0'
__email__ = "a@correa.co"
__version__ = "0.1.0"

View File

@@ -1,114 +1,142 @@
from apiclient import APIClient, HeaderAuthentication, JsonResponseHandler, JsonRequestFormatter
import typing as T
from apiclient import (
APIClient,
HeaderAuthentication,
JsonResponseHandler,
JsonRequestFormatter,
)
from pyteamsnap.models.base import BaseApiObject
import datetime
class TeamSnap(APIClient):
base_url = 'https://api.teamsnap.com/v3'
TTeamSnap = T.TypeVar("TTeamSnap", bound="TeamSnap")
def __init__(self, token, *args, **kwargs):
super().__init__(*args,
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')
**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 = {l['rel']:l['href'] for l in self._root_collection["links"]}
d = {link["rel"]: link["href"] for link in self._root_collection["links"]}
return d.get(link_name)
def bulk_load(self, team_id, types, **kwargs):
def bulk_load(
self, team_id, types: T.List[BaseApiObject], **kwargs
) -> T.List[TTeamSnap]:
"""
Returns a heterogeneous collection of the specified types for a specified team or teams.
Additional filters can be passed into requested types by passing them in the url's querystring
: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.
:param team_id:
:param types:
:param kwargs:
:return:
:return: Heterogeneous collection of the specified types for a specified team or teams.
"""
types_dict = {t.type:t for t in types}
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
**kwargs,
)
result = []
for item in r:
cls = types_dict[item['type']]
instance = cls(self, rel=cls.rel, data=item)
cls = types_dict[item["type"]]
instance = cls(self, data=item)
result.append(instance)
return result
def _by_rel (self, url, k):
# try:
# return {l['rel']: l for l in self._root_collection[k]}
# except Exception as e:
# return {}
# self.get(url)['collection'][k]
return {l['rel']:l for l in self.get(url)['collection'][k]}
def _by_rel(self, url: str, record_key: str) -> dict:
"""Get a mapping of record_key to its collection.
def query (self, rel, query, **kwargs):
queries = self._by_rel(self._get_href(rel), 'queries')
: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, **kwargs):
commands = self._by_rel(self._get_href(rel), 'commands')
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 = base_url) -> str:
"""returns a hyperlink from a 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')
def _get_href(self, rel: str, links: dict = None, url: str = base_url) -> str:
"""
link = links[rel]['href']
: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:
pass
raise e
return link
def get_item (self, rel, id):
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, data):
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, data):
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):
r = super(TeamSnap, self).delete(f"{self.link(rel)}/{id}")
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):
def parse_response(self, response: dict) -> list:
result = []
items = [item['data'] for item in response['collection'].get('items',[])]
for item in response['collection'].get('items',[]):
for item in response["collection"].get("items", []):
details = {}
for detail in item['data']:
value = detail['value']
value_type = detail['type']
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':
value = value == True
elif value_type == 'Integer':
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
details[detail["name"]] = value
result.append(details)
return result

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

View File

@@ -1,627 +0,0 @@
import apiclient.exceptions
from apiclient import APIClient, HeaderAuthentication, JsonResponseHandler, JsonRequestFormatter
class BaseApiObject():
rel = None
version = None
template = None
def __init__(self, client, rel=rel, data={}):
self.client = client
self.data = data
self.rel = rel
@classmethod
def search(cls, client, **kwargs):
try:
results = client.query(cls.rel, "search", **kwargs)
except apiclient.exceptions.ServerError as e:
raise e
return [cls(client,rel=cls.rel, data=r) for r in results]
@classmethod
def get(cls, client, id):
r = client.get(f"{client.link(cls.rel)}/{id}")
return cls(client, cls.rel, client.parse_response(r)[0])
@classmethod
def new(cls, client):
return cls(client, cls.rel)
def post(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 r
def put(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 r
def delete(self):
self.client.delete_item(self.rel, id=self.data['id'])
class Me (BaseApiObject):
rel = "me"
type = "user"
version = "3.866.0"
template = {
"data": [
{
"name": "first_name"
},
{
"name": "last_name"
},
{
"name": "password"
},
{
"name": "birthday"
},
{
"name": "email"
},
{
"name": "facebook_id",
"deprecated": True,
"prompt": "facebook_id is deprecated and has been removed. Continued use of facebook_id is not recommended it will no longer be stored."
},
{
"name": "facebook_access_token",
"deprecated": True,
"prompt": "facebook_access_token is deprecated and has been removed. Continued use of facebook_access_token is not recommended it will no longer be stored."
},
{
"name": "type",
"value": "user"
},
{
"name": "is_lab_rat"
},
{
"name": "receives_newsletter"
}
]
}
def __init__(self, client):
data = client.parse_response(client.get(client.link(self.rel)))[0]
super().__init__(client=client, rel=self.rel, data=data)
class User (BaseApiObject):
rel = "users"
type = "user"
version = "3.866.0"
template = {
"data": [
{
"name": "first_name"
},
{
"name": "last_name"
},
{
"name": "password"
},
{
"name": "birthday"
},
{
"name": "email"
},
{
"name": "facebook_id",
"deprecated": True,
"prompt": "facebook_id is deprecated and has been removed. Continued use of facebook_id is not recommended it will no longer be stored."
},
{
"name": "facebook_access_token",
"deprecated": True,
"prompt": "facebook_access_token is deprecated and has been removed. Continued use of facebook_access_token is not recommended it will no longer be stored."
},
{
"name": "type",
"value": "user"
},
{
"name": "is_lab_rat"
},
{
"name": "receives_newsletter"
}
]
}
class Event (BaseApiObject):
rel = "events"
type = "event"
version = "3.866.0"
template = {
"data": [
{
"name": "type",
"value": "event"
},
{
"name": "additional_location_details"
},
{
"name": "browser_time_zone"
},
{
"name": "division_location_id"
},
{
"name": "doesnt_count_towards_record"
},
{
"name": "duration_in_minutes"
},
{
"name": "game_type_code"
},
{
"name": "icon_color"
},
{
"name": "is_canceled"
},
{
"name": "is_game"
},
{
"name": "is_overtime"
},
{
"name": "is_shootout"
},
{
"name": "is_tbd"
},
{
"name": "label"
},
{
"name": "location_id"
},
{
"name": "minutes_to_arrive_early"
},
{
"name": "name"
},
{
"name": "notes"
},
{
"name": "notify_opponent"
},
{
"name": "notify_opponent_contacts_email"
},
{
"name": "notify_opponent_contacts_name"
},
{
"name": "notify_opponent_notes"
},
{
"name": "notify_team"
},
{
"name": "notify_team_as_member_id"
},
{
"name": "opponent_id"
},
{
"name": "points_for_opponent"
},
{
"name": "points_for_team"
},
{
"name": "repeating_include",
"prompt": "When updating a repeating event, this is a required field. Values are: \"all\" - updates all events in this series, \"future\" - updates this event and all that occur after, \"none\" - only updates a single event."
},
{
"name": "repeating_type_code",
"prompt": "A app for the frequency of the repeated event, this is required with the \"repeating_include\" attribute when creating a repeating event. Valid values are: \"1\" - repeat an event daily, \"2\" - repeat an event weekly."
},
{
"name": "repeating_until",
"prompt": "A date when the repeating event should end, this is inclusive so an event will be created on this day if it falls before the next event specified by \"repeating_type_code\". This attribute is required with \"repeating_type_code\" when creating a repeating event."
},
{
"name": "results"
},
{
"name": "results_url"
},
{
"name": "shootout_points_for_opponent"
},
{
"name": "shootout_points_for_team"
},
{
"name": "start_date"
},
{
"name": "team_id"
},
{
"name": "time_zone"
},
{
"name": "tracks_availability"
},
{
"name": "uniform"
}
]}
class Team (BaseApiObject):
rel = "teams"
type = "team"
version = "3.866.0"
template = {
"data": [
{
"name": "name"
},
{
"name": "location_country"
},
{
"name": "location_postal_code"
},
{
"name": "time_zone",
"prompt": "The time_zone parameter is required when creating a team, but for changing a team's time_zone, use the update_time_zone command"
},
{
"name": "sport_id"
},
{
"name": "division_id"
},
{
"name": "division_name"
},
{
"name": "season_name"
},
{
"name": "league_name"
},
{
"name": "league_url"
},
{
"name": "owner_first_name"
},
{
"name": "owner_last_name"
},
{
"name": "owner_email"
},
{
"name": "is_ownership_pending"
},
{
"name": "ad_unit_hero_id"
},
{
"name": "ad_unit_hero_template_id"
},
{
"name": "ad_unit_inline_id"
},
{
"name": "type",
"value": "team"
}
]
}
class Availability (BaseApiObject):
rel = "availabilities"
type = "availability"
version = "3.866.0"
template = {
"data": [
{
"name": "status_code"
},
{
"name": "notes"
},
{
"name": "event_id"
},
{
"name": "member_id"
},
{
"name": "notes_author_member_id"
},
{
"name": "source"
},
{
"name": "type",
"value": "availability"
}
]
}
class Member (BaseApiObject):
rel = "members"
type = "member"
version = "3.866.0"
template = {
"data": [
{
"name": "first_name"
},
{
"name": "last_name"
},
{
"name": "gender"
},
{
"name": "position"
},
{
"name": "is_manager"
},
{
"name": "birthday"
},
{
"name": "hide_age",
"deprecated": True,
"prompt": "hide_age is deprecated and will be removed in a future version, use is_age_hidden instead."
},
{
"name": "is_age_hidden"
},
{
"name": "hide_address",
"deprecated": True,
"prompt": "hide_address is deprecated and will be removed in a future version, use is_address_hidden instead."
},
{
"name": "is_address_hidden"
},
{
"name": "is_non_player"
},
{
"name": "address_street1"
},
{
"name": "address_street2"
},
{
"name": "address_city"
},
{
"name": "address_state"
},
{
"name": "address_zip"
},
{
"name": "jersey_number"
},
{
"name": "team_id"
},
{
"name": "is_ownership_pending"
},
{
"name": "source_action"
},
{
"name": "type",
"value": "member"
}
]
},
class Location (BaseApiObject):
rel = "locations"
type = "location"
version = "3.866.0"
template = {
"data": [
{
"name": "name"
},
{
"name": "url"
},
{
"name": "phone"
},
{
"name": "notes"
},
{
"name": "address"
},
{
"name": "latitude"
},
{
"name": "longitude"
},
{
"name": "team_id"
},
{
"name": "is_retired"
},
{
"name": "type",
"value": "location"
}
]
}
class Opponent (BaseApiObject):
rel = "opponents"
type = "opponent"
version = "3.866.0"
template = {
"data": [
{
"name": "name"
},
{
"name": "contacts_name"
},
{
"name": "contacts_phone"
},
{
"name": "contacts_email"
},
{
"name": "notes"
},
{
"name": "team_id"
},
{
"name": "type",
"value": "opponent"
}
]
}
class EventLineupEntry (BaseApiObject):
rel = "event_lineup_entries"
type = "event_lineup_entry"
version = "3.866.0"
template = {
"data": [
{
"name": "event_lineup_id"
},
{
"name": "member_id"
},
{
"name": "sequence"
},
{
"name": "label"
},
{
"name": "type",
"value": "event_lineup_entry"
}
]
}
@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]
class EventLineup (BaseApiObject):
rel = "event_lineups"
type = "event_lineup"
version = "3.866.0"
template = {}
class AvailabilitySummary (BaseApiObject):
rel = "availability_summaries"
type = "availability_summary"
version = "3.866.0"
template = {}
class Statistics (BaseApiObject):
rel = "statistics"
type = "statistic"
version = "3.866.0"
template = {
"data": [
{
"name": "acronym"
},
{
"name": "always_display_decimals"
},
{
"name": "formula"
},
{
"name": "is_in_descending_order"
},
{
"name": "display_zero_totals"
},
{
"name": "is_percentage"
},
{
"name": "is_private"
},
{
"name": "is_team_statistic"
},
{
"name": "is_top_statistic"
},
{
"name": "name"
},
{
"name": "precision"
},
{
"name": "statistic_group_id"
},
{
"name": "team_id"
},
{
"name": "type",
"value": "statistic"
}
]
}
class MemberStatistics (BaseApiObject):
rel = "member_statistics"

View File

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

View File

@@ -1,12 +1,7 @@
pip==19.2.3
bump2version==0.5.11
wheel==0.33.6
watchdog==0.9.0
flake8==3.7.8
tox==3.14.0
coverage==4.5.4
Sphinx==1.8.5
twine==1.14.0
black==21.7b0
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,18 +0,0 @@
[bumpversion]
current_version = 0.1.0
commit = True
tag = True
[bumpversion:file:setup.py]
search = version='{current_version}'
replace = version='{new_version}'
[bumpversion:file:pyteamsnap/__init__.py]
search = __version__ = '{current_version}'
replace = __version__ = '{new_version}'
[bdist_wheel]
universal = 1
[flake8]
exclude = docs

View File

@@ -17,16 +17,16 @@ test_requirements = [ ]
setup(
author="Anthony Correa",
author_email='a@correa.co',
python_requires='>=3.6',
python_requires='>=3.8',
classifiers=[
'Development Status :: 2 - Pre-Alpha',
'Development Status :: 4 - Beta'
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Natural Language :: English',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'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,
@@ -36,9 +36,9 @@ setup(
keywords='pyteamsnap',
name='pyteamsnap',
packages=find_packages(include=['pyteamsnap', 'pyteamsnap.*']),
test_suite='tests',
test_suite='unittests',
tests_require=test_requirements,
url='https://github.com/anthonyscorrea/pyteamsnap',
version='0.1.0',
version='0.2.0',
zip_safe=False,
)

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

0
tests/fixtures/.gitkeep vendored Normal file
View File

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