├── .github
└── workflows
│ └── python-publish.yml
├── .gitignore
├── .travis.yml
├── README.md
├── clickupython
├── __init__.py
├── client.py
├── exceptions.py
├── helpers
│ ├── __init__.py
│ ├── formatting.py
│ └── timefuncs.py
└── models.py
├── docs
├── _build
│ ├── doctrees
│ │ ├── clickupy.doctree
│ │ ├── clickupy.helpers.doctree
│ │ ├── environment.pickle
│ │ ├── functions.doctree
│ │ ├── index.doctree
│ │ ├── lists.doctree
│ │ ├── modules.doctree
│ │ └── tasks.doctree
│ └── html
│ │ ├── .buildinfo
│ │ ├── _sources
│ │ ├── clickupy.helpers.rst.txt
│ │ ├── clickupy.rst.txt
│ │ ├── functions.rst.txt
│ │ ├── index.rst.txt
│ │ ├── lists.rst.txt
│ │ ├── modules.rst.txt
│ │ └── tasks.rst.txt
│ │ ├── _static
│ │ ├── basic.css
│ │ ├── css
│ │ │ ├── badge_only.css
│ │ │ ├── fonts
│ │ │ │ ├── Roboto-Slab-Bold.woff
│ │ │ │ ├── Roboto-Slab-Bold.woff2
│ │ │ │ ├── Roboto-Slab-Regular.woff
│ │ │ │ ├── Roboto-Slab-Regular.woff2
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ ├── fontawesome-webfont.woff
│ │ │ │ ├── fontawesome-webfont.woff2
│ │ │ │ ├── lato-bold-italic.woff
│ │ │ │ ├── lato-bold-italic.woff2
│ │ │ │ ├── lato-bold.woff
│ │ │ │ ├── lato-bold.woff2
│ │ │ │ ├── lato-normal-italic.woff
│ │ │ │ ├── lato-normal-italic.woff2
│ │ │ │ ├── lato-normal.woff
│ │ │ │ └── lato-normal.woff2
│ │ │ └── theme.css
│ │ ├── doctools.js
│ │ ├── documentation_options.js
│ │ ├── file.png
│ │ ├── jquery-3.5.1.js
│ │ ├── jquery.js
│ │ ├── js
│ │ │ ├── badge_only.js
│ │ │ ├── html5shiv-printshiv.min.js
│ │ │ ├── html5shiv.min.js
│ │ │ └── theme.js
│ │ ├── language_data.js
│ │ ├── minus.png
│ │ ├── plus.png
│ │ ├── pygments.css
│ │ ├── searchtools.js
│ │ ├── underscore-1.13.1.js
│ │ └── underscore.js
│ │ ├── clickupy.helpers.html
│ │ ├── clickupy.html
│ │ ├── functions.html
│ │ ├── genindex.html
│ │ ├── index.html
│ │ ├── lists.html
│ │ ├── modules.html
│ │ ├── objects.inv
│ │ ├── py-modindex.html
│ │ ├── search.html
│ │ ├── searchindex.js
│ │ └── tasks.html
├── clickupy.helpers.rst
├── clickupy.rst
├── conf.py
├── functions.rst
├── index.rst
├── lists.rst
├── modules.rst
└── tasks.rst
├── examples
└── examples.py
├── requirements.txt
├── setup.cfg
├── setup.py
└── tests
├── .coverage
├── __init__.py
├── assets
├── Repositories _ Documentation _ Poetry - Python dependency management and packaging made easy.html
├── Repositories _ Documentation _ Poetry - Python dependency management and packaging made easy_files
│ ├── app.832c9ab312fdf367c5fc9e258801465a7476c6db8a105d0192646ef055ce77e8.js.download
│ ├── app.d4300324a0faa0dcb73ea4433398584b1f99ab832dcdb573950152bde033078d.css
│ ├── logo-origami.svg
│ └── plausible.js.download
└── test-image.png
├── test_client.py
└── test_timefuncs.py
/.github/workflows/python-publish.yml:
--------------------------------------------------------------------------------
1 | # This workflow will upload a Python Package using Twine when a release is created
2 | # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
3 |
4 | # This workflow uses actions that are not certified by GitHub.
5 | # They are provided by a third-party and are governed by
6 | # separate terms of service, privacy policy, and support
7 | # documentation.
8 |
9 | name: Upload Python Package
10 |
11 | on:
12 | release:
13 | types: [published]
14 |
15 | jobs:
16 | deploy:
17 |
18 | runs-on: ubuntu-latest
19 |
20 | steps:
21 | - uses: actions/checkout@v2
22 | - name: Set up Python
23 | uses: actions/setup-python@v2
24 | with:
25 | python-version: '3.x'
26 | - name: Install dependencies
27 | run: |
28 | python -m pip install --upgrade pip
29 | pip install build
30 | - name: Build package
31 | run: python -m build
32 | - name: Publish package
33 | uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
34 | with:
35 | user: __token__
36 | password: ${{ secrets.PYPI_API_TOKEN }}
37 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Distribution / packaging
2 | .Python
3 | develop-eggs/
4 | dist/
5 | downloads/
6 | eggs/
7 | .eggs/
8 | lib/
9 | lib64/
10 | parts/
11 | sdist/
12 | var/
13 | wheels/
14 | *.egg-info/
15 | .installed.cfg
16 | *.egg
17 |
18 | ### Python
19 | # Byte-compiled / optimized / DLL files
20 | __pycache__/
21 | *.py[cod]
22 | *$py.class
23 |
24 | # PyInstaller
25 | # Usually these files are written by a python script from a template
26 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
27 | *.manifest
28 | *.spec
29 |
30 | # Installer logs
31 | pip-log.txt
32 | pip-delete-this-directory.txt
33 |
34 | # Environments
35 | .env
36 | .venv
37 | env/
38 | venv/
39 | ENV/
40 | env.bak/
41 | venv.bak/
42 |
43 | ### Vim
44 | # swap
45 | .sw[a-p]
46 | .*.sw[a-p]
47 | # session
48 | Session.vim
49 | # temporary
50 | .netrwhist
51 | *~
52 | # auto-generated tag files
53 | tags
54 |
55 | ### PyCharm
56 | .idea
57 |
58 | ### MacOS FS
59 | .DS_Store
60 |
61 | ### VisualStudioCode ###
62 | .vscode/*
63 | !.vscode/settings.json
64 | !.vscode/tasks.json
65 | !.vscode/launch.json
66 | !.vscode/extensions.json
67 |
68 | ### PyTest ###
69 | .pytest_cache
70 | make.bat
71 | Makefile
72 | _source
73 | test.py
74 | pyvenv.cfg
75 | Include
76 | Scripts
77 | preflight.py
78 | build
79 | .vscode
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: python
2 |
3 | python:
4 | - "3.9"
5 | - "3.8"
6 | - "3.7"
7 |
8 | install:
9 | - pip install setuptools
10 | - pip install -r requirements.txt
11 | - pip install pytest-cov
12 | - pip install coveralls
13 | - pip install -e .
14 |
15 |
16 | script:
17 | - pytest
18 |
19 | script: pytest --cov=clickupython tests/
20 |
21 | after_success:
22 | - coveralls
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Update: I just want to clarify that I do not activley maintain this code and am not associated with Clickup. Things may change over time but this should cover all the main endpoints. Feel free to clone and change this code in any way, shape or form.
2 |
3 | [](https://clickupython.readthedocs.io/en/latest/?badge=latest)
4 | [](https://www.codefactor.io/repository/github/imzachjohnson/clickupython)
5 | [](https://app.travis-ci.com/Imzachjohnson/clickupython)
6 | [](https://coveralls.io/github/Imzachjohnson/clickupython?branch=main)
7 | [](https://github.com/psf/black)
8 |
9 | # clickupython
10 |
11 | A client for working with the ClickUp API V2. It can be used to interact with the ClickUp API in your projects.
12 |
13 | Documentation (WIP) and examples can be found here: [clickupython documentation](https://clickupython.readthedocs.io/en/latest/)
14 |
15 | ## Instructions
16 |
17 | ### 1) Installing
18 |
19 | `pip install clickupython`
20 |
21 | ### 2) Library Usage
22 |
23 | Using clickupython in your application takes just a couple quick steps.
24 |
25 | To use the client for a personal account context (no actions on behalf of another user)
26 |
27 | ```python
28 |
29 | from clickupython import client
30 |
31 | API_KEY = 'YOUR API KEY'
32 |
33 | c = client.ClickUpClient(API_KEY)
34 |
35 | # Example request
36 |
37 | c = client.ClickUpClient(API_KEY)
38 | t = c.create_task("list_id", name="Test task", due_date="march 2 2021")
39 |
40 | print(t.name)
41 |
42 | ```
43 |
44 | _For more examples, please refer to the [Documentation](https://clickupython.readthedocs.io/en/latest/)_
45 |
46 | ## Current ClickUpClient Functions
47 |
48 | ### Task
49 |
50 | - `get_task(task_id)`
51 | - `get_tasks(list_id, archived, page, order_by, reverse, subtasks, statuses, include_closed, assignees, due_date_gt, due_date_lt, date_created_gt, date_created_lt, date_updated_gt, date_updated_lt)`
52 | - `create_task(list_id, name, description, priority, assignees, tags, status, due_date, start_date, notify_all)`
53 | - `update_task(task_id, name, description, status, priority, time_estimate, archived, add_assignees,remove_assignees`
54 |
55 | ### List
56 |
57 | - `get_list(list_id)`
58 | - `get_lists(folder_id)`
59 | - `create_list(folder_id, name, content, due_date, priority, status)`
60 | - `create_folderless_list(space_id, name, content, due_date, priority, assignee, status)`
61 | - `update_list(list_id, name, content, due_date, due_date_time, priority, assignee, unset_status)`
62 | - `delete_list(list_id)`
63 | - `add_task_to_list(task_id, list_id)`
64 | - `remove_task_from_list(task_id, list_id)`
65 |
66 | ### Folder
67 |
68 | - `get_folder(folder_id)`
69 | - `get_folders(space_id)`
70 | - `create_folder(space_id, name)`
71 | - `update_folder(folder_id, name)`
72 | - `delete_folder(folder_id)`
73 |
74 | ### Attachments
75 |
76 | `upload_attachment(task_id, file_path)`
77 |
78 | ### Comments
79 |
80 | - `get_task_comments(task_id)`
81 | - `get_list_comments(list_id)`
82 | - `get_chat_comments(view_id)`
83 | - `update_comment(comment_id)`
84 | - `delete_comment(comment_id)`
85 | - `create_task_comment(task_id)`
86 |
87 | ### Teams
88 |
89 | - `get_teams()`
90 |
91 | ### Checklists
92 |
93 | - `create_checklist(task_id, name)`
94 | - `create_checklist_item(checklist_id, name, assignee)`
95 | - `delete_checklist_item(checklist_id, checklist_item_id)`
96 | - `update_checklist_item(checklist_id, checklist_item_id, name, resolved, parent)`
97 |
98 | ### Goals
99 |
100 | - `create_goal(team_id, name, due_date, description, multiple_owners, owners, color)`
101 | - `update_goal(goal_id, name, due_date, description, rem_owners, add_owners, color)`
102 | - `delete_goal(goal_id)`
103 | - `get_goal(goal_id)`
104 | - `get_goals(team_id, include_completed)`
105 |
106 | ### Members
107 |
108 | - `get_task_members(task_id)`
109 | - `get_list_members(list_id)`
110 |
111 | ### Tags
112 |
113 | - `get_space_tags(space_id)`
114 | - `create_space_tag(space_id, name)`
115 | - `update_tag(space_id, name, new_name)`
116 | - `tag_task(task_id, tag_name)`
117 | - `untag_task(task_id, tag_name)`
118 |
119 | ### Spaces
120 |
121 | - `create_space(team_id, name, features)`
122 | - `delete_space(space_id)`
123 | - `get_space(space_id)`
124 | - `get_spaces( team_id, archived)`
125 |
126 | ### Time Tracking
127 |
128 | - `get_time_entries_in_range(team_id, start_date, end_date, assignees)`
129 | - `get_single_time_entry(team_id, timer_id)`
130 | - `start_timer(team_id, timer_id)`
131 | - `stop_timer(team_id)`
132 |
133 | ## Contact
134 |
135 | Zach Johnson & Robert Mullis
136 |
137 | Email: imzachjohnson@gmail.com, phoenix.scooter@gmail.com
138 |
139 | ### Acknowledgements
140 |
141 | - [timefhuman](https://github.com/alvinwan/timefhuman)
142 | - [word2number](https://github.com/akshaynagpal/w2n)
143 |
144 | ## License
145 |
146 | Distributed under the GNU General Public License v3.0. See `LICENSE` for more information.
147 |
--------------------------------------------------------------------------------
/clickupython/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/clickupython/__init__.py
--------------------------------------------------------------------------------
/clickupython/exceptions.py:
--------------------------------------------------------------------------------
1 | class ClickupClientError(Exception):
2 | def __init__(self, error_message, status_code=None):
3 | self.status_code = status_code
4 | self.error_message = error_message
5 |
6 | def __str__(self):
7 | if self.status_code:
8 | return "(%s) %s" % (self.status_code, self.error_message)
9 | else:
10 | return self.error_message
11 |
--------------------------------------------------------------------------------
/clickupython/helpers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/clickupython/helpers/__init__.py
--------------------------------------------------------------------------------
/clickupython/helpers/formatting.py:
--------------------------------------------------------------------------------
1 | import urllib
2 | from urllib.parse import urlparse
3 | import posixpath
4 |
5 |
6 | def url_join(host, model, *additional_path):
7 | return urllib.parse.urljoin(host, posixpath.join(model, *additional_path))
--------------------------------------------------------------------------------
/clickupython/helpers/timefuncs.py:
--------------------------------------------------------------------------------
1 | from word2number import w2n
2 | from timefhuman import timefhuman
3 | from datetime import datetime
4 | from clickupython import exceptions
5 | import pendulum as time
6 |
7 | SCALES = {
8 | "min": 60,
9 | "mins": 60,
10 | "minute": 60,
11 | "minutes": 60,
12 | "hour": 3600,
13 | "hours": 3600,
14 | "day": 86400,
15 | "days": 86400,
16 | "week": 604800,
17 | "weeks": 604800,
18 | "month": 2419200,
19 | "months": 2419200,
20 | "year": 31536000,
21 | "years": 31536000,
22 | }
23 |
24 |
25 | def fuzzy_time_to_unix(text: str):
26 | """
27 | Converts a human readable time and date to a Unix timestamp
28 |
29 | Args: text - a human readable date in string form
30 |
31 | Returns: a Unix timestamp
32 | """
33 | try:
34 | now = time.now()
35 | timestamp = datetime.timestamp(timefhuman(text, now))
36 | return str(int(timestamp * 1000))
37 | except BaseException:
38 | print("\n")
39 | raise exceptions.ClickupClientError(
40 | "The date you entered was not convertable to a Unix timestamp. Check the format and spelling.",
41 | "Time conversion error",
42 | )
43 |
44 |
45 | def fuzzy_time_to_seconds(text: any) -> int:
46 | """
47 | Converts a human readable duration of time into seconds
48 |
49 | Args: text - a human readable period of time
50 |
51 | Returns: seconds of the duration as an int
52 | """
53 |
54 | # Check if the input is a timestamp
55 | try:
56 | return str(int(text))
57 |
58 | # Not a timestamp, so let's interpret the fuzzy string
59 | except ValueError:
60 | text = text.lower()
61 | pairs = []
62 | for word in text.split():
63 | if word in SCALES:
64 | value = text[: text.find(word)]
65 | try:
66 | pairs.append((int(value), SCALES[word]))
67 | except ValueError:
68 | pairs.append((w2n.word_to_num(value), SCALES[word]))
69 | text = text[text.find(word) :]
70 |
71 | return sum(pair[0] * pair[1] for pair in pairs)
72 |
73 |
74 | if __name__ == "__main__":
75 | print(fuzzy_time_to_seconds("36 hours"))
76 | print(fuzzy_time_to_unix("december 1st"))
77 | print(fuzzy_time_to_seconds("3333029384"))
78 |
--------------------------------------------------------------------------------
/docs/_build/doctrees/clickupy.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/doctrees/clickupy.doctree
--------------------------------------------------------------------------------
/docs/_build/doctrees/clickupy.helpers.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/doctrees/clickupy.helpers.doctree
--------------------------------------------------------------------------------
/docs/_build/doctrees/environment.pickle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/doctrees/environment.pickle
--------------------------------------------------------------------------------
/docs/_build/doctrees/functions.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/doctrees/functions.doctree
--------------------------------------------------------------------------------
/docs/_build/doctrees/index.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/doctrees/index.doctree
--------------------------------------------------------------------------------
/docs/_build/doctrees/lists.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/doctrees/lists.doctree
--------------------------------------------------------------------------------
/docs/_build/doctrees/modules.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/doctrees/modules.doctree
--------------------------------------------------------------------------------
/docs/_build/doctrees/tasks.doctree:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/doctrees/tasks.doctree
--------------------------------------------------------------------------------
/docs/_build/html/.buildinfo:
--------------------------------------------------------------------------------
1 | # Sphinx build info version 1
2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
3 | config: 5b08078aabaae6ff8764c3d702f29a50
4 | tags: 645f666f9bcd5a90fca523b33c5a78b7
5 |
--------------------------------------------------------------------------------
/docs/_build/html/_sources/clickupy.helpers.rst.txt:
--------------------------------------------------------------------------------
1 | clickupython.helpers package
2 | ========================
3 |
4 | Submodules
5 | ----------
6 |
7 | clickupython.helpers.formatting module
8 | ----------------------------------
9 |
10 | .. automodule:: clickupython.helpers.formatting
11 | :members:
12 | :undoc-members:
13 | :show-inheritance:
14 |
15 | clickupython.helpers.timefuncs module
16 | ---------------------------------
17 |
18 | .. automodule:: clickupython.helpers.timefuncs
19 | :members:
20 | :undoc-members:
21 | :show-inheritance:
22 |
23 | Module contents
24 | ---------------
25 |
26 | .. automodule:: clickupython.helpers
27 | :members:
28 | :undoc-members:
29 | :show-inheritance:
30 |
--------------------------------------------------------------------------------
/docs/_build/html/_sources/clickupy.rst.txt:
--------------------------------------------------------------------------------
1 | clickupython package
2 | ================
3 |
4 | Subpackages
5 | -----------
6 |
7 | .. toctree::
8 | :maxdepth: 4
9 |
10 | clickupython.helpers
11 |
12 | Submodules
13 | ----------
14 |
15 | clickupython.client module
16 | ----------------------
17 |
18 | .. automodule:: clickupython.client
19 | :members:
20 | :undoc-members:
21 | :show-inheritance:
22 |
23 | clickupython.exceptions module
24 | --------------------------
25 |
26 | .. automodule:: clickupython.exceptions
27 | :members:
28 | :undoc-members:
29 | :show-inheritance:
30 |
31 | clickupython.models module
32 | ----------------------
33 |
34 | .. automodule:: clickupython.models
35 | :members:
36 | :undoc-members:
37 | :show-inheritance:
38 |
39 | Module contents
40 | ---------------
41 |
42 | .. automodule:: clickupython
43 | :members:
44 | :undoc-members:
45 | :show-inheritance:
46 |
--------------------------------------------------------------------------------
/docs/_build/html/_sources/functions.rst.txt:
--------------------------------------------------------------------------------
1 | Functions
2 | ====================================
3 | clickupython is a Python client for the ClickUp API and can be used to interact with the ClickUp API in your projects. ClickUp's API exposes the entire ClickUp infrastructure via a standardized programmatic interface. Using ClickUp's API, you can do just about anything you can do on clickup.com.
4 |
5 |
6 | ================ ============================================================
7 | Directive Name Description (Docutils version added to, in [brackets])
8 | ================ ============================================================
9 | ``get_task(task_id)`` Specific admonition; also "caution", "danger",
10 | admonition Generic titled admonition: ``.. admonition:: By The Way``
11 | image ``.. image:: picture.png``; many options possible
12 | figure Like "image", but with optional caption and legend
13 | topic ``.. topic:: Title``; like a mini section
14 | sidebar ``.. sidebar:: Title``; like a mini parallel document
15 | parsed-literal A literal block with parsed inline markup
16 | rubric ``.. rubric:: Informal Heading``
17 | epigraph Block quote with class="epigraph"
18 | highlights Block quote with class="highlights"
19 | pull-quote Block quote with class="pull-quote"
20 | compound Compound paragraphs [0.3.6]
21 | container Generic block-level container element [0.3.10]
22 | table Create a titled table [0.3.1]
23 | list-table Create a table from a uniform two-level bullet list [0.3.8]
24 | csv-table Create a table from CSV data [0.3.4]
25 | contents Generate a table of contents
26 | sectnum Automatically number sections, subsections, etc.
27 | header, footer Create document decorations [0.3.8]
28 | target-notes Create an explicit footnote for each external target
29 | math Mathematical notation (input in LaTeX format)
30 | meta HTML-specific metadata
31 | include Read an external reST file as if it were inline
32 | raw Non-reST data passed untouched to the Writer
33 | replace Replacement text for substitution definitions
34 | unicode Unicode character code conversion for substitution defs
35 | date Generates today's date; for substitution defs
36 | class Set a "class" attribute on the next element
37 | role Create a custom interpreted text role [0.3.2]
38 | default-role Set the default interpreted text role [0.3.10]
39 | title Set the metadata document title [0.3.10]
40 | ================ ============================================================
--------------------------------------------------------------------------------
/docs/_build/html/_sources/index.rst.txt:
--------------------------------------------------------------------------------
1 | .. clickupython documentation master file, created by
2 | sphinx-quickstart on Thu Sep 16 19:12:54 2021.
3 | You can adapt this file completely to your liking, but it should at least
4 | contain the root `toctree` directive.
5 |
6 | .. clickupython documentation master file, created by
7 | sphinx-quickstart on Thu Sep 9 17:56:55 2021.
8 | You can adapt this file completely to your liking, but it should at least
9 | contain the root `toctree` directive.
10 |
11 | clickupython
12 | ====================================
13 | clickupython is a Python client for the ClickUp API and can be used to interact with the ClickUp API in your projects. ClickUp's API exposes the entire ClickUp infrastructure via a standardized programmatic interface. Using ClickUp's API, you can do just about anything you can do on clickup.com.
14 |
15 |
16 | Getting started
17 | *****
18 | To start, install clickupython via pip.
19 |
20 | ::
21 |
22 | $ pip install clickupython
23 |
24 |
25 | Authentication
26 | *****
27 | There are two ways to authenticate with ClickUp API 2.0, with a personal token or creating an application and authenticating with an OAuth2 flow.
28 |
29 | .. note:: IMPORTANT - If you are creating an application for other's to use, it is
30 | highly recommended that you use the OAuth2 flow.
31 |
32 | Method 1: API Key (Fastest)
33 | ---------------
34 | Sign in to ClickUp and navigate to Settings > Apps.
35 | There you will see a an API token. Copy this and save it. You will use this to authenticate the clickupython client with ClickUp's API.
36 |
37 | ::
38 |
39 | $ from clickupython import ClickUpClient
40 |
41 | API_KEY = 'YOUR API KEY'
42 | client = ClickUpClient(API_KEY)
43 |
44 | # Example request | Creating a task in a list
45 | c = client.ClickUpClient(API_KEY)
46 | task = c.create_task("list_id", name="Test task", due_date="march 2 2021")
47 |
48 | if task:
49 | print(task.id)
50 |
51 |
52 |
53 |
54 | .. toctree::
55 | :maxdepth: 2
56 | :caption: Contents:
57 |
58 | index
59 | tasks
60 | lists
61 |
62 |
--------------------------------------------------------------------------------
/docs/_build/html/_sources/lists.rst.txt:
--------------------------------------------------------------------------------
1 | Lists
2 | ====================================
3 |
4 | .. autoclass:: clickupython.models.SingleList
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 | |
9 | |
10 | .. raw:: html
11 |
12 |
13 |
14 | Creating a List
15 | ---------------
16 | Here's how to create a new ClickupClient instance and validate a personal API key with the ClickUp API and create a new task with a
17 | due date. When creating a new task, the only required arguments are list_id and name. Name will be the title of your list on ClickUp.
18 |
19 | Example::
20 |
21 | c = client.ClickUpClient("YOUR_API_KEY")
22 | t = c.create_task("LIST_ID", name="Test Task", due_date="march 2 2021")
23 |
24 |
25 | Fetching a Single Task
26 | ---------------
27 | Example: Lookup via ClickUpClient::
28 |
29 | c = client.ClickUpClient("YOUR_API_KEY")
30 | task = c.get_task(task_id)
31 |
32 | print(task.name)
33 |
34 |
35 | Fetching all Tasks from a List
36 | ---------------
37 | You can quickly get all tasks for a given list via the list id:
38 |
39 | Example::
40 |
41 | c = client.ClickUpClient("YOUR_API_KEY")
42 | tasks = c.get_tasks("list_id")
43 |
44 |
45 |
46 | Filtering Tasks
47 | ---------------
48 | Example::
49 |
50 | c = client.ClickUpClient("YOUR_API_KEY")
51 | tasks = c.get_tasks("list_id", date_updated_gt="august 1 2021",
52 | assignees=["4523","4562","5871"], include_closed=True)
53 |
54 |
55 | This example will return all tasks that have been updated after August 1st, 2021 and are assigned to users with the ids of 4523, 4562, and 5871.
56 | This request will also include tasks that have been marked as "closed."
57 |
58 | Example::
59 |
60 | c = client.ClickUpClient("YOUR_API_KEY")
61 | tasks = c.get_tasks("list_id", subtasks=True,
62 | statuses=["todo", "in progress"])
63 |
64 | This example will return all tasks and subtasks that are marked as "Todo" and "In Progress". These values can be changed depending on the statuses you have available in your list.
65 |
66 | You can extend the calls above by passing any of the arguments to the ``get_tasks`` method. You can use as many or as few as you would like.
67 |
68 |
69 |
70 | Working With Tasks
71 | ---------------
72 | Now that you have a list of ``Task`` objects you can access the attributes of each task in a number of ways:
73 |
74 | Example: Loop::
75 |
76 | c = client.ClickUpClient("YOUR_API_KEY")
77 | tasks = c.get_tasks(list_id)
78 |
79 | for task in tasks:
80 | print(task.name)
81 |
82 |
83 | Example: Direct Access via an Index::
84 |
85 | c = client.ClickUpClient("YOUR_API_KEY")
86 | tasks = c.get_tasks(list_id)
87 |
88 | print(tasks[0].name])
89 |
90 |
91 | Getting Tasks Associated with a List Object
92 | ---------------
93 | Certain calls can be made directly from a parent object. We can access a single ``Task`` or all ``Tasks`` associated with a ``List`` with the following
94 | methods.
95 |
96 | .. note:: IMPORTANT - When calling a method from a parent object you must pass in a reference to the ClickUpClient object as the first argument.
97 |
98 | Example: Lookup Tasks via a List Object::
99 |
100 | c = client.ClickUpClient("YOUR_API_KEY")
101 | list = c.get_list(list_id)
102 | tasks = list.get_tasks(c)
103 | filtered_tasks = list.get_tasks(c, subtasks=True, statuses=["todo", "in progress"])
104 | task = list.get_task(c, task_id)
105 | |
106 | |
107 |
108 | .. raw:: html
109 |
110 |
111 |
112 |
113 | List Methods
114 | ---------------
115 |
116 | get_list()
117 | ++++++++++++
118 | .. automethod:: clickupython.client.ClickUpClient.get_list
119 | |
120 | |
121 | .. raw:: html
122 |
123 |
124 | get_lists()
125 | ++++++++++++
126 | .. automethod:: clickupython.client.ClickUpClient.get_lists
127 | |
128 | |
129 | .. raw:: html
130 |
131 |
132 | create_list()
133 | ++++++++++++
134 | .. automethod:: clickupython.client.ClickUpClient.create_list
135 | |
136 | |
137 | .. raw:: html
138 |
139 |
140 |
141 |
142 |
143 |
--------------------------------------------------------------------------------
/docs/_build/html/_sources/modules.rst.txt:
--------------------------------------------------------------------------------
1 | clickupython Overview
2 | ========
3 |
4 | .. toctree::
5 | :maxdepth: 4
6 |
7 | clickupython
8 |
--------------------------------------------------------------------------------
/docs/_build/html/_sources/tasks.rst.txt:
--------------------------------------------------------------------------------
1 | Tasks
2 | ====================================
3 |
4 | .. autoclass:: clickupython.models.Task
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 | |
9 | |
10 | .. raw:: html
11 |
12 |
13 |
14 | Creating a Task
15 | ---------------
16 | Here's how to create a new ClickupClient instance and validate a personal API key with the ClickUp API and create a new task with a
17 | due date. When creating a new task, the only required arguments are list_id and name. Name will be the title of your list on ClickUp.
18 |
19 | Example::
20 |
21 | c = client.ClickUpClient("YOUR_API_KEY")
22 | t = c.create_task("LIST_ID", name="Test Task", due_date="march 2 2021")
23 |
24 |
25 | Fetching a Single Task
26 | ---------------
27 | Example: Lookup via ClickUpClient::
28 |
29 | c = client.ClickUpClient("YOUR_API_KEY")
30 | task = c.get_task(task_id)
31 |
32 | print(task.name)
33 |
34 |
35 | Fetching all Tasks from a List
36 | ---------------
37 | You can quickly get all tasks for a given list via the list id:
38 |
39 | Example::
40 |
41 | c = client.ClickUpClient("YOUR_API_KEY")
42 | tasks = c.get_tasks("list_id")
43 |
44 |
45 |
46 | Filtering Tasks
47 | ---------------
48 | Example::
49 |
50 | c = client.ClickUpClient("YOUR_API_KEY")
51 | tasks = c.get_tasks("list_id", date_updated_gt="august 1 2021",
52 | assignees=["4523","4562","5871"], include_closed=True)
53 |
54 |
55 | This example will return all tasks that have been updated after August 1st, 2021 and are assigned to users with the ids of 4523, 4562, and 5871.
56 | This request will also include tasks that have been marked as "closed."
57 |
58 | Example::
59 |
60 | c = client.ClickUpClient("YOUR_API_KEY")
61 | tasks = c.get_tasks("list_id", subtasks=True,
62 | statuses=["todo", "in progress"])
63 |
64 | This example will return all tasks and subtasks that are marked as "Todo" and "In Progress". These values can be changed depending on the statuses you have available in your list.
65 |
66 | You can extend the calls above by passing any of the arguments to the ``get_tasks`` method. You can use as many or as few as you would like.
67 |
68 |
69 |
70 | Working With Tasks
71 | ---------------
72 | Now that you have a list of ``Task`` objects you can access the attributes of each task in a number of ways:
73 |
74 | Example: Loop::
75 |
76 | c = client.ClickUpClient("YOUR_API_KEY")
77 | tasks = c.get_tasks(list_id)
78 |
79 | for task in tasks:
80 | print(task.name)
81 |
82 |
83 | Example: Direct Access via an Index::
84 |
85 | c = client.ClickUpClient("YOUR_API_KEY")
86 | tasks = c.get_tasks(list_id)
87 |
88 | print(tasks[0].name])
89 |
90 |
91 | Getting Tasks Associated with a List Object
92 | ---------------
93 | Certain calls can be made directly from a parent object. We can access a single ``Task`` or all ``Tasks`` associated with a ``List`` with the following
94 | methods.
95 |
96 | .. note:: IMPORTANT - When calling a method from a parent object you must pass in a reference to the ClickUpClient object as the first argument.
97 |
98 | Example: Lookup Tasks via a List Object::
99 |
100 | c = client.ClickUpClient("YOUR_API_KEY")
101 | list = c.get_list(list_id)
102 | tasks = list.get_tasks(c)
103 | filtered_tasks = list.get_tasks(c, subtasks=True, statuses=["todo", "in progress"])
104 | task = list.get_task(c, task_id)
105 | |
106 | |
107 |
108 | .. raw:: html
109 |
110 |
111 |
112 | Task Methods
113 | ---------------
114 |
115 | get_tasks()
116 | ++++++++++++
117 | .. automethod:: clickupython.client.ClickUpClient.get_tasks
118 | |
119 | |
120 |
121 | .. raw:: html
122 |
123 |
124 | get_task()
125 | ++++++++++++
126 | .. automethod:: clickupython.client.ClickUpClient.get_task
127 | |
128 |
129 | .. raw:: html
130 |
131 |
132 | create_task()
133 | ++++++++++++
134 | .. automethod:: clickupython.client.ClickUpClient.create_task
135 | |
136 | |
137 | .. raw:: html
138 |
139 |
140 | update_task()
141 | ++++++++++++
142 | .. automethod:: clickupython.client.ClickUpClient.update_task
143 | |
144 | |
145 | .. raw:: html
146 |
147 |
148 |
149 | delete_task()
150 | ++++++++++++
151 | .. automethod:: clickupython.client.ClickUpClient.delete_task
152 | |
153 | |
154 | .. raw:: html
155 |
156 |
157 |
158 | get_task_comments()
159 | ++++++++++++
160 | .. automethod:: clickupython.client.ClickUpClient.get_task_comments
161 | |
162 | |
163 | .. raw:: html
164 |
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/docs/_build/html/_static/basic.css:
--------------------------------------------------------------------------------
1 | /*
2 | * basic.css
3 | * ~~~~~~~~~
4 | *
5 | * Sphinx stylesheet -- basic theme.
6 | *
7 | * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
8 | * :license: BSD, see LICENSE for details.
9 | *
10 | */
11 |
12 | /* -- main layout ----------------------------------------------------------- */
13 |
14 | div.clearer {
15 | clear: both;
16 | }
17 |
18 | div.section::after {
19 | display: block;
20 | content: '';
21 | clear: left;
22 | }
23 |
24 | /* -- relbar ---------------------------------------------------------------- */
25 |
26 | div.related {
27 | width: 100%;
28 | font-size: 90%;
29 | }
30 |
31 | div.related h3 {
32 | display: none;
33 | }
34 |
35 | div.related ul {
36 | margin: 0;
37 | padding: 0 0 0 10px;
38 | list-style: none;
39 | }
40 |
41 | div.related li {
42 | display: inline;
43 | }
44 |
45 | div.related li.right {
46 | float: right;
47 | margin-right: 5px;
48 | }
49 |
50 | /* -- sidebar --------------------------------------------------------------- */
51 |
52 | div.sphinxsidebarwrapper {
53 | padding: 10px 5px 0 10px;
54 | }
55 |
56 | div.sphinxsidebar {
57 | float: left;
58 | width: 230px;
59 | margin-left: -100%;
60 | font-size: 90%;
61 | word-wrap: break-word;
62 | overflow-wrap : break-word;
63 | }
64 |
65 | div.sphinxsidebar ul {
66 | list-style: none;
67 | }
68 |
69 | div.sphinxsidebar ul ul,
70 | div.sphinxsidebar ul.want-points {
71 | margin-left: 20px;
72 | list-style: square;
73 | }
74 |
75 | div.sphinxsidebar ul ul {
76 | margin-top: 0;
77 | margin-bottom: 0;
78 | }
79 |
80 | div.sphinxsidebar form {
81 | margin-top: 10px;
82 | }
83 |
84 | div.sphinxsidebar input {
85 | border: 1px solid #98dbcc;
86 | font-family: sans-serif;
87 | font-size: 1em;
88 | }
89 |
90 | div.sphinxsidebar #searchbox form.search {
91 | overflow: hidden;
92 | }
93 |
94 | div.sphinxsidebar #searchbox input[type="text"] {
95 | float: left;
96 | width: 80%;
97 | padding: 0.25em;
98 | box-sizing: border-box;
99 | }
100 |
101 | div.sphinxsidebar #searchbox input[type="submit"] {
102 | float: left;
103 | width: 20%;
104 | border-left: none;
105 | padding: 0.25em;
106 | box-sizing: border-box;
107 | }
108 |
109 |
110 | img {
111 | border: 0;
112 | max-width: 100%;
113 | }
114 |
115 | /* -- search page ----------------------------------------------------------- */
116 |
117 | ul.search {
118 | margin: 10px 0 0 20px;
119 | padding: 0;
120 | }
121 |
122 | ul.search li {
123 | padding: 5px 0 5px 20px;
124 | background-image: url(file.png);
125 | background-repeat: no-repeat;
126 | background-position: 0 7px;
127 | }
128 |
129 | ul.search li a {
130 | font-weight: bold;
131 | }
132 |
133 | ul.search li p.context {
134 | color: #888;
135 | margin: 2px 0 0 30px;
136 | text-align: left;
137 | }
138 |
139 | ul.keywordmatches li.goodmatch a {
140 | font-weight: bold;
141 | }
142 |
143 | /* -- index page ------------------------------------------------------------ */
144 |
145 | table.contentstable {
146 | width: 90%;
147 | margin-left: auto;
148 | margin-right: auto;
149 | }
150 |
151 | table.contentstable p.biglink {
152 | line-height: 150%;
153 | }
154 |
155 | a.biglink {
156 | font-size: 1.3em;
157 | }
158 |
159 | span.linkdescr {
160 | font-style: italic;
161 | padding-top: 5px;
162 | font-size: 90%;
163 | }
164 |
165 | /* -- general index --------------------------------------------------------- */
166 |
167 | table.indextable {
168 | width: 100%;
169 | }
170 |
171 | table.indextable td {
172 | text-align: left;
173 | vertical-align: top;
174 | }
175 |
176 | table.indextable ul {
177 | margin-top: 0;
178 | margin-bottom: 0;
179 | list-style-type: none;
180 | }
181 |
182 | table.indextable > tbody > tr > td > ul {
183 | padding-left: 0em;
184 | }
185 |
186 | table.indextable tr.pcap {
187 | height: 10px;
188 | }
189 |
190 | table.indextable tr.cap {
191 | margin-top: 10px;
192 | background-color: #f2f2f2;
193 | }
194 |
195 | img.toggler {
196 | margin-right: 3px;
197 | margin-top: 3px;
198 | cursor: pointer;
199 | }
200 |
201 | div.modindex-jumpbox {
202 | border-top: 1px solid #ddd;
203 | border-bottom: 1px solid #ddd;
204 | margin: 1em 0 1em 0;
205 | padding: 0.4em;
206 | }
207 |
208 | div.genindex-jumpbox {
209 | border-top: 1px solid #ddd;
210 | border-bottom: 1px solid #ddd;
211 | margin: 1em 0 1em 0;
212 | padding: 0.4em;
213 | }
214 |
215 | /* -- domain module index --------------------------------------------------- */
216 |
217 | table.modindextable td {
218 | padding: 2px;
219 | border-collapse: collapse;
220 | }
221 |
222 | /* -- general body styles --------------------------------------------------- */
223 |
224 | div.body {
225 | min-width: 450px;
226 | max-width: 800px;
227 | }
228 |
229 | div.body p, div.body dd, div.body li, div.body blockquote {
230 | -moz-hyphens: auto;
231 | -ms-hyphens: auto;
232 | -webkit-hyphens: auto;
233 | hyphens: auto;
234 | }
235 |
236 | a.headerlink {
237 | visibility: hidden;
238 | }
239 |
240 | a.brackets:before,
241 | span.brackets > a:before{
242 | content: "[";
243 | }
244 |
245 | a.brackets:after,
246 | span.brackets > a:after {
247 | content: "]";
248 | }
249 |
250 | h1:hover > a.headerlink,
251 | h2:hover > a.headerlink,
252 | h3:hover > a.headerlink,
253 | h4:hover > a.headerlink,
254 | h5:hover > a.headerlink,
255 | h6:hover > a.headerlink,
256 | dt:hover > a.headerlink,
257 | caption:hover > a.headerlink,
258 | p.caption:hover > a.headerlink,
259 | div.code-block-caption:hover > a.headerlink {
260 | visibility: visible;
261 | }
262 |
263 | div.body p.caption {
264 | text-align: inherit;
265 | }
266 |
267 | div.body td {
268 | text-align: left;
269 | }
270 |
271 | .first {
272 | margin-top: 0 !important;
273 | }
274 |
275 | p.rubric {
276 | margin-top: 30px;
277 | font-weight: bold;
278 | }
279 |
280 | img.align-left, figure.align-left, .figure.align-left, object.align-left {
281 | clear: left;
282 | float: left;
283 | margin-right: 1em;
284 | }
285 |
286 | img.align-right, figure.align-right, .figure.align-right, object.align-right {
287 | clear: right;
288 | float: right;
289 | margin-left: 1em;
290 | }
291 |
292 | img.align-center, figure.align-center, .figure.align-center, object.align-center {
293 | display: block;
294 | margin-left: auto;
295 | margin-right: auto;
296 | }
297 |
298 | img.align-default, figure.align-default, .figure.align-default {
299 | display: block;
300 | margin-left: auto;
301 | margin-right: auto;
302 | }
303 |
304 | .align-left {
305 | text-align: left;
306 | }
307 |
308 | .align-center {
309 | text-align: center;
310 | }
311 |
312 | .align-default {
313 | text-align: center;
314 | }
315 |
316 | .align-right {
317 | text-align: right;
318 | }
319 |
320 | /* -- sidebars -------------------------------------------------------------- */
321 |
322 | div.sidebar,
323 | aside.sidebar {
324 | margin: 0 0 0.5em 1em;
325 | border: 1px solid #ddb;
326 | padding: 7px;
327 | background-color: #ffe;
328 | width: 40%;
329 | float: right;
330 | clear: right;
331 | overflow-x: auto;
332 | }
333 |
334 | p.sidebar-title {
335 | font-weight: bold;
336 | }
337 |
338 | div.admonition, div.topic, blockquote {
339 | clear: left;
340 | }
341 |
342 | /* -- topics ---------------------------------------------------------------- */
343 |
344 | div.topic {
345 | border: 1px solid #ccc;
346 | padding: 7px;
347 | margin: 10px 0 10px 0;
348 | }
349 |
350 | p.topic-title {
351 | font-size: 1.1em;
352 | font-weight: bold;
353 | margin-top: 10px;
354 | }
355 |
356 | /* -- admonitions ----------------------------------------------------------- */
357 |
358 | div.admonition {
359 | margin-top: 10px;
360 | margin-bottom: 10px;
361 | padding: 7px;
362 | }
363 |
364 | div.admonition dt {
365 | font-weight: bold;
366 | }
367 |
368 | p.admonition-title {
369 | margin: 0px 10px 5px 0px;
370 | font-weight: bold;
371 | }
372 |
373 | div.body p.centered {
374 | text-align: center;
375 | margin-top: 25px;
376 | }
377 |
378 | /* -- content of sidebars/topics/admonitions -------------------------------- */
379 |
380 | div.sidebar > :last-child,
381 | aside.sidebar > :last-child,
382 | div.topic > :last-child,
383 | div.admonition > :last-child {
384 | margin-bottom: 0;
385 | }
386 |
387 | div.sidebar::after,
388 | aside.sidebar::after,
389 | div.topic::after,
390 | div.admonition::after,
391 | blockquote::after {
392 | display: block;
393 | content: '';
394 | clear: both;
395 | }
396 |
397 | /* -- tables ---------------------------------------------------------------- */
398 |
399 | table.docutils {
400 | margin-top: 10px;
401 | margin-bottom: 10px;
402 | border: 0;
403 | border-collapse: collapse;
404 | }
405 |
406 | table.align-center {
407 | margin-left: auto;
408 | margin-right: auto;
409 | }
410 |
411 | table.align-default {
412 | margin-left: auto;
413 | margin-right: auto;
414 | }
415 |
416 | table caption span.caption-number {
417 | font-style: italic;
418 | }
419 |
420 | table caption span.caption-text {
421 | }
422 |
423 | table.docutils td, table.docutils th {
424 | padding: 1px 8px 1px 5px;
425 | border-top: 0;
426 | border-left: 0;
427 | border-right: 0;
428 | border-bottom: 1px solid #aaa;
429 | }
430 |
431 | table.footnote td, table.footnote th {
432 | border: 0 !important;
433 | }
434 |
435 | th {
436 | text-align: left;
437 | padding-right: 5px;
438 | }
439 |
440 | table.citation {
441 | border-left: solid 1px gray;
442 | margin-left: 1px;
443 | }
444 |
445 | table.citation td {
446 | border-bottom: none;
447 | }
448 |
449 | th > :first-child,
450 | td > :first-child {
451 | margin-top: 0px;
452 | }
453 |
454 | th > :last-child,
455 | td > :last-child {
456 | margin-bottom: 0px;
457 | }
458 |
459 | /* -- figures --------------------------------------------------------------- */
460 |
461 | div.figure, figure {
462 | margin: 0.5em;
463 | padding: 0.5em;
464 | }
465 |
466 | div.figure p.caption, figcaption {
467 | padding: 0.3em;
468 | }
469 |
470 | div.figure p.caption span.caption-number,
471 | figcaption span.caption-number {
472 | font-style: italic;
473 | }
474 |
475 | div.figure p.caption span.caption-text,
476 | figcaption span.caption-text {
477 | }
478 |
479 | /* -- field list styles ----------------------------------------------------- */
480 |
481 | table.field-list td, table.field-list th {
482 | border: 0 !important;
483 | }
484 |
485 | .field-list ul {
486 | margin: 0;
487 | padding-left: 1em;
488 | }
489 |
490 | .field-list p {
491 | margin: 0;
492 | }
493 |
494 | .field-name {
495 | -moz-hyphens: manual;
496 | -ms-hyphens: manual;
497 | -webkit-hyphens: manual;
498 | hyphens: manual;
499 | }
500 |
501 | /* -- hlist styles ---------------------------------------------------------- */
502 |
503 | table.hlist {
504 | margin: 1em 0;
505 | }
506 |
507 | table.hlist td {
508 | vertical-align: top;
509 | }
510 |
511 | /* -- object description styles --------------------------------------------- */
512 |
513 | .sig {
514 | font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
515 | }
516 |
517 | .sig-name, code.descname {
518 | background-color: transparent;
519 | font-weight: bold;
520 | }
521 |
522 | .sig-name {
523 | font-size: 1.1em;
524 | }
525 |
526 | code.descname {
527 | font-size: 1.2em;
528 | }
529 |
530 | .sig-prename, code.descclassname {
531 | background-color: transparent;
532 | }
533 |
534 | .optional {
535 | font-size: 1.3em;
536 | }
537 |
538 | .sig-paren {
539 | font-size: larger;
540 | }
541 |
542 | .sig-param.n {
543 | font-style: italic;
544 | }
545 |
546 | /* C++ specific styling */
547 |
548 | .sig-inline.c-texpr,
549 | .sig-inline.cpp-texpr {
550 | font-family: unset;
551 | }
552 |
553 | .sig.c .k, .sig.c .kt,
554 | .sig.cpp .k, .sig.cpp .kt {
555 | color: #0033B3;
556 | }
557 |
558 | .sig.c .m,
559 | .sig.cpp .m {
560 | color: #1750EB;
561 | }
562 |
563 | .sig.c .s, .sig.c .sc,
564 | .sig.cpp .s, .sig.cpp .sc {
565 | color: #067D17;
566 | }
567 |
568 |
569 | /* -- other body styles ----------------------------------------------------- */
570 |
571 | ol.arabic {
572 | list-style: decimal;
573 | }
574 |
575 | ol.loweralpha {
576 | list-style: lower-alpha;
577 | }
578 |
579 | ol.upperalpha {
580 | list-style: upper-alpha;
581 | }
582 |
583 | ol.lowerroman {
584 | list-style: lower-roman;
585 | }
586 |
587 | ol.upperroman {
588 | list-style: upper-roman;
589 | }
590 |
591 | :not(li) > ol > li:first-child > :first-child,
592 | :not(li) > ul > li:first-child > :first-child {
593 | margin-top: 0px;
594 | }
595 |
596 | :not(li) > ol > li:last-child > :last-child,
597 | :not(li) > ul > li:last-child > :last-child {
598 | margin-bottom: 0px;
599 | }
600 |
601 | ol.simple ol p,
602 | ol.simple ul p,
603 | ul.simple ol p,
604 | ul.simple ul p {
605 | margin-top: 0;
606 | }
607 |
608 | ol.simple > li:not(:first-child) > p,
609 | ul.simple > li:not(:first-child) > p {
610 | margin-top: 0;
611 | }
612 |
613 | ol.simple p,
614 | ul.simple p {
615 | margin-bottom: 0;
616 | }
617 |
618 | dl.footnote > dt,
619 | dl.citation > dt {
620 | float: left;
621 | margin-right: 0.5em;
622 | }
623 |
624 | dl.footnote > dd,
625 | dl.citation > dd {
626 | margin-bottom: 0em;
627 | }
628 |
629 | dl.footnote > dd:after,
630 | dl.citation > dd:after {
631 | content: "";
632 | clear: both;
633 | }
634 |
635 | dl.field-list {
636 | display: grid;
637 | grid-template-columns: fit-content(30%) auto;
638 | }
639 |
640 | dl.field-list > dt {
641 | font-weight: bold;
642 | word-break: break-word;
643 | padding-left: 0.5em;
644 | padding-right: 5px;
645 | }
646 |
647 | dl.field-list > dt:after {
648 | content: ":";
649 | }
650 |
651 | dl.field-list > dd {
652 | padding-left: 0.5em;
653 | margin-top: 0em;
654 | margin-left: 0em;
655 | margin-bottom: 0em;
656 | }
657 |
658 | dl {
659 | margin-bottom: 15px;
660 | }
661 |
662 | dd > :first-child {
663 | margin-top: 0px;
664 | }
665 |
666 | dd ul, dd table {
667 | margin-bottom: 10px;
668 | }
669 |
670 | dd {
671 | margin-top: 3px;
672 | margin-bottom: 10px;
673 | margin-left: 30px;
674 | }
675 |
676 | dl > dd:last-child,
677 | dl > dd:last-child > :last-child {
678 | margin-bottom: 0;
679 | }
680 |
681 | dt:target, span.highlighted {
682 | background-color: #fbe54e;
683 | }
684 |
685 | rect.highlighted {
686 | fill: #fbe54e;
687 | }
688 |
689 | dl.glossary dt {
690 | font-weight: bold;
691 | font-size: 1.1em;
692 | }
693 |
694 | .versionmodified {
695 | font-style: italic;
696 | }
697 |
698 | .system-message {
699 | background-color: #fda;
700 | padding: 5px;
701 | border: 3px solid red;
702 | }
703 |
704 | .footnote:target {
705 | background-color: #ffa;
706 | }
707 |
708 | .line-block {
709 | display: block;
710 | margin-top: 1em;
711 | margin-bottom: 1em;
712 | }
713 |
714 | .line-block .line-block {
715 | margin-top: 0;
716 | margin-bottom: 0;
717 | margin-left: 1.5em;
718 | }
719 |
720 | .guilabel, .menuselection {
721 | font-family: sans-serif;
722 | }
723 |
724 | .accelerator {
725 | text-decoration: underline;
726 | }
727 |
728 | .classifier {
729 | font-style: oblique;
730 | }
731 |
732 | .classifier:before {
733 | font-style: normal;
734 | margin: 0.5em;
735 | content: ":";
736 | }
737 |
738 | abbr, acronym {
739 | border-bottom: dotted 1px;
740 | cursor: help;
741 | }
742 |
743 | /* -- code displays --------------------------------------------------------- */
744 |
745 | pre {
746 | overflow: auto;
747 | overflow-y: hidden; /* fixes display issues on Chrome browsers */
748 | }
749 |
750 | pre, div[class*="highlight-"] {
751 | clear: both;
752 | }
753 |
754 | span.pre {
755 | -moz-hyphens: none;
756 | -ms-hyphens: none;
757 | -webkit-hyphens: none;
758 | hyphens: none;
759 | }
760 |
761 | div[class*="highlight-"] {
762 | margin: 1em 0;
763 | }
764 |
765 | td.linenos pre {
766 | border: 0;
767 | background-color: transparent;
768 | color: #aaa;
769 | }
770 |
771 | table.highlighttable {
772 | display: block;
773 | }
774 |
775 | table.highlighttable tbody {
776 | display: block;
777 | }
778 |
779 | table.highlighttable tr {
780 | display: flex;
781 | }
782 |
783 | table.highlighttable td {
784 | margin: 0;
785 | padding: 0;
786 | }
787 |
788 | table.highlighttable td.linenos {
789 | padding-right: 0.5em;
790 | }
791 |
792 | table.highlighttable td.code {
793 | flex: 1;
794 | overflow: hidden;
795 | }
796 |
797 | .highlight .hll {
798 | display: block;
799 | }
800 |
801 | div.highlight pre,
802 | table.highlighttable pre {
803 | margin: 0;
804 | }
805 |
806 | div.code-block-caption + div {
807 | margin-top: 0;
808 | }
809 |
810 | div.code-block-caption {
811 | margin-top: 1em;
812 | padding: 2px 5px;
813 | font-size: small;
814 | }
815 |
816 | div.code-block-caption code {
817 | background-color: transparent;
818 | }
819 |
820 | table.highlighttable td.linenos,
821 | span.linenos,
822 | div.highlight span.gp { /* gp: Generic.Prompt */
823 | user-select: none;
824 | -webkit-user-select: text; /* Safari fallback only */
825 | -webkit-user-select: none; /* Chrome/Safari */
826 | -moz-user-select: none; /* Firefox */
827 | -ms-user-select: none; /* IE10+ */
828 | }
829 |
830 | div.code-block-caption span.caption-number {
831 | padding: 0.1em 0.3em;
832 | font-style: italic;
833 | }
834 |
835 | div.code-block-caption span.caption-text {
836 | }
837 |
838 | div.literal-block-wrapper {
839 | margin: 1em 0;
840 | }
841 |
842 | code.xref, a code {
843 | background-color: transparent;
844 | font-weight: bold;
845 | }
846 |
847 | h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
848 | background-color: transparent;
849 | }
850 |
851 | .viewcode-link {
852 | float: right;
853 | }
854 |
855 | .viewcode-back {
856 | float: right;
857 | font-family: sans-serif;
858 | }
859 |
860 | div.viewcode-block:target {
861 | margin: -1px -10px;
862 | padding: 0 10px;
863 | }
864 |
865 | /* -- math display ---------------------------------------------------------- */
866 |
867 | img.math {
868 | vertical-align: middle;
869 | }
870 |
871 | div.body div.math p {
872 | text-align: center;
873 | }
874 |
875 | span.eqno {
876 | float: right;
877 | }
878 |
879 | span.eqno a.headerlink {
880 | position: absolute;
881 | z-index: 1;
882 | }
883 |
884 | div.math:hover a.headerlink {
885 | visibility: visible;
886 | }
887 |
888 | /* -- printout stylesheet --------------------------------------------------- */
889 |
890 | @media print {
891 | div.document,
892 | div.documentwrapper,
893 | div.bodywrapper {
894 | margin: 0 !important;
895 | width: 100%;
896 | }
897 |
898 | div.sphinxsidebar,
899 | div.related,
900 | div.footer,
901 | #top-link {
902 | display: none;
903 | }
904 | }
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/badge_only.css:
--------------------------------------------------------------------------------
1 | .fa:before{-webkit-font-smoothing:antialiased}.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}}
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/lato-bold-italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/lato-bold-italic.woff
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/lato-bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/lato-bold.woff
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/lato-bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/lato-bold.woff2
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/lato-normal-italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/lato-normal-italic.woff
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/lato-normal.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/lato-normal.woff
--------------------------------------------------------------------------------
/docs/_build/html/_static/css/fonts/lato-normal.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/css/fonts/lato-normal.woff2
--------------------------------------------------------------------------------
/docs/_build/html/_static/doctools.js:
--------------------------------------------------------------------------------
1 | /*
2 | * doctools.js
3 | * ~~~~~~~~~~~
4 | *
5 | * Sphinx JavaScript utilities for all documentation.
6 | *
7 | * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
8 | * :license: BSD, see LICENSE for details.
9 | *
10 | */
11 |
12 | /**
13 | * select a different prefix for underscore
14 | */
15 | $u = _.noConflict();
16 |
17 | /**
18 | * make the code below compatible with browsers without
19 | * an installed firebug like debugger
20 | if (!window.console || !console.firebug) {
21 | var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
22 | "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
23 | "profile", "profileEnd"];
24 | window.console = {};
25 | for (var i = 0; i < names.length; ++i)
26 | window.console[names[i]] = function() {};
27 | }
28 | */
29 |
30 | /**
31 | * small helper function to urldecode strings
32 | *
33 | * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
34 | */
35 | jQuery.urldecode = function(x) {
36 | if (!x) {
37 | return x
38 | }
39 | return decodeURIComponent(x.replace(/\+/g, ' '));
40 | };
41 |
42 | /**
43 | * small helper function to urlencode strings
44 | */
45 | jQuery.urlencode = encodeURIComponent;
46 |
47 | /**
48 | * This function returns the parsed url parameters of the
49 | * current request. Multiple values per key are supported,
50 | * it will always return arrays of strings for the value parts.
51 | */
52 | jQuery.getQueryParameters = function(s) {
53 | if (typeof s === 'undefined')
54 | s = document.location.search;
55 | var parts = s.substr(s.indexOf('?') + 1).split('&');
56 | var result = {};
57 | for (var i = 0; i < parts.length; i++) {
58 | var tmp = parts[i].split('=', 2);
59 | var key = jQuery.urldecode(tmp[0]);
60 | var value = jQuery.urldecode(tmp[1]);
61 | if (key in result)
62 | result[key].push(value);
63 | else
64 | result[key] = [value];
65 | }
66 | return result;
67 | };
68 |
69 | /**
70 | * highlight a given string on a jquery object by wrapping it in
71 | * span elements with the given class name.
72 | */
73 | jQuery.fn.highlightText = function(text, className) {
74 | function highlight(node, addItems) {
75 | if (node.nodeType === 3) {
76 | var val = node.nodeValue;
77 | var pos = val.toLowerCase().indexOf(text);
78 | if (pos >= 0 &&
79 | !jQuery(node.parentNode).hasClass(className) &&
80 | !jQuery(node.parentNode).hasClass("nohighlight")) {
81 | var span;
82 | var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
83 | if (isInSVG) {
84 | span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
85 | } else {
86 | span = document.createElement("span");
87 | span.className = className;
88 | }
89 | span.appendChild(document.createTextNode(val.substr(pos, text.length)));
90 | node.parentNode.insertBefore(span, node.parentNode.insertBefore(
91 | document.createTextNode(val.substr(pos + text.length)),
92 | node.nextSibling));
93 | node.nodeValue = val.substr(0, pos);
94 | if (isInSVG) {
95 | var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
96 | var bbox = node.parentElement.getBBox();
97 | rect.x.baseVal.value = bbox.x;
98 | rect.y.baseVal.value = bbox.y;
99 | rect.width.baseVal.value = bbox.width;
100 | rect.height.baseVal.value = bbox.height;
101 | rect.setAttribute('class', className);
102 | addItems.push({
103 | "parent": node.parentNode,
104 | "target": rect});
105 | }
106 | }
107 | }
108 | else if (!jQuery(node).is("button, select, textarea")) {
109 | jQuery.each(node.childNodes, function() {
110 | highlight(this, addItems);
111 | });
112 | }
113 | }
114 | var addItems = [];
115 | var result = this.each(function() {
116 | highlight(this, addItems);
117 | });
118 | for (var i = 0; i < addItems.length; ++i) {
119 | jQuery(addItems[i].parent).before(addItems[i].target);
120 | }
121 | return result;
122 | };
123 |
124 | /*
125 | * backward compatibility for jQuery.browser
126 | * This will be supported until firefox bug is fixed.
127 | */
128 | if (!jQuery.browser) {
129 | jQuery.uaMatch = function(ua) {
130 | ua = ua.toLowerCase();
131 |
132 | var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
133 | /(webkit)[ \/]([\w.]+)/.exec(ua) ||
134 | /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
135 | /(msie) ([\w.]+)/.exec(ua) ||
136 | ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
137 | [];
138 |
139 | return {
140 | browser: match[ 1 ] || "",
141 | version: match[ 2 ] || "0"
142 | };
143 | };
144 | jQuery.browser = {};
145 | jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
146 | }
147 |
148 | /**
149 | * Small JavaScript module for the documentation.
150 | */
151 | var Documentation = {
152 |
153 | init : function() {
154 | this.fixFirefoxAnchorBug();
155 | this.highlightSearchWords();
156 | this.initIndexTable();
157 | if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
158 | this.initOnKeyListeners();
159 | }
160 | },
161 |
162 | /**
163 | * i18n support
164 | */
165 | TRANSLATIONS : {},
166 | PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
167 | LOCALE : 'unknown',
168 |
169 | // gettext and ngettext don't access this so that the functions
170 | // can safely bound to a different name (_ = Documentation.gettext)
171 | gettext : function(string) {
172 | var translated = Documentation.TRANSLATIONS[string];
173 | if (typeof translated === 'undefined')
174 | return string;
175 | return (typeof translated === 'string') ? translated : translated[0];
176 | },
177 |
178 | ngettext : function(singular, plural, n) {
179 | var translated = Documentation.TRANSLATIONS[singular];
180 | if (typeof translated === 'undefined')
181 | return (n == 1) ? singular : plural;
182 | return translated[Documentation.PLURALEXPR(n)];
183 | },
184 |
185 | addTranslations : function(catalog) {
186 | for (var key in catalog.messages)
187 | this.TRANSLATIONS[key] = catalog.messages[key];
188 | this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
189 | this.LOCALE = catalog.locale;
190 | },
191 |
192 | /**
193 | * add context elements like header anchor links
194 | */
195 | addContextElements : function() {
196 | $('div[id] > :header:first').each(function() {
197 | $('').
198 | attr('href', '#' + this.id).
199 | attr('title', _('Permalink to this headline')).
200 | appendTo(this);
201 | });
202 | $('dt[id]').each(function() {
203 | $('').
204 | attr('href', '#' + this.id).
205 | attr('title', _('Permalink to this definition')).
206 | appendTo(this);
207 | });
208 | },
209 |
210 | /**
211 | * workaround a firefox stupidity
212 | * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
213 | */
214 | fixFirefoxAnchorBug : function() {
215 | if (document.location.hash && $.browser.mozilla)
216 | window.setTimeout(function() {
217 | document.location.href += '';
218 | }, 10);
219 | },
220 |
221 | /**
222 | * highlight the search words provided in the url in the text
223 | */
224 | highlightSearchWords : function() {
225 | var params = $.getQueryParameters();
226 | var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
227 | if (terms.length) {
228 | var body = $('div.body');
229 | if (!body.length) {
230 | body = $('body');
231 | }
232 | window.setTimeout(function() {
233 | $.each(terms, function() {
234 | body.highlightText(this.toLowerCase(), 'highlighted');
235 | });
236 | }, 10);
237 | $('' + _('Hide Search Matches') + '
')
239 | .appendTo($('#searchbox'));
240 | }
241 | },
242 |
243 | /**
244 | * init the domain index toggle buttons
245 | */
246 | initIndexTable : function() {
247 | var togglers = $('img.toggler').click(function() {
248 | var src = $(this).attr('src');
249 | var idnum = $(this).attr('id').substr(7);
250 | $('tr.cg-' + idnum).toggle();
251 | if (src.substr(-9) === 'minus.png')
252 | $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
253 | else
254 | $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
255 | }).css('display', '');
256 | if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
257 | togglers.click();
258 | }
259 | },
260 |
261 | /**
262 | * helper function to hide the search marks again
263 | */
264 | hideSearchWords : function() {
265 | $('#searchbox .highlight-link').fadeOut(300);
266 | $('span.highlighted').removeClass('highlighted');
267 | },
268 |
269 | /**
270 | * make the url absolute
271 | */
272 | makeURL : function(relativeURL) {
273 | return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
274 | },
275 |
276 | /**
277 | * get the current relative url
278 | */
279 | getCurrentURL : function() {
280 | var path = document.location.pathname;
281 | var parts = path.split(/\//);
282 | $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
283 | if (this === '..')
284 | parts.pop();
285 | });
286 | var url = parts.join('/');
287 | return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
288 | },
289 |
290 | initOnKeyListeners: function() {
291 | $(document).keydown(function(event) {
292 | var activeElementType = document.activeElement.tagName;
293 | // don't navigate when in search box, textarea, dropdown or button
294 | if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
295 | && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey
296 | && !event.shiftKey) {
297 | switch (event.keyCode) {
298 | case 37: // left
299 | var prevHref = $('link[rel="prev"]').prop('href');
300 | if (prevHref) {
301 | window.location.href = prevHref;
302 | return false;
303 | }
304 | break;
305 | case 39: // right
306 | var nextHref = $('link[rel="next"]').prop('href');
307 | if (nextHref) {
308 | window.location.href = nextHref;
309 | return false;
310 | }
311 | break;
312 | }
313 | }
314 | });
315 | }
316 | };
317 |
318 | // quick alias for translations
319 | _ = Documentation.gettext;
320 |
321 | $(document).ready(function() {
322 | Documentation.init();
323 | });
324 |
--------------------------------------------------------------------------------
/docs/_build/html/_static/documentation_options.js:
--------------------------------------------------------------------------------
1 | var DOCUMENTATION_OPTIONS = {
2 | URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
3 | VERSION: '0.0.1',
4 | LANGUAGE: 'None',
5 | COLLAPSE_INDEX: false,
6 | BUILDER: 'html',
7 | FILE_SUFFIX: '.html',
8 | LINK_SUFFIX: '.html',
9 | HAS_SOURCE: true,
10 | SOURCELINK_SUFFIX: '.txt',
11 | NAVIGATION_WITH_KEYS: false
12 | };
--------------------------------------------------------------------------------
/docs/_build/html/_static/file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/file.png
--------------------------------------------------------------------------------
/docs/_build/html/_static/js/badge_only.js:
--------------------------------------------------------------------------------
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){}});
--------------------------------------------------------------------------------
/docs/_build/html/_static/js/html5shiv-printshiv.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
3 | */
4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",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=" ",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);
--------------------------------------------------------------------------------
/docs/_build/html/_static/js/html5shiv.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
3 | */
4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",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=" ",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);
--------------------------------------------------------------------------------
/docs/_build/html/_static/js/theme.js:
--------------------------------------------------------------------------------
1 | !function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap(""),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(' '),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0
63 | var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
64 | var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
65 | var s_v = "^(" + C + ")?" + v; // vowel in stem
66 |
67 | this.stemWord = function (w) {
68 | var stem;
69 | var suffix;
70 | var firstch;
71 | var origword = w;
72 |
73 | if (w.length < 3)
74 | return w;
75 |
76 | var re;
77 | var re2;
78 | var re3;
79 | var re4;
80 |
81 | firstch = w.substr(0,1);
82 | if (firstch == "y")
83 | w = firstch.toUpperCase() + w.substr(1);
84 |
85 | // Step 1a
86 | re = /^(.+?)(ss|i)es$/;
87 | re2 = /^(.+?)([^s])s$/;
88 |
89 | if (re.test(w))
90 | w = w.replace(re,"$1$2");
91 | else if (re2.test(w))
92 | w = w.replace(re2,"$1$2");
93 |
94 | // Step 1b
95 | re = /^(.+?)eed$/;
96 | re2 = /^(.+?)(ed|ing)$/;
97 | if (re.test(w)) {
98 | var fp = re.exec(w);
99 | re = new RegExp(mgr0);
100 | if (re.test(fp[1])) {
101 | re = /.$/;
102 | w = w.replace(re,"");
103 | }
104 | }
105 | else if (re2.test(w)) {
106 | var fp = re2.exec(w);
107 | stem = fp[1];
108 | re2 = new RegExp(s_v);
109 | if (re2.test(stem)) {
110 | w = stem;
111 | re2 = /(at|bl|iz)$/;
112 | re3 = new RegExp("([^aeiouylsz])\\1$");
113 | re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
114 | if (re2.test(w))
115 | w = w + "e";
116 | else if (re3.test(w)) {
117 | re = /.$/;
118 | w = w.replace(re,"");
119 | }
120 | else if (re4.test(w))
121 | w = w + "e";
122 | }
123 | }
124 |
125 | // Step 1c
126 | re = /^(.+?)y$/;
127 | if (re.test(w)) {
128 | var fp = re.exec(w);
129 | stem = fp[1];
130 | re = new RegExp(s_v);
131 | if (re.test(stem))
132 | w = stem + "i";
133 | }
134 |
135 | // Step 2
136 | re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
137 | if (re.test(w)) {
138 | var fp = re.exec(w);
139 | stem = fp[1];
140 | suffix = fp[2];
141 | re = new RegExp(mgr0);
142 | if (re.test(stem))
143 | w = stem + step2list[suffix];
144 | }
145 |
146 | // Step 3
147 | re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
148 | if (re.test(w)) {
149 | var fp = re.exec(w);
150 | stem = fp[1];
151 | suffix = fp[2];
152 | re = new RegExp(mgr0);
153 | if (re.test(stem))
154 | w = stem + step3list[suffix];
155 | }
156 |
157 | // Step 4
158 | re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
159 | re2 = /^(.+?)(s|t)(ion)$/;
160 | if (re.test(w)) {
161 | var fp = re.exec(w);
162 | stem = fp[1];
163 | re = new RegExp(mgr1);
164 | if (re.test(stem))
165 | w = stem;
166 | }
167 | else if (re2.test(w)) {
168 | var fp = re2.exec(w);
169 | stem = fp[1] + fp[2];
170 | re2 = new RegExp(mgr1);
171 | if (re2.test(stem))
172 | w = stem;
173 | }
174 |
175 | // Step 5
176 | re = /^(.+?)e$/;
177 | if (re.test(w)) {
178 | var fp = re.exec(w);
179 | stem = fp[1];
180 | re = new RegExp(mgr1);
181 | re2 = new RegExp(meq1);
182 | re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
183 | if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
184 | w = stem;
185 | }
186 | re = /ll$/;
187 | re2 = new RegExp(mgr1);
188 | if (re.test(w) && re2.test(w)) {
189 | re = /.$/;
190 | w = w.replace(re,"");
191 | }
192 |
193 | // and turn initial Y back to y
194 | if (firstch == "y")
195 | w = firstch.toLowerCase() + w.substr(1);
196 | return w;
197 | }
198 | }
199 |
200 |
201 |
202 |
203 | var splitChars = (function() {
204 | var result = {};
205 | var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
206 | 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
207 | 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
208 | 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
209 | 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
210 | 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
211 | 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
212 | 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
213 | 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
214 | 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
215 | var i, j, start, end;
216 | for (i = 0; i < singles.length; i++) {
217 | result[singles[i]] = true;
218 | }
219 | var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
220 | [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
221 | [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
222 | [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
223 | [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
224 | [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
225 | [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
226 | [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
227 | [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
228 | [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
229 | [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
230 | [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
231 | [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
232 | [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
233 | [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
234 | [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
235 | [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
236 | [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
237 | [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
238 | [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
239 | [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
240 | [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
241 | [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
242 | [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
243 | [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
244 | [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
245 | [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
246 | [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
247 | [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
248 | [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
249 | [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
250 | [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
251 | [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
252 | [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
253 | [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
254 | [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
255 | [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
256 | [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
257 | [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
258 | [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
259 | [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
260 | [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
261 | [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
262 | [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
263 | [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
264 | [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
265 | [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
266 | [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
267 | [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
268 | for (i = 0; i < ranges.length; i++) {
269 | start = ranges[i][0];
270 | end = ranges[i][1];
271 | for (j = start; j <= end; j++) {
272 | result[j] = true;
273 | }
274 | }
275 | return result;
276 | })();
277 |
278 | function splitQuery(query) {
279 | var result = [];
280 | var start = -1;
281 | for (var i = 0; i < query.length; i++) {
282 | if (splitChars[query.charCodeAt(i)]) {
283 | if (start !== -1) {
284 | result.push(query.slice(start, i));
285 | start = -1;
286 | }
287 | } else if (start === -1) {
288 | start = i;
289 | }
290 | }
291 | if (start !== -1) {
292 | result.push(query.slice(start));
293 | }
294 | return result;
295 | }
296 |
297 |
298 |
--------------------------------------------------------------------------------
/docs/_build/html/_static/minus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/minus.png
--------------------------------------------------------------------------------
/docs/_build/html/_static/plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/_static/plus.png
--------------------------------------------------------------------------------
/docs/_build/html/_static/pygments.css:
--------------------------------------------------------------------------------
1 | pre { line-height: 125%; }
2 | td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
3 | span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
4 | td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
5 | span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
6 | .highlight .hll { background-color: #ffffcc }
7 | .highlight { background: #f8f8f8; }
8 | .highlight .c { color: #408080; font-style: italic } /* Comment */
9 | .highlight .err { border: 1px solid #FF0000 } /* Error */
10 | .highlight .k { color: #008000; font-weight: bold } /* Keyword */
11 | .highlight .o { color: #666666 } /* Operator */
12 | .highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
13 | .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
14 | .highlight .cp { color: #BC7A00 } /* Comment.Preproc */
15 | .highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
16 | .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
17 | .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
18 | .highlight .gd { color: #A00000 } /* Generic.Deleted */
19 | .highlight .ge { font-style: italic } /* Generic.Emph */
20 | .highlight .gr { color: #FF0000 } /* Generic.Error */
21 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
22 | .highlight .gi { color: #00A000 } /* Generic.Inserted */
23 | .highlight .go { color: #888888 } /* Generic.Output */
24 | .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
25 | .highlight .gs { font-weight: bold } /* Generic.Strong */
26 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
27 | .highlight .gt { color: #0044DD } /* Generic.Traceback */
28 | .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
29 | .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
30 | .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
31 | .highlight .kp { color: #008000 } /* Keyword.Pseudo */
32 | .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
33 | .highlight .kt { color: #B00040 } /* Keyword.Type */
34 | .highlight .m { color: #666666 } /* Literal.Number */
35 | .highlight .s { color: #BA2121 } /* Literal.String */
36 | .highlight .na { color: #7D9029 } /* Name.Attribute */
37 | .highlight .nb { color: #008000 } /* Name.Builtin */
38 | .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
39 | .highlight .no { color: #880000 } /* Name.Constant */
40 | .highlight .nd { color: #AA22FF } /* Name.Decorator */
41 | .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
42 | .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
43 | .highlight .nf { color: #0000FF } /* Name.Function */
44 | .highlight .nl { color: #A0A000 } /* Name.Label */
45 | .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
46 | .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
47 | .highlight .nv { color: #19177C } /* Name.Variable */
48 | .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
49 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */
50 | .highlight .mb { color: #666666 } /* Literal.Number.Bin */
51 | .highlight .mf { color: #666666 } /* Literal.Number.Float */
52 | .highlight .mh { color: #666666 } /* Literal.Number.Hex */
53 | .highlight .mi { color: #666666 } /* Literal.Number.Integer */
54 | .highlight .mo { color: #666666 } /* Literal.Number.Oct */
55 | .highlight .sa { color: #BA2121 } /* Literal.String.Affix */
56 | .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
57 | .highlight .sc { color: #BA2121 } /* Literal.String.Char */
58 | .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
59 | .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
60 | .highlight .s2 { color: #BA2121 } /* Literal.String.Double */
61 | .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
62 | .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
63 | .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
64 | .highlight .sx { color: #008000 } /* Literal.String.Other */
65 | .highlight .sr { color: #BB6688 } /* Literal.String.Regex */
66 | .highlight .s1 { color: #BA2121 } /* Literal.String.Single */
67 | .highlight .ss { color: #19177C } /* Literal.String.Symbol */
68 | .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
69 | .highlight .fm { color: #0000FF } /* Name.Function.Magic */
70 | .highlight .vc { color: #19177C } /* Name.Variable.Class */
71 | .highlight .vg { color: #19177C } /* Name.Variable.Global */
72 | .highlight .vi { color: #19177C } /* Name.Variable.Instance */
73 | .highlight .vm { color: #19177C } /* Name.Variable.Magic */
74 | .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
--------------------------------------------------------------------------------
/docs/_build/html/_static/searchtools.js:
--------------------------------------------------------------------------------
1 | /*
2 | * searchtools.js
3 | * ~~~~~~~~~~~~~~~~
4 | *
5 | * Sphinx JavaScript utilities for the full-text search.
6 | *
7 | * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
8 | * :license: BSD, see LICENSE for details.
9 | *
10 | */
11 |
12 | if (!Scorer) {
13 | /**
14 | * Simple result scoring code.
15 | */
16 | var Scorer = {
17 | // Implement the following function to further tweak the score for each result
18 | // The function takes a result array [filename, title, anchor, descr, score]
19 | // and returns the new score.
20 | /*
21 | score: function(result) {
22 | return result[4];
23 | },
24 | */
25 |
26 | // query matches the full name of an object
27 | objNameMatch: 11,
28 | // or matches in the last dotted part of the object name
29 | objPartialMatch: 6,
30 | // Additive scores depending on the priority of the object
31 | objPrio: {0: 15, // used to be importantResults
32 | 1: 5, // used to be objectResults
33 | 2: -5}, // used to be unimportantResults
34 | // Used when the priority is not in the mapping.
35 | objPrioDefault: 0,
36 |
37 | // query found in title
38 | title: 15,
39 | partialTitle: 7,
40 | // query found in terms
41 | term: 5,
42 | partialTerm: 2
43 | };
44 | }
45 |
46 | if (!splitQuery) {
47 | function splitQuery(query) {
48 | return query.split(/\s+/);
49 | }
50 | }
51 |
52 | /**
53 | * Search Module
54 | */
55 | var Search = {
56 |
57 | _index : null,
58 | _queued_query : null,
59 | _pulse_status : -1,
60 |
61 | htmlToText : function(htmlString) {
62 | var virtualDocument = document.implementation.createHTMLDocument('virtual');
63 | var htmlElement = $(htmlString, virtualDocument);
64 | htmlElement.find('.headerlink').remove();
65 | docContent = htmlElement.find('[role=main]')[0];
66 | if(docContent === undefined) {
67 | console.warn("Content block not found. Sphinx search tries to obtain it " +
68 | "via '[role=main]'. Could you check your theme or template.");
69 | return "";
70 | }
71 | return docContent.textContent || docContent.innerText;
72 | },
73 |
74 | init : function() {
75 | var params = $.getQueryParameters();
76 | if (params.q) {
77 | var query = params.q[0];
78 | $('input[name="q"]')[0].value = query;
79 | this.performSearch(query);
80 | }
81 | },
82 |
83 | loadIndex : function(url) {
84 | $.ajax({type: "GET", url: url, data: null,
85 | dataType: "script", cache: true,
86 | complete: function(jqxhr, textstatus) {
87 | if (textstatus != "success") {
88 | document.getElementById("searchindexloader").src = url;
89 | }
90 | }});
91 | },
92 |
93 | setIndex : function(index) {
94 | var q;
95 | this._index = index;
96 | if ((q = this._queued_query) !== null) {
97 | this._queued_query = null;
98 | Search.query(q);
99 | }
100 | },
101 |
102 | hasIndex : function() {
103 | return this._index !== null;
104 | },
105 |
106 | deferQuery : function(query) {
107 | this._queued_query = query;
108 | },
109 |
110 | stopPulse : function() {
111 | this._pulse_status = 0;
112 | },
113 |
114 | startPulse : function() {
115 | if (this._pulse_status >= 0)
116 | return;
117 | function pulse() {
118 | var i;
119 | Search._pulse_status = (Search._pulse_status + 1) % 4;
120 | var dotString = '';
121 | for (i = 0; i < Search._pulse_status; i++)
122 | dotString += '.';
123 | Search.dots.text(dotString);
124 | if (Search._pulse_status > -1)
125 | window.setTimeout(pulse, 500);
126 | }
127 | pulse();
128 | },
129 |
130 | /**
131 | * perform a search for something (or wait until index is loaded)
132 | */
133 | performSearch : function(query) {
134 | // create the required interface elements
135 | this.out = $('#search-results');
136 | this.title = $('' + _('Searching') + ' ').appendTo(this.out);
137 | this.dots = $(' ').appendTo(this.title);
138 | this.status = $('
').appendTo(this.out);
139 | this.output = $('').appendTo(this.out);
140 |
141 | $('#search-progress').text(_('Preparing search...'));
142 | this.startPulse();
143 |
144 | // index already loaded, the browser was quick!
145 | if (this.hasIndex())
146 | this.query(query);
147 | else
148 | this.deferQuery(query);
149 | },
150 |
151 | /**
152 | * execute search (requires search index to be loaded)
153 | */
154 | query : function(query) {
155 | var i;
156 |
157 | // stem the searchterms and add them to the correct list
158 | var stemmer = new Stemmer();
159 | var searchterms = [];
160 | var excluded = [];
161 | var hlterms = [];
162 | var tmp = splitQuery(query);
163 | var objectterms = [];
164 | for (i = 0; i < tmp.length; i++) {
165 | if (tmp[i] !== "") {
166 | objectterms.push(tmp[i].toLowerCase());
167 | }
168 |
169 | if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
170 | // skip this "word"
171 | continue;
172 | }
173 | // stem the word
174 | var word = stemmer.stemWord(tmp[i].toLowerCase());
175 | // prevent stemmer from cutting word smaller than two chars
176 | if(word.length < 3 && tmp[i].length >= 3) {
177 | word = tmp[i];
178 | }
179 | var toAppend;
180 | // select the correct list
181 | if (word[0] == '-') {
182 | toAppend = excluded;
183 | word = word.substr(1);
184 | }
185 | else {
186 | toAppend = searchterms;
187 | hlterms.push(tmp[i].toLowerCase());
188 | }
189 | // only add if not already in the list
190 | if (!$u.contains(toAppend, word))
191 | toAppend.push(word);
192 | }
193 | var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
194 |
195 | // console.debug('SEARCH: searching for:');
196 | // console.info('required: ', searchterms);
197 | // console.info('excluded: ', excluded);
198 |
199 | // prepare search
200 | var terms = this._index.terms;
201 | var titleterms = this._index.titleterms;
202 |
203 | // array of [filename, title, anchor, descr, score]
204 | var results = [];
205 | $('#search-progress').empty();
206 |
207 | // lookup as object
208 | for (i = 0; i < objectterms.length; i++) {
209 | var others = [].concat(objectterms.slice(0, i),
210 | objectterms.slice(i+1, objectterms.length));
211 | results = results.concat(this.performObjectSearch(objectterms[i], others));
212 | }
213 |
214 | // lookup as search terms in fulltext
215 | results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
216 |
217 | // let the scorer override scores with a custom scoring function
218 | if (Scorer.score) {
219 | for (i = 0; i < results.length; i++)
220 | results[i][4] = Scorer.score(results[i]);
221 | }
222 |
223 | // now sort the results by score (in opposite order of appearance, since the
224 | // display function below uses pop() to retrieve items) and then
225 | // alphabetically
226 | results.sort(function(a, b) {
227 | var left = a[4];
228 | var right = b[4];
229 | if (left > right) {
230 | return 1;
231 | } else if (left < right) {
232 | return -1;
233 | } else {
234 | // same score: sort alphabetically
235 | left = a[1].toLowerCase();
236 | right = b[1].toLowerCase();
237 | return (left > right) ? -1 : ((left < right) ? 1 : 0);
238 | }
239 | });
240 |
241 | // for debugging
242 | //Search.lastresults = results.slice(); // a copy
243 | //console.info('search results:', Search.lastresults);
244 |
245 | // print the results
246 | var resultCount = results.length;
247 | function displayNextItem() {
248 | // results left, load the summary and display it
249 | if (results.length) {
250 | var item = results.pop();
251 | var listItem = $(' ');
252 | var requestUrl = "";
253 | var linkUrl = "";
254 | if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
255 | // dirhtml builder
256 | var dirname = item[0] + '/';
257 | if (dirname.match(/\/index\/$/)) {
258 | dirname = dirname.substring(0, dirname.length-6);
259 | } else if (dirname == 'index/') {
260 | dirname = '';
261 | }
262 | requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
263 | linkUrl = requestUrl;
264 |
265 | } else {
266 | // normal html builders
267 | requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
268 | linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
269 | }
270 | listItem.append($(' ').attr('href',
271 | linkUrl +
272 | highlightstring + item[2]).html(item[1]));
273 | if (item[3]) {
274 | listItem.append($(' (' + item[3] + ') '));
275 | Search.output.append(listItem);
276 | setTimeout(function() {
277 | displayNextItem();
278 | }, 5);
279 | } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
280 | $.ajax({url: requestUrl,
281 | dataType: "text",
282 | complete: function(jqxhr, textstatus) {
283 | var data = jqxhr.responseText;
284 | if (data !== '' && data !== undefined) {
285 | var summary = Search.makeSearchSummary(data, searchterms, hlterms);
286 | if (summary) {
287 | listItem.append(summary);
288 | }
289 | }
290 | Search.output.append(listItem);
291 | setTimeout(function() {
292 | displayNextItem();
293 | }, 5);
294 | }});
295 | } else {
296 | // no source available, just display title
297 | Search.output.append(listItem);
298 | setTimeout(function() {
299 | displayNextItem();
300 | }, 5);
301 | }
302 | }
303 | // search finished, update title and status message
304 | else {
305 | Search.stopPulse();
306 | Search.title.text(_('Search Results'));
307 | if (!resultCount)
308 | Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
309 | else
310 | Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
311 | Search.status.fadeIn(500);
312 | }
313 | }
314 | displayNextItem();
315 | },
316 |
317 | /**
318 | * search for object names
319 | */
320 | performObjectSearch : function(object, otherterms) {
321 | var filenames = this._index.filenames;
322 | var docnames = this._index.docnames;
323 | var objects = this._index.objects;
324 | var objnames = this._index.objnames;
325 | var titles = this._index.titles;
326 |
327 | var i;
328 | var results = [];
329 |
330 | for (var prefix in objects) {
331 | for (var name in objects[prefix]) {
332 | var fullname = (prefix ? prefix + '.' : '') + name;
333 | var fullnameLower = fullname.toLowerCase()
334 | if (fullnameLower.indexOf(object) > -1) {
335 | var score = 0;
336 | var parts = fullnameLower.split('.');
337 | // check for different match types: exact matches of full name or
338 | // "last name" (i.e. last dotted part)
339 | if (fullnameLower == object || parts[parts.length - 1] == object) {
340 | score += Scorer.objNameMatch;
341 | // matches in last name
342 | } else if (parts[parts.length - 1].indexOf(object) > -1) {
343 | score += Scorer.objPartialMatch;
344 | }
345 | var match = objects[prefix][name];
346 | var objname = objnames[match[1]][2];
347 | var title = titles[match[0]];
348 | // If more than one term searched for, we require other words to be
349 | // found in the name/title/description
350 | if (otherterms.length > 0) {
351 | var haystack = (prefix + ' ' + name + ' ' +
352 | objname + ' ' + title).toLowerCase();
353 | var allfound = true;
354 | for (i = 0; i < otherterms.length; i++) {
355 | if (haystack.indexOf(otherterms[i]) == -1) {
356 | allfound = false;
357 | break;
358 | }
359 | }
360 | if (!allfound) {
361 | continue;
362 | }
363 | }
364 | var descr = objname + _(', in ') + title;
365 |
366 | var anchor = match[3];
367 | if (anchor === '')
368 | anchor = fullname;
369 | else if (anchor == '-')
370 | anchor = objnames[match[1]][1] + '-' + fullname;
371 | // add custom score for some objects according to scorer
372 | if (Scorer.objPrio.hasOwnProperty(match[2])) {
373 | score += Scorer.objPrio[match[2]];
374 | } else {
375 | score += Scorer.objPrioDefault;
376 | }
377 | results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
378 | }
379 | }
380 | }
381 |
382 | return results;
383 | },
384 |
385 | /**
386 | * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
387 | */
388 | escapeRegExp : function(string) {
389 | return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
390 | },
391 |
392 | /**
393 | * search for full-text terms in the index
394 | */
395 | performTermsSearch : function(searchterms, excluded, terms, titleterms) {
396 | var docnames = this._index.docnames;
397 | var filenames = this._index.filenames;
398 | var titles = this._index.titles;
399 |
400 | var i, j, file;
401 | var fileMap = {};
402 | var scoreMap = {};
403 | var results = [];
404 |
405 | // perform the search on the required terms
406 | for (i = 0; i < searchterms.length; i++) {
407 | var word = searchterms[i];
408 | var files = [];
409 | var _o = [
410 | {files: terms[word], score: Scorer.term},
411 | {files: titleterms[word], score: Scorer.title}
412 | ];
413 | // add support for partial matches
414 | if (word.length > 2) {
415 | var word_regex = this.escapeRegExp(word);
416 | for (var w in terms) {
417 | if (w.match(word_regex) && !terms[word]) {
418 | _o.push({files: terms[w], score: Scorer.partialTerm})
419 | }
420 | }
421 | for (var w in titleterms) {
422 | if (w.match(word_regex) && !titleterms[word]) {
423 | _o.push({files: titleterms[w], score: Scorer.partialTitle})
424 | }
425 | }
426 | }
427 |
428 | // no match but word was a required one
429 | if ($u.every(_o, function(o){return o.files === undefined;})) {
430 | break;
431 | }
432 | // found search word in contents
433 | $u.each(_o, function(o) {
434 | var _files = o.files;
435 | if (_files === undefined)
436 | return
437 |
438 | if (_files.length === undefined)
439 | _files = [_files];
440 | files = files.concat(_files);
441 |
442 | // set score for the word in each file to Scorer.term
443 | for (j = 0; j < _files.length; j++) {
444 | file = _files[j];
445 | if (!(file in scoreMap))
446 | scoreMap[file] = {};
447 | scoreMap[file][word] = o.score;
448 | }
449 | });
450 |
451 | // create the mapping
452 | for (j = 0; j < files.length; j++) {
453 | file = files[j];
454 | if (file in fileMap && fileMap[file].indexOf(word) === -1)
455 | fileMap[file].push(word);
456 | else
457 | fileMap[file] = [word];
458 | }
459 | }
460 |
461 | // now check if the files don't contain excluded terms
462 | for (file in fileMap) {
463 | var valid = true;
464 |
465 | // check if all requirements are matched
466 | var filteredTermCount = // as search terms with length < 3 are discarded: ignore
467 | searchterms.filter(function(term){return term.length > 2}).length
468 | if (
469 | fileMap[file].length != searchterms.length &&
470 | fileMap[file].length != filteredTermCount
471 | ) continue;
472 |
473 | // ensure that none of the excluded terms is in the search result
474 | for (i = 0; i < excluded.length; i++) {
475 | if (terms[excluded[i]] == file ||
476 | titleterms[excluded[i]] == file ||
477 | $u.contains(terms[excluded[i]] || [], file) ||
478 | $u.contains(titleterms[excluded[i]] || [], file)) {
479 | valid = false;
480 | break;
481 | }
482 | }
483 |
484 | // if we have still a valid result we can add it to the result list
485 | if (valid) {
486 | // select one (max) score for the file.
487 | // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
488 | var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
489 | results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
490 | }
491 | }
492 | return results;
493 | },
494 |
495 | /**
496 | * helper function to return a node containing the
497 | * search summary for a given text. keywords is a list
498 | * of stemmed words, hlwords is the list of normal, unstemmed
499 | * words. the first one is used to find the occurrence, the
500 | * latter for highlighting it.
501 | */
502 | makeSearchSummary : function(htmlText, keywords, hlwords) {
503 | var text = Search.htmlToText(htmlText);
504 | if (text == "") {
505 | return null;
506 | }
507 | var textLower = text.toLowerCase();
508 | var start = 0;
509 | $.each(keywords, function() {
510 | var i = textLower.indexOf(this.toLowerCase());
511 | if (i > -1)
512 | start = i;
513 | });
514 | start = Math.max(start - 120, 0);
515 | var excerpt = ((start > 0) ? '...' : '') +
516 | $.trim(text.substr(start, 240)) +
517 | ((start + 240 - text.length) ? '...' : '');
518 | var rv = $('
').text(excerpt);
519 | $.each(hlwords, function() {
520 | rv = rv.highlightText(this, 'highlighted');
521 | });
522 | return rv;
523 | }
524 | };
525 |
526 | $(document).ready(function() {
527 | Search.init();
528 | });
529 |
--------------------------------------------------------------------------------
/docs/_build/html/_static/underscore.js:
--------------------------------------------------------------------------------
1 | !function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){
2 | // Underscore.js 1.13.1
3 | // https://underscorejs.org
4 | // (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
5 | // Underscore may be freely distributed under the MIT license.
6 | var n="1.13.1",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e":">",'"':""","'":"'","`":"`"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o0?0:u-1;o>=0&&o0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;ao&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);ir?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;ae||void 0===t)return 1;if(t
2 |
3 |
4 |
5 |
9 |
10 |
11 |
12 | clickupython.helpers package — clickupython 0.0.1 documentation
13 |
14 |
15 |
16 |
19 |
20 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
74 |
75 |
76 |
77 |
78 |
79 | clickupython
80 |
81 |
82 |
83 |
84 |
101 |
107 |
108 |
109 |
110 | clickupython.helpers package
116 |
117 |
118 |
119 | Submodules
125 |
126 |
127 |
175 |
176 |
177 |
178 | clickupython.helpers.timefuncs module
184 |
185 |
186 |
190 | clickupython.helpers.timefuncs. fuzzy_time_to_seconds ( text :
200 | any )
204 | →
206 | int
215 |
216 |
217 |
218 | Converts a human readable duration of time into
219 | seconds
220 |
221 | Args: text - a human readable period of time
222 | Returns: seconds of the duration as an int
223 |
224 |
225 |
226 |
227 |
231 | clickupython.helpers.timefuncs. fuzzy_time_to_unix ( text :
241 | str )
251 |
252 |
253 |
254 | Converts a human readable time and date to a Unix
255 | timestamp
256 |
257 | Args: text - a human readable date in string form
258 | Returns: a Unix timestamp
259 |
260 |
261 |
262 |
263 |
264 |
265 | Module contents
271 |
272 |
273 |
274 |
275 |
276 |
290 |
291 |
292 |
293 |
294 |
299 |
300 |
301 |
--------------------------------------------------------------------------------
/docs/_build/html/functions.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 | Functions — clickupython 0.0.1 documentation
12 |
13 |
14 |
17 |
18 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
72 |
73 |
74 |
75 |
76 |
77 | clickupython
78 |
79 |
80 |
81 |
82 |
96 |
102 |
103 |
104 |
105 | Functions
111 |
112 |
113 | clickupython is a Python client for the ClickUp API and can
114 | be used to interact with the ClickUp API in your projects.
115 | ClickUp’s API exposes the entire ClickUp infrastructure via
116 | a standardized programmatic interface. Using ClickUp’s API,
117 | you can do just about anything you can do on clickup.com.
118 |
119 |
120 |
121 |
122 |
136 |
137 |
138 |
139 |
140 |
145 |
146 |
147 |
--------------------------------------------------------------------------------
/docs/_build/html/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 | clickupython — clickupython 0.0.1 documentation
12 |
13 |
14 |
17 |
18 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
106 |
107 |
108 |
109 |
110 |
111 | clickupython
112 |
113 |
114 |
115 |
116 |
128 |
134 |
135 |
136 |
137 | clickupython
143 |
144 |
145 | clickupython is a Python client for the ClickUp API and can
146 | be used to interact with the ClickUp API in your projects.
147 | ClickUp’s API exposes the entire ClickUp infrastructure via
148 | a standardized programmatic interface. Using ClickUp’s API,
149 | you can do just about anything you can do on clickup.com.
150 |
151 |
152 |
153 | Getting started
159 |
160 | To start, install clickupython via pip.
161 |
162 |
163 |
$ pip install clickupython
164 |
165 |
166 |
167 |
168 |
169 |
170 | Authentication
176 |
177 |
178 | There are two ways to authenticate with ClickUp API 2.0,
179 | with a personal token or creating an application and
180 | authenticating with an OAuth2 flow.
181 |
182 |
183 |
Note
184 |
185 | IMPORTANT - If you are creating an application for
186 | other’s to use, it is highly recommended that you use
187 | the OAuth2 flow.
188 |
189 |
190 |
191 |
192 | Method 1: API Key (Fastest)
198 |
199 |
200 | Sign in to ClickUp and navigate to Settings > Apps.
201 | There you will see a an API token. Copy this and save
202 | it. You will use this to authenticate the clickupython
203 | client with ClickUp’s API.
204 |
205 |
206 |
207 |
$ from clickupython import ClickUpClient
208 |
209 | API_KEY = 'YOUR API KEY'
210 | client = ClickUpClient(API_KEY)
211 |
212 | # Example request | Creating a task in a list
213 | c = client.ClickUpClient(API_KEY)
214 | task = c.create_task("list_id", name="Test task", due_date="march 2 2021")
215 |
216 | if task:
217 | print(task.id)
218 |
219 |
220 |
221 |
222 |
223 | Contents:
224 |
225 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
401 |
402 |
403 |
404 |
405 |
410 |
411 |
412 |
--------------------------------------------------------------------------------
/docs/_build/html/modules.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
12 | clickupython Overview — clickupython 0.0.1 documentation
13 |
14 |
15 |
16 |
19 |
20 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
74 |
75 |
76 |
77 |
78 |
79 | clickupython
80 |
81 |
82 |
83 |
84 |
98 |
104 |
105 |
106 |
107 | clickupython Overview
113 |
114 |
206 |
207 |
208 |
209 |
223 |
224 |
225 |
226 |
227 |
232 |
233 |
234 |
--------------------------------------------------------------------------------
/docs/_build/html/objects.inv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/docs/_build/html/objects.inv
--------------------------------------------------------------------------------
/docs/_build/html/py-modindex.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Python Module Index — clickupython 0.0.1 documentation
7 |
8 |
9 |
12 |
13 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
67 |
68 |
69 |
70 |
71 |
72 | clickupython
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | »
81 |
82 | Python Module Index
83 |
84 |
85 |
86 |
87 |
93 |
94 |
Python Module Index
95 |
96 |
99 |
100 |
212 |
213 |
214 |
228 |
229 |
230 |
231 |
232 |
237 |
238 |
239 |
--------------------------------------------------------------------------------
/docs/_build/html/search.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Search — clickupython 0.0.1 documentation
7 |
8 |
9 |
10 |
13 |
14 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
70 |
71 |
72 |
73 |
74 |
75 | clickupython
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 | »
84 |
85 | Search
86 |
87 |
88 |
89 |
90 |
96 |
97 |
98 |
99 |
100 | Please activate JavaScript to enable the search
101 | functionality.
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
123 |
124 |
125 |
126 |
127 |
132 |
137 |
138 |
139 |
140 |
141 |
--------------------------------------------------------------------------------
/docs/clickupy.helpers.rst:
--------------------------------------------------------------------------------
1 | clickupython.helpers package
2 | ========================
3 |
4 | Submodules
5 | ----------
6 |
7 | clickupython.helpers.formatting module
8 | ----------------------------------
9 |
10 | .. automodule:: clickupython.helpers.formatting
11 | :members:
12 | :undoc-members:
13 | :show-inheritance:
14 |
15 | clickupython.helpers.timefuncs module
16 | ---------------------------------
17 |
18 | .. automodule:: clickupython.helpers.timefuncs
19 | :members:
20 | :undoc-members:
21 | :show-inheritance:
22 |
23 | Module contents
24 | ---------------
25 |
26 | .. automodule:: clickupython.helpers
27 | :members:
28 | :undoc-members:
29 | :show-inheritance:
30 |
--------------------------------------------------------------------------------
/docs/clickupy.rst:
--------------------------------------------------------------------------------
1 | clickupython package
2 | ================
3 |
4 | Subpackages
5 | -----------
6 |
7 | .. toctree::
8 | :maxdepth: 4
9 |
10 | clickupython.helpers
11 |
12 | Submodules
13 | ----------
14 |
15 | clickupython.client module
16 | ----------------------
17 |
18 | .. automodule:: clickupython.client
19 | :members:
20 | :undoc-members:
21 | :show-inheritance:
22 |
23 | clickupython.exceptions module
24 | --------------------------
25 |
26 | .. automodule:: clickupython.exceptions
27 | :members:
28 | :undoc-members:
29 | :show-inheritance:
30 |
31 | clickupython.models module
32 | ----------------------
33 |
34 | .. automodule:: clickupython.models
35 | :members:
36 | :undoc-members:
37 | :show-inheritance:
38 |
39 | Module contents
40 | ---------------
41 |
42 | .. automodule:: clickupython
43 | :members:
44 | :undoc-members:
45 | :show-inheritance:
46 |
--------------------------------------------------------------------------------
/docs/conf.py:
--------------------------------------------------------------------------------
1 | # Configuration file for the Sphinx documentation builder.
2 | #
3 | # This file only contains a selection of the most common options. For a full
4 | # list see the documentation:
5 | # https://www.sphinx-doc.org/en/master/usage/configuration.html
6 |
7 | # -- Path setup --------------------------------------------------------------
8 |
9 | # If extensions (or modules to document with autodoc) are in another directory,
10 | # add these directories to sys.path here. If the directory is relative to the
11 | # documentation root, use os.path.abspath to make it absolute, like shown here.
12 | #
13 | import os
14 | import sys
15 |
16 | sys.path.insert(0, os.path.abspath(".."))
17 |
18 |
19 | # -- Project information -----------------------------------------------------
20 |
21 | project = "clickupython"
22 | copyright = "2021, Zach Johnson & Robert Mullis"
23 | author = "Zach Johnson & Robert Mullis"
24 |
25 | # The full version, including alpha/beta/rc tags
26 | release = "0.0.1"
27 |
28 |
29 | # -- General configuration ---------------------------------------------------
30 |
31 | # Add any Sphinx extension module names here, as strings. They can be
32 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
33 | # ones.
34 | extensions = ["sphinx.ext.autodoc"]
35 |
36 | # Add any paths that contain templates here, relative to this directory.
37 | templates_path = ["_templates"]
38 |
39 | # List of patterns, relative to source directory, that match files and
40 | # directories to ignore when looking for source files.
41 | # This pattern also affects html_static_path and html_extra_path.
42 | exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
43 |
44 |
45 | # -- Options for HTML output -------------------------------------------------
46 |
47 | # The theme to use for HTML and HTML Help pages. See the documentation for
48 | # a list of builtin themes.
49 | #
50 | html_theme = "sphinx_rtd_theme"
51 |
52 | # Add any paths that contain custom static files (such as style sheets) here,
53 | # relative to this directory. They are copied after the builtin static files,
54 | # so a file named "default.css" will overwrite the builtin "default.css".
55 | html_static_path = ["_static"]
56 |
--------------------------------------------------------------------------------
/docs/functions.rst:
--------------------------------------------------------------------------------
1 | Functions
2 | ====================================
3 | clickupython is a Python client for the ClickUp API and can be used to interact with the ClickUp API in your projects. ClickUp's API exposes the entire ClickUp infrastructure via a standardized programmatic interface. Using ClickUp's API, you can do just about anything you can do on clickup.com.
4 |
5 |
6 | ================ ============================================================
7 | Directive Name Description (Docutils version added to, in [brackets])
8 | ================ ============================================================
9 | ``get_task(task_id)`` Specific admonition; also "caution", "danger",
10 | admonition Generic titled admonition: ``.. admonition:: By The Way``
11 | image ``.. image:: picture.png``; many options possible
12 | figure Like "image", but with optional caption and legend
13 | topic ``.. topic:: Title``; like a mini section
14 | sidebar ``.. sidebar:: Title``; like a mini parallel document
15 | parsed-literal A literal block with parsed inline markup
16 | rubric ``.. rubric:: Informal Heading``
17 | epigraph Block quote with class="epigraph"
18 | highlights Block quote with class="highlights"
19 | pull-quote Block quote with class="pull-quote"
20 | compound Compound paragraphs [0.3.6]
21 | container Generic block-level container element [0.3.10]
22 | table Create a titled table [0.3.1]
23 | list-table Create a table from a uniform two-level bullet list [0.3.8]
24 | csv-table Create a table from CSV data [0.3.4]
25 | contents Generate a table of contents
26 | sectnum Automatically number sections, subsections, etc.
27 | header, footer Create document decorations [0.3.8]
28 | target-notes Create an explicit footnote for each external target
29 | math Mathematical notation (input in LaTeX format)
30 | meta HTML-specific metadata
31 | include Read an external reST file as if it were inline
32 | raw Non-reST data passed untouched to the Writer
33 | replace Replacement text for substitution definitions
34 | unicode Unicode character code conversion for substitution defs
35 | date Generates today's date; for substitution defs
36 | class Set a "class" attribute on the next element
37 | role Create a custom interpreted text role [0.3.2]
38 | default-role Set the default interpreted text role [0.3.10]
39 | title Set the metadata document title [0.3.10]
40 | ================ ============================================================
--------------------------------------------------------------------------------
/docs/index.rst:
--------------------------------------------------------------------------------
1 | .. clickupython documentation master file, created by
2 | sphinx-quickstart on Thu Sep 16 19:12:54 2021.
3 | You can adapt this file completely to your liking, but it should at least
4 | contain the root `toctree` directive.
5 |
6 | .. meta::
7 | :description: clickupython: A Python client for the ClickUp API
8 | :keywords: clickup, documentation, clickup api, python, clickupython
9 |
10 |
11 | clickupython
12 | ====================================
13 | clickupython is a Python client for the ClickUp API and can be used to interact with the ClickUp API in your projects. ClickUp's API exposes the entire ClickUp infrastructure via a standardized programmatic interface. Using ClickUp's API, you can do just about anything you can do on clickup.com.
14 |
15 |
16 | Getting started
17 | *****
18 | To start, install clickupython via pip.
19 |
20 | ::
21 |
22 | $ pip install clickupython
23 |
24 |
25 | Authentication
26 | *****
27 | There are two ways to authenticate with ClickUp API 2.0, with a personal token or creating an application and authenticating with an OAuth2 flow.
28 |
29 | .. note:: IMPORTANT - If you are creating an application for other's to use, it is
30 | highly recommended that you use the OAuth2 flow.
31 |
32 | Method 1: API Key (Fastest)
33 | ---------------
34 | Sign in to ClickUp and navigate to Settings > Apps.
35 | There you will see a an API token. Copy this and save it. You will use this to authenticate the clickupython client with ClickUp's API.
36 |
37 | ::
38 |
39 | $ from clickupython import client
40 |
41 | API_KEY = 'YOUR API KEY'
42 | client = ClickUpClient(API_KEY)
43 |
44 | # Example request | Creating a task in a list
45 | c = client.ClickUpClient(API_KEY)
46 | task = c.create_task("list_id", name="Test task", due_date="march 2 2021")
47 |
48 | if task:
49 | print(task.id)
50 |
51 |
52 |
53 |
54 | .. toctree::
55 | :maxdepth: 2
56 | :caption: Contents:
57 |
58 | index
59 | tasks
60 | lists
61 |
62 |
--------------------------------------------------------------------------------
/docs/lists.rst:
--------------------------------------------------------------------------------
1 | Lists
2 | ====================================
3 |
4 | .. autoclass:: clickupython.models.SingleList
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 | |
9 | |
10 | .. raw:: html
11 |
12 |
13 |
14 | Creating a List
15 | ---------------
16 | Here's how to create a new ClickupClient instance and validate a personal API key with the ClickUp API and create a new task with a
17 | due date. When creating a new task, the only required arguments are list_id and name. Name will be the title of your list on ClickUp.
18 |
19 | Example::
20 |
21 | c = client.ClickUpClient("YOUR_API_KEY")
22 | t = c.create_task("LIST_ID", name="Test Task", due_date="march 2 2021")
23 |
24 |
25 | Fetching a Single Task
26 | ---------------
27 | Example: Lookup via ClickUpClient::
28 |
29 | c = client.ClickUpClient("YOUR_API_KEY")
30 | task = c.get_task(task_id)
31 |
32 | print(task.name)
33 |
34 |
35 | Fetching all Tasks from a List
36 | ---------------
37 | You can quickly get all tasks for a given list via the list id:
38 |
39 | Example::
40 |
41 | c = client.ClickUpClient("YOUR_API_KEY")
42 | tasks = c.get_tasks("list_id")
43 |
44 |
45 |
46 | Filtering Tasks
47 | ---------------
48 | Example::
49 |
50 | c = client.ClickUpClient("YOUR_API_KEY")
51 | tasks = c.get_tasks("list_id", date_updated_gt="august 1 2021",
52 | assignees=["4523","4562","5871"], include_closed=True)
53 |
54 |
55 | This example will return all tasks that have been updated after August 1st, 2021 and are assigned to users with the ids of 4523, 4562, and 5871.
56 | This request will also include tasks that have been marked as "closed."
57 |
58 | Example::
59 |
60 | c = client.ClickUpClient("YOUR_API_KEY")
61 | tasks = c.get_tasks("list_id", subtasks=True,
62 | statuses=["todo", "in progress"])
63 |
64 | This example will return all tasks and subtasks that are marked as "Todo" and "In Progress". These values can be changed depending on the statuses you have available in your list.
65 |
66 | You can extend the calls above by passing any of the arguments to the ``get_tasks`` method. You can use as many or as few as you would like.
67 |
68 |
69 |
70 | Working With Tasks
71 | ---------------
72 | Now that you have a list of ``Task`` objects you can access the attributes of each task in a number of ways:
73 |
74 | Example: Loop::
75 |
76 | c = client.ClickUpClient("YOUR_API_KEY")
77 | tasks = c.get_tasks(list_id)
78 |
79 | for task in tasks:
80 | print(task.name)
81 |
82 |
83 | Example: Direct Access via an Index::
84 |
85 | c = client.ClickUpClient("YOUR_API_KEY")
86 | tasks = c.get_tasks(list_id)
87 |
88 | print(tasks[0].name])
89 |
90 |
91 | Getting Tasks Associated with a List Object
92 | ---------------
93 | Certain calls can be made directly from a parent object. We can access a single ``Task`` or all ``Tasks`` associated with a ``List`` with the following
94 | methods.
95 |
96 | .. note:: IMPORTANT - When calling a method from a parent object you must pass in a reference to the ClickUpClient object as the first argument.
97 |
98 | Example: Lookup Tasks via a List Object::
99 |
100 | c = client.ClickUpClient("YOUR_API_KEY")
101 | list = c.get_list(list_id)
102 | tasks = list.get_tasks(c)
103 | filtered_tasks = list.get_tasks(c, subtasks=True, statuses=["todo", "in progress"])
104 | task = list.get_task(c, task_id)
105 | |
106 | |
107 |
108 | .. raw:: html
109 |
110 |
111 |
112 |
113 | List Methods
114 | ---------------
115 |
116 | get_list()
117 | ++++++++++++
118 | .. automethod:: clickupython.client.ClickUpClient.get_list
119 | |
120 | |
121 | .. raw:: html
122 |
123 |
124 | get_lists()
125 | ++++++++++++
126 | .. automethod:: clickupython.client.ClickUpClient.get_lists
127 | |
128 | |
129 | .. raw:: html
130 |
131 |
132 | create_list()
133 | ++++++++++++
134 | .. automethod:: clickupython.client.ClickUpClient.create_list
135 | |
136 | |
137 | .. raw:: html
138 |
139 |
140 |
141 |
142 |
143 |
--------------------------------------------------------------------------------
/docs/modules.rst:
--------------------------------------------------------------------------------
1 | clickupython Overview
2 | ========
3 |
4 | .. toctree::
5 | :maxdepth: 4
6 |
7 | clickupython
8 |
--------------------------------------------------------------------------------
/docs/tasks.rst:
--------------------------------------------------------------------------------
1 | Tasks
2 | ====================================
3 |
4 | .. autoclass:: clickupython.models.Task
5 | :members:
6 | :undoc-members:
7 | :show-inheritance:
8 | |
9 | |
10 | .. raw:: html
11 |
12 |
13 |
14 | Creating a Task
15 | ---------------
16 | Here's how to create a new ClickupClient instance and validate a personal API key with the ClickUp API and create a new task with a
17 | due date. When creating a new task, the only required arguments are list_id and name. Name will be the title of your list on ClickUp.
18 |
19 | Example::
20 |
21 | c = client.ClickUpClient("YOUR_API_KEY")
22 | t = c.create_task("LIST_ID", name="Test Task", due_date="march 2 2021")
23 |
24 |
25 | Fetching a Single Task
26 | ---------------
27 | Example: Lookup via ClickUpClient::
28 |
29 | c = client.ClickUpClient("YOUR_API_KEY")
30 | task = c.get_task(task_id)
31 |
32 | print(task.name)
33 |
34 |
35 | Fetching all Tasks from a List
36 | ---------------
37 | You can quickly get all tasks for a given list via the list id:
38 |
39 | Example::
40 |
41 | c = client.ClickUpClient("YOUR_API_KEY")
42 | tasks = c.get_tasks("list_id")
43 |
44 |
45 |
46 | Filtering Tasks
47 | ---------------
48 | Example::
49 |
50 | c = client.ClickUpClient("YOUR_API_KEY")
51 | tasks = c.get_tasks("list_id", date_updated_gt="august 1 2021",
52 | assignees=["4523","4562","5871"], include_closed=True)
53 |
54 |
55 | This example will return all tasks that have been updated after August 1st, 2021 and are assigned to users with the ids of 4523, 4562, and 5871.
56 | This request will also include tasks that have been marked as "closed."
57 |
58 | Example::
59 |
60 | c = client.ClickUpClient("YOUR_API_KEY")
61 | tasks = c.get_tasks("list_id", subtasks=True,
62 | statuses=["todo", "in progress"])
63 |
64 | This example will return all tasks and subtasks that are marked as "Todo" and "In Progress". These values can be changed depending on the statuses you have available in your list.
65 |
66 | You can extend the calls above by passing any of the arguments to the ``get_tasks`` method. You can use as many or as few as you would like.
67 |
68 |
69 |
70 | Working With Tasks
71 | ---------------
72 | Now that you have a list of ``Task`` objects you can access the attributes of each task in a number of ways:
73 |
74 | Example: Loop::
75 |
76 | c = client.ClickUpClient("YOUR_API_KEY")
77 | tasks = c.get_tasks(list_id)
78 |
79 | for task in tasks:
80 | print(task.name)
81 |
82 |
83 | Example: Direct Access via an Index::
84 |
85 | c = client.ClickUpClient("YOUR_API_KEY")
86 | tasks = c.get_tasks(list_id)
87 |
88 | print(tasks[0].name])
89 |
90 |
91 | Getting Tasks Associated with a List Object
92 | ---------------
93 | Certain calls can be made directly from a parent object. We can access a single ``Task`` or all ``Tasks`` associated with a ``List`` with the following
94 | methods.
95 |
96 | .. note:: IMPORTANT - When calling a method from a parent object you must pass in a reference to the ClickUpClient object as the first argument.
97 |
98 | Example: Lookup Tasks via a List Object::
99 |
100 | c = client.ClickUpClient("YOUR_API_KEY")
101 | list = c.get_list(list_id)
102 | tasks = list.get_tasks(c)
103 | filtered_tasks = list.get_tasks(c, subtasks=True, statuses=["todo", "in progress"])
104 | task = list.get_task(c, task_id)
105 | |
106 | |
107 |
108 | .. raw:: html
109 |
110 |
111 |
112 | Task Methods
113 | ---------------
114 |
115 | get_tasks()
116 | ++++++++++++
117 | .. automethod:: clickupython.client.ClickUpClient.get_tasks
118 | |
119 | |
120 |
121 | .. raw:: html
122 |
123 |
124 | get_task()
125 | ++++++++++++
126 | .. automethod:: clickupython.client.ClickUpClient.get_task
127 | |
128 |
129 | .. raw:: html
130 |
131 |
132 | create_task()
133 | ++++++++++++
134 | .. automethod:: clickupython.client.ClickUpClient.create_task
135 | |
136 | |
137 | .. raw:: html
138 |
139 |
140 | update_task()
141 | ++++++++++++
142 | .. automethod:: clickupython.client.ClickUpClient.update_task
143 | |
144 | |
145 | .. raw:: html
146 |
147 |
148 |
149 | delete_task()
150 | ++++++++++++
151 | .. automethod:: clickupython.client.ClickUpClient.delete_task
152 | |
153 | |
154 | .. raw:: html
155 |
156 |
157 |
158 | get_task_comments()
159 | ++++++++++++
160 | .. automethod:: clickupython.client.ClickUpClient.get_task_comments
161 | |
162 | |
163 | .. raw:: html
164 |
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/examples/examples.py:
--------------------------------------------------------------------------------
1 | from clickupython import client
2 |
3 | """
4 | Here's how to validate a personal API key and create a new task with a
5 | due date. When creating a new task, the only required arguments are list_id and name.
6 | Name will be the title of your list on ClickUp.
7 | """
8 |
9 |
10 | c = client.ClickUpClient("YOUR_API_KEY")
11 | t = c.create_task("LIST_ID", name="Test Task", due_date="march 2 2021")
12 |
13 |
14 | """
15 | Here's two ways to get all the comments for a given task ID.
16 | """
17 |
18 | # Example 1
19 | c = client.ClickUpClient("YOUR_API_KEY")
20 | comments = c.get_task_comments("TASK_ID")
21 |
22 | for comment in comments:
23 | print(comment.user.id)
24 | print(comment.comment_text)
25 |
26 | # Example 2
27 | c = client.ClickUpClient("YOUR_API_KEY")
28 | task = c.get_task("TASK_ID")
29 | comments = task.get_comments(c)
30 |
31 | for comment in comments:
32 | print(comment.comment_text)
33 |
34 |
35 | """
36 | Here how to get all teams on an account. Teams is the legacy term for what are now called Workspaces in ClickUp.
37 | For compatibility, the term team is still used in the API. This is NOT the new "Teams" feature which represents a group of users.
38 | """
39 | c = client.ClickUpClient("YOUR_API_KEY")
40 | teams = c.get_teams()
41 | for team in teams:
42 | print(team.name)
43 |
44 | """
45 | Here's two ways to create a checklist and add checklist items to it.
46 | """
47 |
48 | # Example 1
49 | c = client.ClickUpClient("YOUR_API_KEY")
50 | checklist = c.create_checklist("TASK_ID", "Test Checklist")
51 | checklist_with_item = c.create_checklist_item(checklist.id, "Test Checklist item")
52 |
53 | # Example 2
54 | c = client.ClickUpClient("YOUR_API_KEY")
55 | checklist = c.create_checklist("1gu4f5g", "Test Checklist")
56 |
57 | item_list = ["Item1", "Item2", "Item3"]
58 |
59 | for item in item_list:
60 | checklist.add_item(c, item)
61 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/requirements.txt
--------------------------------------------------------------------------------
/setup.cfg:
--------------------------------------------------------------------------------
1 | [metadata]
2 | version = 1.0.4
3 | license_files = LICENSE
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | import setuptools
2 | from typing import List
3 | import distutils.text_file
4 | from pathlib import Path
5 |
6 |
7 | with open("README.md", "r", encoding="utf-8") as fh:
8 | long_description = fh.read()
9 |
10 |
11 | def _parse_requirements(filename: str) -> List[str]:
12 | """Return requirements from requirements file."""
13 | # Ref: https://stackoverflow.com/a/42033122/
14 | return distutils.text_file.TextFile(
15 | filename=str(Path(__file__).with_name(filename))
16 | ).readlines()
17 |
18 |
19 | setuptools.setup(
20 | name="clickupython",
21 | author="Zach Johnson & Robert Mullis",
22 | author_email="imzachjohnson@gmail.com",
23 | description="clickupython: A Python client for the ClickUp API",
24 | keywords="clickup, clickup api, python, clickupython",
25 | long_description=long_description,
26 | long_description_content_type="text/markdown",
27 | url="https://github.com/Imzachjohnson/clickupython",
28 | project_urls={
29 | "Documentation": "https://clickupython.readthedocs.io/en/latest/",
30 | "Bug Reports": "https://github.com/Imzachjohnson/clickupython/issues",
31 | "Source Code": "https://github.com/Imzachjohnson/clickupython",
32 | # 'Funding': '',
33 | # 'Say Thanks!': '',
34 | },
35 | packages=setuptools.find_packages(),
36 | python_requires=">=3.6",
37 | install_requires=[
38 | "pydantic==1.8.2",
39 | "typing-extensions==3.10.0.2",
40 | "word2number==1.1",
41 | "timefhuman==0.0.5",
42 | "pendulum==2.1.2",
43 | "typing-extensions==3.10.0.2",
44 | "setuptools",
45 | ],
46 | # extras_require='requirements.txt',
47 | # entry_points={
48 | # 'console_scripts': [ # This can provide executable scripts
49 | # 'run=examplepy:main',
50 | # You can execute `run` in bash to run `main()` in src/examplepy/__init__.py
51 | # ],
52 | # },
53 | )
54 |
--------------------------------------------------------------------------------
/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Imzachjohnson/clickupython/c08b4ad9e4ff81d10e3ee42c0e7249acb51c4ab4/tests/__init__.py
--------------------------------------------------------------------------------
/tests/assets/Repositories _ Documentation _ Poetry - Python dependency management and packaging made easy_files/logo-origami.svg:
--------------------------------------------------------------------------------
1 | logo-origami
--------------------------------------------------------------------------------
/tests/assets/Repositories _ Documentation _ Poetry - Python dependency management and packaging made easy_files/plausible.js.download:
--------------------------------------------------------------------------------
1 | !function(){"use strict";var t,a=window.location,o=window.document,e=window.localStorage,r=o.currentScript,s=r.getAttribute("data-api")||new URL(r.src).origin+"/api/event",l=e&&e.plausible_ignore;function w(t){console.warn("Ignoring Event: "+t)}function i(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return w("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==l)return w("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=r.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}function n(){t!==a.pathname&&(t=a.pathname,i("pageview"))}var p,d=window.history;d.pushState&&(p=d.pushState,d.pushState=function(){p.apply(this,arguments),n()},window.addEventListener("popstate",n));var u=window.plausible&&window.plausible.q||[];window.plausible=i;for(var c=0;c