├── .gitignore ├── .pre-commit-config.yaml ├── LICENSE ├── README.md ├── Taskfile.yml ├── dbt_prql └── patch.py ├── poetry.lock ├── pyproject.toml ├── setup.cfg ├── test.sh ├── tests ├── .gitignore ├── README.md ├── dbt_test_project │ ├── .gitignore │ ├── dbt_project.yml │ └── models │ │ ├── src_sources.yml │ │ └── test_model_1.sql ├── poetry.lock ├── profiles.yml └── pyproject.toml └── zzz_dbt_prql.pth /.gitignore: -------------------------------------------------------------------------------- 1 | *.py[cod] 2 | __pycache__ 3 | 4 | # example caches from Hypothesis 5 | .hypothesis/ 6 | 7 | # temp files from docs build 8 | doc/auto_gallery 9 | doc/example.nc 10 | doc/savefig 11 | 12 | # C extensions 13 | *.so 14 | 15 | # Packages 16 | *.egg 17 | *.egg-info 18 | .eggs 19 | dist 20 | build 21 | eggs 22 | parts 23 | bin 24 | var 25 | sdist 26 | develop-eggs 27 | .installed.cfg 28 | lib 29 | lib64 30 | 31 | # Installer logs 32 | pip-log.txt 33 | 34 | # Unit test / coverage reports 35 | .coverage 36 | .coverage.* 37 | .tox 38 | nosetests.xml 39 | .cache 40 | .dmypy.json 41 | .mypy_cache 42 | .ropeproject/ 43 | .tags* 44 | .testmon* 45 | .tmontmp/ 46 | .pytest_cache 47 | dask-worker-space/ 48 | 49 | # asv environments 50 | .asv 51 | 52 | # Translations 53 | *.mo 54 | 55 | # Mr Developer 56 | .mr.developer.cfg 57 | .project 58 | .pydevproject 59 | 60 | # IDEs 61 | .idea 62 | *.swp 63 | .DS_Store 64 | .vscode/ 65 | 66 | # xarray specific 67 | doc/_build 68 | doc/generated 69 | xarray/tests/data/*.grib.*.idx 70 | 71 | # Sync tools 72 | Icon* 73 | 74 | .ipynb_checkpoints 75 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | # @max-sixty's standard set 2 | repos: 3 | - repo: https://github.com/PyCQA/autoflake 4 | rev: "v2.3.1" 5 | hooks: 6 | - id: autoflake 7 | - repo: https://github.com/PyCQA/isort 8 | rev: "6.0.1" 9 | hooks: 10 | - id: isort 11 | - repo: https://github.com/PyCQA/flake8 12 | rev: "7.2.0" 13 | hooks: 14 | - id: flake8 15 | additional_dependencies: [pep8-naming==0.12.1] 16 | - repo: https://github.com/pre-commit/mirrors-mypy 17 | rev: v1.16.0 18 | hooks: 19 | - id: mypy 20 | - repo: https://github.com/keewis/blackdoc 21 | rev: v0.3.9 22 | hooks: 23 | - id: blackdoc 24 | - repo: https://github.com/asottile/pyupgrade 25 | rev: v3.20.0 26 | hooks: 27 | - id: pyupgrade 28 | args: ["--py37-plus"] 29 | # black should go at the end, since it's the most likely to change others' changes. 30 | - repo: https://github.com/psf/black 31 | rev: "25.1.0" 32 | hooks: 33 | - id: black 34 | # This doesn't seem to work from pre-commit.ci; which may not have internet access 35 | # - repo: https://github.com/ComPWA/mirrors-markdown-link-check 36 | # rev: v3.8.7 37 | # hooks: 38 | # - id: markdown-link-check 39 | # files: \.md$ 40 | - repo: https://github.com/pre-commit/pre-commit-hooks 41 | rev: v5.0.0 42 | hooks: 43 | - id: trailing-whitespace 44 | - id: end-of-file-fixer 45 | - id: check-yaml 46 | - id: debug-statements 47 | - id: mixed-line-ending 48 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, and 10 | distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by the copyright 13 | owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all other entities 16 | that control, are controlled by, or are under common control with that entity. 17 | For the purposes of this definition, "control" means (i) the power, direct or 18 | indirect, to cause the direction or management of such entity, whether by 19 | contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the 20 | outstanding shares, or (iii) beneficial ownership of such entity. 21 | 22 | "You" (or "Your") shall mean an individual or Legal Entity exercising 23 | permissions granted by this License. 24 | 25 | "Source" form shall mean the preferred form for making modifications, including 26 | but not limited to software source code, documentation source, and configuration 27 | files. 28 | 29 | "Object" form shall mean any form resulting from mechanical transformation or 30 | translation of a Source form, including but not limited to compiled object code, 31 | generated documentation, and conversions to other media types. 32 | 33 | "Work" shall mean the work of authorship, whether in Source or Object form, made 34 | available under the License, as indicated by a copyright notice that is included 35 | in or attached to the work (an example is provided in the Appendix below). 36 | 37 | "Derivative Works" shall mean any work, whether in Source or Object form, that 38 | is based on (or derived from) the Work and for which the editorial revisions, 39 | annotations, elaborations, or other modifications represent, as a whole, an 40 | original work of authorship. For the purposes of this License, Derivative Works 41 | shall not include works that remain separable from, or merely link (or bind by 42 | name) to the interfaces of, the Work and Derivative Works thereof. 43 | 44 | "Contribution" shall mean any work of authorship, including the original version 45 | of the Work and any modifications or additions to that Work or Derivative Works 46 | thereof, that is intentionally submitted to Licensor for inclusion in the Work 47 | by the copyright owner or by an individual or Legal Entity authorized to submit 48 | on behalf of the copyright owner. For the purposes of this definition, 49 | "submitted" means any form of electronic, verbal, or written communication sent 50 | to the Licensor or its representatives, including but not limited to 51 | communication on electronic mailing lists, source code control systems, and 52 | issue tracking systems that are managed by, or on behalf of, the Licensor for 53 | the purpose of discussing and improving the Work, but excluding communication 54 | that is conspicuously marked or otherwise designated in writing by the copyright 55 | owner as "Not a Contribution." 56 | 57 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf 58 | of whom a Contribution has been received by Licensor and subsequently 59 | incorporated within the Work. 60 | 61 | 2. Grant of Copyright License. 62 | 63 | Subject to the terms and conditions of this License, each Contributor hereby 64 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 65 | irrevocable copyright license to reproduce, prepare Derivative Works of, 66 | publicly display, publicly perform, sublicense, and distribute the Work and such 67 | Derivative Works in Source or Object form. 68 | 69 | 3. Grant of Patent License. 70 | 71 | Subject to the terms and conditions of this License, each Contributor hereby 72 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 73 | irrevocable (except as stated in this section) patent license to make, have 74 | made, use, offer to sell, sell, import, and otherwise transfer the Work, where 75 | such license applies only to those patent claims licensable by such Contributor 76 | that are necessarily infringed by their Contribution(s) alone or by combination 77 | of their Contribution(s) with the Work to which such Contribution(s) was 78 | submitted. If You institute patent litigation against any entity (including a 79 | cross-claim or counterclaim in a lawsuit) alleging that the Work or a 80 | Contribution incorporated within the Work constitutes direct or contributory 81 | patent infringement, then any patent licenses granted to You under this License 82 | for that Work shall terminate as of the date such litigation is filed. 83 | 84 | 4. Redistribution. 85 | 86 | You may reproduce and distribute copies of the Work or Derivative Works thereof 87 | in any medium, with or without modifications, and in Source or Object form, 88 | provided that You meet the following conditions: 89 | 90 | You must give any other recipients of the Work or Derivative Works a copy of 91 | this License; and 92 | You must cause any modified files to carry prominent notices stating that You 93 | changed the files; and 94 | You must retain, in the Source form of any Derivative Works that You distribute, 95 | all copyright, patent, trademark, and attribution notices from the Source form 96 | of the Work, excluding those notices that do not pertain to any part of the 97 | Derivative Works; and 98 | If the Work includes a "NOTICE" text file as part of its distribution, then any 99 | Derivative Works that You distribute must include a readable copy of the 100 | attribution notices contained within such NOTICE file, excluding those notices 101 | that do not pertain to any part of the Derivative Works, in at least one of the 102 | following places: within a NOTICE text file distributed as part of the 103 | Derivative Works; within the Source form or documentation, if provided along 104 | with the Derivative Works; or, within a display generated by the Derivative 105 | Works, if and wherever such third-party notices normally appear. The contents of 106 | the NOTICE file are for informational purposes only and do not modify the 107 | License. You may add Your own attribution notices within Derivative Works that 108 | You distribute, alongside or as an addendum to the NOTICE text from the Work, 109 | provided that such additional attribution notices cannot be construed as 110 | modifying the License. 111 | You may add Your own copyright statement to Your modifications and may provide 112 | additional or different license terms and conditions for use, reproduction, or 113 | distribution of Your modifications, or for any such Derivative Works as a whole, 114 | provided Your use, reproduction, and distribution of the Work otherwise complies 115 | with the conditions stated in this License. 116 | 117 | 5. Submission of Contributions. 118 | 119 | Unless You explicitly state otherwise, any Contribution intentionally submitted 120 | for inclusion in the Work by You to the Licensor shall be under the terms and 121 | conditions of this License, without any additional terms or conditions. 122 | Notwithstanding the above, nothing herein shall supersede or modify the terms of 123 | any separate license agreement you may have executed with Licensor regarding 124 | such Contributions. 125 | 126 | 6. Trademarks. 127 | 128 | This License does not grant permission to use the trade names, trademarks, 129 | service marks, or product names of the Licensor, except as required for 130 | reasonable and customary use in describing the origin of the Work and 131 | reproducing the content of the NOTICE file. 132 | 133 | 7. Disclaimer of Warranty. 134 | 135 | Unless required by applicable law or agreed to in writing, Licensor provides the 136 | Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, 137 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, 138 | including, without limitation, any warranties or conditions of TITLE, 139 | NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are 140 | solely responsible for determining the appropriateness of using or 141 | redistributing the Work and assume any risks associated with Your exercise of 142 | permissions under this License. 143 | 144 | 8. Limitation of Liability. 145 | 146 | In no event and under no legal theory, whether in tort (including negligence), 147 | contract, or otherwise, unless required by applicable law (such as deliberate 148 | and grossly negligent acts) or agreed to in writing, shall any Contributor be 149 | liable to You for damages, including any direct, indirect, special, incidental, 150 | or consequential damages of any character arising as a result of this License or 151 | out of the use or inability to use the Work (including but not limited to 152 | damages for loss of goodwill, work stoppage, computer failure or malfunction, or 153 | any and all other commercial damages or losses), even if such Contributor has 154 | been advised of the possibility of such damages. 155 | 156 | 9. Accepting Warranty or Additional Liability. 157 | 158 | While redistributing the Work or Derivative Works thereof, You may choose to 159 | offer, and charge a fee for, acceptance of support, warranty, indemnity, or 160 | other liability obligations and/or rights consistent with this License. However, 161 | in accepting such obligations, You may act only on Your own behalf and on Your 162 | sole responsibility, not on behalf of any other Contributor, and only if You 163 | agree to indemnify, defend, and hold each Contributor harmless for any liability 164 | incurred by, or claims asserted against, such Contributor by reason of your 165 | accepting any such warranty or additional liability. 166 | 167 | END OF TERMS AND CONDITIONS 168 | 169 | APPENDIX: How to apply the Apache License to your work 170 | 171 | To apply the Apache License to your work, attach the following boilerplate 172 | notice, with the fields enclosed by brackets "[]" replaced with your own 173 | identifying information. (Don't include the brackets!) The text should be 174 | enclosed in the appropriate comment syntax for the file format. We also 175 | recommend that a file or class name and description of purpose be included on 176 | the same "printed page" as the copyright notice for easier identification within 177 | third-party archives. 178 | 179 | Copyright [yyyy] [name of copyright owner] 180 | 181 | Licensed under the Apache License, Version 2.0 (the "License"); 182 | you may not use this file except in compliance with the License. 183 | You may obtain a copy of the License at 184 | 185 | http://www.apache.org/licenses/LICENSE-2.0 186 | 187 | Unless required by applicable law or agreed to in writing, software 188 | distributed under the License is distributed on an "AS IS" BASIS, 189 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 190 | See the License for the specific language governing permissions and 191 | limitations under the License. 192 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dbt-prql 2 | 3 | > **Note** 4 | > As of Feb 2023, we're again considering how to best integrate with dbt 5 | > more closely. Ideally a file with a `.prql` 6 | > extension will just work™. 7 | > 8 | > If you're interested in this, subscribe or 👍 to 9 | > . 10 | > 11 | > The original plugin is hosted here, but only works 12 | > with a minority of dialects, and isn't a focus of development at the moment. 13 | 14 | dbt-prql allows writing PRQL in [dbt](https://www.getdbt.com/) models. This 15 | combines the benefits of PRQL's power & simplicity _within_ queries, with dbt's 16 | version control, lineage & testing _across_ queries. 17 | 18 | Once `dbt-prql` in installed, dbt commands compile PRQL between `{% prql %}` & 19 | `{% endprql %}` jinja tags to SQL as part of dbt's compilation. No additional 20 | config is required. 21 | 22 | ## Examples 23 | 24 | ### Simple example 25 | 26 | ```elm 27 | {% prql %} 28 | from employees 29 | filter (age | in 20..30) 30 | {% endprql %} 31 | ``` 32 | 33 | ...would appear to dbt as: 34 | 35 | ```sql 36 | SELECT 37 | employees.* 38 | FROM 39 | employees 40 | WHERE 41 | age BETWEEN 20 42 | AND 30 43 | ``` 44 | 45 | ### Less simple example 46 | 47 | ```elm 48 | {% prql %} 49 | from in_process = {{ source('salesforce', 'in_process') }} 50 | derive expected_sales = probability * value 51 | join {{ ref('team', 'team_sales') }} [name] 52 | group name ( 53 | aggregate (sum expected_sales) 54 | ) 55 | {% endprql %} 56 | ``` 57 | 58 | ...would appear to dbt as: 59 | 60 | ```sql 61 | SELECT 62 | name, 63 | sum(in_process.probability * in_process.value) AS expected_sales 64 | FROM 65 | {{ source('salesforce', 'in_process') }} AS in_process 66 | JOIN {{ ref('team', 'team_sales') }} USING(name) 67 | GROUP BY 68 | name 69 | ``` 70 | 71 | ...and then dbt will compile the `source` and `ref`s to a full SQL query. 72 | 73 | ### Replacing macros 74 | 75 | dbt's use of macros has saved many of us many lines of code, and even saved some 76 | people some time. But imperatively programming text generation with code like 77 | `if not loop.last` is not our highest calling. It's the "necessary" part rather 78 | than beautiful part of dbt. 79 | 80 | Here's the canonical example of macros in the [dbt 81 | documentation](https://docs.getdbt.com/tutorial/learning-more/using-jinja): 82 | 83 | ```sql 84 | {%- set payment_methods = ["bank_transfer", "credit_card", "gift_card"] -%} 85 | 86 | select 87 | order_id, 88 | {%- for payment_method in payment_methods %} 89 | sum(case when payment_method = '{{payment_method}}' then amount end) as {{payment_method}}_amount 90 | {%- if not loop.last %},{% endif -%} 91 | {% endfor %} 92 | from {{ ref('raw_payments') }} 93 | group by 1 94 | ``` 95 | 96 | Here's that model using PRQL[^1], including the prql jinja tags. 97 | 98 | ```elm 99 | {% prql %} 100 | func filter_amount method -> s"sum(case when payment_method = '{method}' then amount end) as {method}_amount" 101 | 102 | from {{ ref('raw_payments') }} 103 | group order_id ( 104 | aggregate [ 105 | filter_amount bank_transfer, 106 | filter_amount credit_card, 107 | filter_amount gift_card, 108 | ] 109 | ) 110 | {% endprql %} 111 | ``` 112 | 113 | As well the query being simpler in its final form, writing in PRQL also gives us 114 | live feedback around any errors, on every keystroke. Though there's much more to 115 | come, check out the current version on [PRQL 116 | Playground](https://prql-lang.org/playground/). 117 | 118 | [^1]: 119 | Note that when is implemented, we 120 | can dispense with the s-string, and optionally dispense with the function. 121 | 122 | ```elm 123 | from {{ ref('raw_payments') }} 124 | group order_id ( 125 | aggregate [ 126 | bank_transfer_amount = amount | filter payment_method == 'bank' | sum, 127 | credit_card_amount = amount | filter payment_method == 'credit_card' | sum, 128 | gift_amount = amount | filter payment_method == 'gift_card' | sum, 129 | ] 130 | ) 131 | ``` 132 | 133 | or 134 | 135 | ```elm 136 | func filter_amount method -> amount | filter payment_method == method | sum 137 | 138 | from {{ ref('raw_payments') }} 139 | group order_id ( 140 | aggregate [ 141 | bank_transfer_amount = filter_amount 'bank' 142 | credit_card_amount = filter_amount 'credit_card' 143 | gift_amount = filter_amount 'gift_card' 144 | ] 145 | ) 146 | ``` 147 | 148 | ## What it does 149 | 150 | When dbt compiles models to SQL queries: 151 | 152 | - Any text in a dbt model between `{% prql %}` and `{% endprql %}` tags is 153 | compiled from PRQL to SQL before being passed to dbt. 154 | - The PRQL complier passes text that's containing `{{` & `}}` through to dbt 155 | without modification, which allows us to embed jinja expressions in PRQL. 156 | (This was added to PRQL specifically for this use-case.) 157 | - dbt will then compile the resulting model into its final form of raw SQL, and 158 | dispatch it to the database, as per usual. 159 | 160 | There's no config needed in the dbt project; this works automatically on any dbt 161 | command (e.g. `dbt run`) assuming `dbt-prql` is installed. 162 | 163 | ## Installation 164 | 165 | ```sh 166 | pip install dbt-prql 167 | ``` 168 | 169 | ## Current state 170 | 171 | Currently this is new, but fairly feature-complete. It's enthusiastically 172 | supported — if there are any problems, please open an issue. 173 | 174 | ## How does it work? 175 | 176 | It's some dark magic, unfortunately. 177 | 178 | dbt doesn't allow adding behavior beyond the database adapters (e.g. 179 | `dbt-bigquery`) or jinja-only plugins (e.g. `dbt-utils`). So this library hacks 180 | the python import system to monkeypatch dbt's jinja environment with an 181 | additional jinja extension on python's startup[^2]. 182 | 183 | [^2]: 184 | Thanks to 185 | [mtkennerly/poetry-dynamic-versioning](https://github.com/mtkennerly/poetry-dynamic-versioning) 186 | for the technique. 187 | 188 | This approach was discussed with the dbt team 189 | [here](https://github.com/prql/prql/issues/375) and 190 | [here](https://github.com/prql/prql/issues/13). 191 | 192 | This isn't stable between dbt versions, since it relies on internal dbt APIs. 193 | The technique is also normatively bad — it runs a few lines of code every time 194 | the python interpreter starts — whose errors could lead to very confusing bugs 195 | beyond the domain of the problem (though in the case of this library, it's small 196 | and well-constructed™). 197 | 198 | If there's ever any concern that the library might be causing a problem, just 199 | set an environment variable `DBT_PRQL_DISABLE=1`, and this library won't 200 | monkeypatch anything. It's also fully uninstallable with `pip uninstall 201 | dbt-prql`. 202 | 203 | ## Roadmap 204 | 205 | Open to ideas; at the moment it's fairly feature-complete. If we were 206 | unconstrained in dbt functionality: 207 | 208 | - If dbt allowed for external plugins, we'd enthusiastically move to that. 209 | - We'd love to have this work on `.prql` files without the `{% prql %}` tags; 210 | but with the current approach that would require quite invasive 211 | monkeypatching. 212 | - If we could add the dialect in automatically (i.e. `prql dialect:snowflake`), 213 | that would save a line per model. 214 | - If we could upstream this into dbt-core, that would be awesome. It may be on 215 | PRQL to demonstrate its staying power before that, though. 216 | 217 | We may move this library to the or 218 | repos. We'd prefer to keep it as its own package 219 | given the hackery above, but there's no need for it to be its own repo. 220 | -------------------------------------------------------------------------------- /Taskfile.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | 3 | tasks: 4 | # There are a few problems with a standard test loop, such that we need to 5 | # completely blow away the python environment on each loop: 6 | # - Having the dbt-prql dependency as develop=True doesn't seem to copy 7 | # `zzz_dbt_prql.pth` with that name; instead using `dbt_prql.pth`. This then 8 | # doesn't load early enough. (Seems weird, might be worth confirming) 9 | # - Having the dbt-prql dependency as develop=False doesn't seem to update 10 | # when reinstalled. 11 | reset-test-env: 12 | dir: tests 13 | 14 | cmds: 15 | - cmd: poetry env remove 3.9 16 | ignore_error: true 17 | - poetry env use 3.9 18 | - poetry install 19 | 20 | test: 21 | dir: tests/dbt_test_project 22 | cmds: 23 | - dbt compile --profiles-dir=.. 24 | -------------------------------------------------------------------------------- /dbt_prql/patch.py: -------------------------------------------------------------------------------- 1 | from jinja2.ext import Extension 2 | from jinja2.parser import Parser 3 | 4 | 5 | class PrqlExtension(Extension): 6 | tags = {"prql"} 7 | 8 | def parse(self, parser: Parser): 9 | import logging 10 | 11 | from jinja2 import nodes 12 | from jinja2.nodes import Const 13 | 14 | logger = logging.getLogger(__name__) 15 | 16 | line_number = next(parser.stream).lineno 17 | prql_jinja = parser.parse_statements(["name:endprql"], drop_needle=True) 18 | logger.info(f"Parsing statement:\n{prql_jinja}") 19 | return nodes.CallBlock( 20 | self.call_method("_to_sql", [Const("")]), [], [], prql_jinja 21 | ).set_lineno(line_number) 22 | 23 | def _to_sql(self, args, caller): 24 | _ = args 25 | import logging 26 | 27 | import prql_python 28 | 29 | logger = logging.getLogger(__name__) 30 | 31 | prql = caller() 32 | logger.info(f"Parsing PRQL:\n{prql}") 33 | sql = prql_python.compile(prql) 34 | output = f""" 35 | -- SQL created from PRQL. Original PRQL: 36 | {chr(10).join(f'-- {line}' for line in prql.splitlines())} 37 | 38 | {sql} 39 | """ 40 | logger.info(f"Parsed into SQL:\n{sql}") 41 | return output 42 | 43 | 44 | def patch_dbt_environment() -> None: 45 | import os 46 | 47 | if os.environ.get("DBT_PRQL_DISABLE"): 48 | # See below for why we don't log this. 49 | return 50 | 51 | import functools 52 | import logging 53 | 54 | logger = logging.getLogger(__name__) 55 | 56 | try: 57 | from dbt_common.clients import jinja 58 | except ImportError: 59 | # Don't log this as discussed below 60 | pass 61 | 62 | log_level = os.environ.get("DBT_PRQL_LOG_LEVEL", "") 63 | if log_level != "": 64 | logging.basicConfig() 65 | logger.setLevel(log_level) 66 | logger.warning( 67 | f"Setting PRQL log level to {log_level}. Please note that logging anything " 68 | "from this module can affect the reliability of some libraries which " 69 | "rely on a clean stderr. This includes dbt-bigquery. If you have any issues, " 70 | "disable logging by removing the `DBT_PRQL_LOG_LEVEL` env var. I recognize the " 71 | "absurdity of that statement, but there's not much we can do from here." 72 | ) 73 | 74 | logger.debug("Getting environment function from dbt") 75 | jinja._get_environment = jinja.get_environment 76 | 77 | def add_prql_extension(func): 78 | if getattr(func, "status", None) == "patched": 79 | logger.debug(f"Already patched {func.__qualname__}") 80 | return func 81 | 82 | @functools.wraps(func) 83 | def with_prql_extension(*args, **kwargs): 84 | env = func(*args, **kwargs) 85 | env.add_extension(PrqlExtension) 86 | return env 87 | 88 | with_prql_extension.status = "patched" 89 | logger.info(f"Patched {func.__qualname__}") 90 | 91 | return with_prql_extension 92 | 93 | env_with_prql = add_prql_extension(jinja._get_environment) 94 | 95 | jinja.get_environment = env_with_prql 96 | 97 | if os.environ.get("DBT_PRQL_TEST"): 98 | test_jinja_parse() 99 | 100 | 101 | def test_jinja_parse() -> None: 102 | import logging 103 | 104 | from dbt.clients.jinja import get_environment 105 | 106 | logger = logging.getLogger(__name__) 107 | 108 | template = get_environment().from_string( 109 | """ 110 | {% prql %} 111 | from employees 112 | filter (age | in 5..10) 113 | {% endprql %} 114 | """ 115 | ) 116 | logger.info(f"Tested PRQL parsing: {template.render()}") 117 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | authors = ["Maximilian Roos "] 3 | description = "Write PRQL in dbt models" 4 | homepage = "https://github.com/prql/dbt-prql" 5 | include = [{path = "zzz_dbt_prql.pth", format = ["sdist", "wheel"]}] 6 | license = "Apache-2.0" 7 | name = "dbt-prql" 8 | readme = "README.md" 9 | repository = "https://github.com/prql/dbt-prql" 10 | version = "0.2.4" 11 | 12 | [tool.poetry.dependencies] 13 | python = ">=3.8,<4.0" 14 | 15 | # We're conservative on these because we're using internal APIs. 16 | # We'll try and quite quickly on a new _.X._ release from dbt. 17 | # And we can unblock this when we have upstream tests https://github.com/prql/dbt-prql/issues/6 18 | dbt-core = ">=1.8.0,<=1.9.4" 19 | dbt-common = ">=1.10.0,<1.22.0" 20 | prql_python = "0.11.2" 21 | 22 | [tool.poetry.dev-dependencies] 23 | black = "*" 24 | flake8 = "*" 25 | mypy = "*" 26 | 27 | [build-system] 28 | build-backend = "poetry.core.masonry.api" 29 | requires = ["poetry-core>=1.0.0"] 30 | 31 | [tool.isort] 32 | default_section = "THIRDPARTY" 33 | float_to_top = true 34 | profile = "black" 35 | skip_gitignore = true 36 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | # Standard @max-sixty exclusions. 2 | 3 | [flake8] 4 | # We exclude all aesthetic errors which aren't fixed by the tool. 5 | extend-ignore = 6 | # Indentation — black handles 7 | E1 8 | W1 9 | # Whitespace — black handles 10 | E2 11 | W2 12 | # Blank lines — black handles 13 | E3 14 | W3 15 | # Imports — isort handles 16 | E4 17 | W4 18 | # Line length — black handles 19 | E5 20 | W5 21 | # No lambdas — too strict 22 | E731 23 | U101 24 | -------------------------------------------------------------------------------- /test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export PATH=$PYTHON_PATH_:$PATH 4 | # Don't use the patching during the installs. 5 | export DBT_PRQL_DISABLE=1 6 | export DBT_PRQL_LOG_LEVEL=10 7 | cd ${test_dbt_project} 8 | pip install ../../dbt-prql 9 | dbt clean 10 | dbt deps 11 | dbt compile 12 | cd ~/workspace/dbt-prql/ 13 | echo "🟢" 14 | -------------------------------------------------------------------------------- /tests/.gitignore: -------------------------------------------------------------------------------- 1 | .user.yml 2 | -------------------------------------------------------------------------------- /tests/README.md: -------------------------------------------------------------------------------- 1 | # dbt-prql tests 2 | 3 | These are some early integration tests. Currently they're run from the 4 | command-line with `task`: 5 | 6 | ``` 7 | task test 8 | ``` 9 | 10 | Some severe caveats: 11 | 12 | - Because of , the postgres tests 13 | demonstrate that this doesn't currently work with postgres. 14 | - The tests may fail _after_ passing the compilation, depending on whether 15 | there's a valid Google Cloud auth setup. Unfortunately it doesn't seem 16 | possible to use standard dbt commands without querying a DB. So we may need to 17 | work with [dbt's test 18 | fixtures](https://github.com/dbt-labs/dbt-core/tree/main/tests); at first 19 | glance they don't seem well-described. 20 | -------------------------------------------------------------------------------- /tests/dbt_test_project/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | target/ 3 | dbt_modules/ 4 | logs/ 5 | -------------------------------------------------------------------------------- /tests/dbt_test_project/dbt_project.yml: -------------------------------------------------------------------------------- 1 | name: "dbt_test_projct" 2 | config-version: 2 3 | # Unused 4 | version: "0.0.0" 5 | profile: prql-test 6 | -------------------------------------------------------------------------------- /tests/dbt_test_project/models/src_sources.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | # Source template from https://docs.getdbt.com/docs/building-a-dbt-project/using-sources 4 | 5 | sources: 6 | - name: salesforce 7 | tables: 8 | - name: in_process 9 | - name: team 10 | tables: 11 | - name: team_sales 12 | -------------------------------------------------------------------------------- /tests/dbt_test_project/models/test_model_1.sql: -------------------------------------------------------------------------------- 1 | {% prql %} 2 | from in_process = {{ source('salesforce', 'in_process') }} 3 | derive expected_sales = probability * value 4 | join {{ source('team', 'team_sales') }} [name] 5 | group name ( 6 | aggregate (sum expected_sales) 7 | ) 8 | {% endprql %} 9 | -------------------------------------------------------------------------------- /tests/poetry.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "agate" 3 | version = "1.6.3" 4 | description = "A data analysis library that is optimized for humans instead of machines." 5 | category = "main" 6 | optional = false 7 | python-versions = "*" 8 | 9 | [package.dependencies] 10 | Babel = ">=2.0" 11 | isodate = ">=0.5.4" 12 | leather = ">=0.3.2" 13 | parsedatetime = ">=2.1,<2.5 || >2.5,<2.6 || >2.6" 14 | python-slugify = ">=1.2.1" 15 | pytimeparse = ">=1.1.5" 16 | six = ">=1.9.0" 17 | 18 | [package.extras] 19 | docs = ["Sphinx (>=1.2.2)", "sphinx-rtd-theme (>=0.1.6)"] 20 | test = ["coverage (>=3.7.1)", "cssselect (>=0.9.1)", "lxml (>=3.6.0)", "nose (>=1.1.2)", "pytz (>=2015.4)", "mock (>=1.3.0)", "unittest2 (>=1.1.0)", "PyICU (>=2.4.2)"] 21 | 22 | [[package]] 23 | name = "attrs" 24 | version = "22.1.0" 25 | description = "Classes Without Boilerplate" 26 | category = "main" 27 | optional = false 28 | python-versions = ">=3.5" 29 | 30 | [package.extras] 31 | dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] 32 | docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] 33 | tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] 34 | tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] 35 | 36 | [[package]] 37 | name = "babel" 38 | version = "2.10.3" 39 | description = "Internationalization utilities" 40 | category = "main" 41 | optional = false 42 | python-versions = ">=3.6" 43 | 44 | [package.dependencies] 45 | pytz = ">=2015.7" 46 | 47 | [[package]] 48 | name = "black" 49 | version = "22.6.0" 50 | description = "The uncompromising code formatter." 51 | category = "dev" 52 | optional = false 53 | python-versions = ">=3.6.2" 54 | 55 | [package.dependencies] 56 | click = ">=8.0.0" 57 | mypy-extensions = ">=0.4.3" 58 | pathspec = ">=0.9.0" 59 | platformdirs = ">=2" 60 | tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} 61 | typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} 62 | typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} 63 | 64 | [package.extras] 65 | colorama = ["colorama (>=0.4.3)"] 66 | d = ["aiohttp (>=3.7.4)"] 67 | jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] 68 | uvloop = ["uvloop (>=0.15.2)"] 69 | 70 | [[package]] 71 | name = "cachetools" 72 | version = "3.1.1" 73 | description = "Extensible memoizing collections and decorators" 74 | category = "dev" 75 | optional = false 76 | python-versions = "*" 77 | 78 | [[package]] 79 | name = "certifi" 80 | version = "2022.6.15" 81 | description = "Python package for providing Mozilla's CA Bundle." 82 | category = "main" 83 | optional = false 84 | python-versions = ">=3.6" 85 | 86 | [[package]] 87 | name = "cffi" 88 | version = "1.15.1" 89 | description = "Foreign Function Interface for Python calling C code." 90 | category = "main" 91 | optional = false 92 | python-versions = "*" 93 | 94 | [package.dependencies] 95 | pycparser = "*" 96 | 97 | [[package]] 98 | name = "charset-normalizer" 99 | version = "2.0.12" 100 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 101 | category = "main" 102 | optional = false 103 | python-versions = ">=3.5.0" 104 | 105 | [package.extras] 106 | unicode_backport = ["unicodedata2"] 107 | 108 | [[package]] 109 | name = "click" 110 | version = "8.1.3" 111 | description = "Composable command line interface toolkit" 112 | category = "main" 113 | optional = false 114 | python-versions = ">=3.7" 115 | 116 | [package.dependencies] 117 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 118 | importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} 119 | 120 | [[package]] 121 | name = "colorama" 122 | version = "0.4.4" 123 | description = "Cross-platform colored terminal text." 124 | category = "main" 125 | optional = false 126 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 127 | 128 | [[package]] 129 | name = "dbt-bigquery" 130 | version = "1.1.1" 131 | description = "The BigQuery adapter plugin for dbt" 132 | category = "dev" 133 | optional = false 134 | python-versions = ">=3.7" 135 | 136 | [package.dependencies] 137 | dbt-core = ">=1.1.0,<1.2.0" 138 | google-api-core = ">=1.16.0,<3" 139 | google-cloud-bigquery = ">=1.25.0,<3" 140 | google-cloud-core = ">=1.3.0,<3" 141 | googleapis-common-protos = ">=1.6.0,<2" 142 | protobuf = ">=3.13.0,<4" 143 | 144 | [[package]] 145 | name = "dbt-core" 146 | version = "1.1.2" 147 | description = "With dbt, data analysts and engineers can build analytics the way engineers build applications." 148 | category = "main" 149 | optional = false 150 | python-versions = ">=3.7.2" 151 | 152 | [package.dependencies] 153 | agate = ">=1.6,<1.6.4" 154 | cffi = ">=1.9,<2.0.0" 155 | click = ">=7.0,<9" 156 | colorama = ">=0.3.9,<0.4.5" 157 | dbt-extractor = ">=0.4.1,<0.5.0" 158 | hologram = ">=0.0.14,<=0.0.15" 159 | idna = ">=2.5,<4" 160 | isodate = ">=0.6,<0.7" 161 | Jinja2 = "2.11.3" 162 | logbook = ">=1.5,<1.6" 163 | MarkupSafe = ">=0.23,<2.1" 164 | mashumaro = "2.9" 165 | minimal-snowplow-tracker = "0.0.2" 166 | networkx = ">=2.3,<2.8.4" 167 | packaging = ">=20.9,<22.0" 168 | requests = "<3.0.0" 169 | sqlparse = ">=0.2.3,<0.5" 170 | typing-extensions = ">=3.7.4" 171 | werkzeug = ">=1,<3" 172 | 173 | [[package]] 174 | name = "dbt-extractor" 175 | version = "0.4.1" 176 | description = "A tool to analyze and extract information from Jinja used in dbt projects." 177 | category = "main" 178 | optional = false 179 | python-versions = ">=3.6.1" 180 | 181 | [[package]] 182 | name = "dbt-postgres" 183 | version = "1.1.2" 184 | description = "The postgres adpter plugin for dbt (data build tool)" 185 | category = "dev" 186 | optional = false 187 | python-versions = ">=3.7" 188 | 189 | [package.dependencies] 190 | dbt-core = "1.1.2" 191 | psycopg2-binary = ">=2.8,<3.0" 192 | 193 | [[package]] 194 | name = "dbt-prql" 195 | version = "0.2.3" 196 | description = "Write PRQL in dbt models" 197 | category = "main" 198 | optional = false 199 | python-versions = ">=3.7.3" 200 | develop = false 201 | 202 | [package.dependencies] 203 | dbt-core = ">=1.1.0,<1.2.0" 204 | prql_python = "0.2.6" 205 | 206 | [package.source] 207 | type = "directory" 208 | url = ".." 209 | 210 | [[package]] 211 | name = "fancycompleter" 212 | version = "0.9.1" 213 | description = "colorful TAB completion for Python prompt" 214 | category = "dev" 215 | optional = false 216 | python-versions = "*" 217 | 218 | [package.dependencies] 219 | pyreadline = {version = "*", markers = "platform_system == \"Windows\""} 220 | pyrepl = ">=0.8.2" 221 | 222 | [[package]] 223 | name = "flake8" 224 | version = "5.0.4" 225 | description = "the modular source code checker: pep8 pyflakes and co" 226 | category = "dev" 227 | optional = false 228 | python-versions = ">=3.6.1" 229 | 230 | [package.dependencies] 231 | importlib-metadata = {version = ">=1.1.0,<4.3", markers = "python_version < \"3.8\""} 232 | mccabe = ">=0.7.0,<0.8.0" 233 | pycodestyle = ">=2.9.0,<2.10.0" 234 | pyflakes = ">=2.5.0,<2.6.0" 235 | 236 | [[package]] 237 | name = "future" 238 | version = "0.18.2" 239 | description = "Clean single-source support for Python 3 and 2" 240 | category = "main" 241 | optional = false 242 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 243 | 244 | [[package]] 245 | name = "google-api-core" 246 | version = "2.8.2" 247 | description = "Google API client core library" 248 | category = "dev" 249 | optional = false 250 | python-versions = ">=3.6" 251 | 252 | [package.dependencies] 253 | google-auth = ">=1.25.0,<3.0dev" 254 | googleapis-common-protos = ">=1.56.2,<2.0dev" 255 | protobuf = ">=3.15.0,<5.0.0dev" 256 | requests = ">=2.18.0,<3.0.0dev" 257 | 258 | [package.extras] 259 | grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)"] 260 | 261 | [[package]] 262 | name = "google-auth" 263 | version = "2.10.0" 264 | description = "Google Authentication Library" 265 | category = "dev" 266 | optional = false 267 | python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" 268 | 269 | [package.dependencies] 270 | cachetools = ">=2.0.0,<6.0" 271 | pyasn1-modules = ">=0.2.1" 272 | rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} 273 | six = ">=1.9.0" 274 | 275 | [package.extras] 276 | aiohttp = ["requests (>=2.20.0,<3.0.0dev)", "aiohttp (>=3.6.2,<4.0.0dev)"] 277 | enterprise_cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] 278 | pyopenssl = ["pyopenssl (>=20.0.0)"] 279 | reauth = ["pyu2f (>=0.1.5)"] 280 | 281 | [[package]] 282 | name = "google-cloud-bigquery" 283 | version = "1.28.2" 284 | description = "Google BigQuery API client library" 285 | category = "dev" 286 | optional = false 287 | python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" 288 | 289 | [package.dependencies] 290 | google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" 291 | google-cloud-core = ">=1.4.1,<3.0dev" 292 | google-resumable-media = ">=0.6.0,<2.0dev" 293 | protobuf = "<4.0.0dev" 294 | six = ">=1.13.0,<2.0.0dev" 295 | 296 | [package.extras] 297 | all = ["google-cloud-bigquery-storage (>=1.0.0,<2.0.0dev)", "grpcio (>=1.32.0,<2.0dev)", "pyarrow (>=1.0.0,<2.0dev)", "pandas (>=0.23.0)", "tqdm (>=4.7.4,<5.0.0dev)", "opentelemetry-api (==0.9b0)", "opentelemetry-sdk (==0.9b0)", "opentelemetry-instrumentation (==0.9b0)", "pyarrow (>=0.16.0,<0.17.0dev)", "pyarrow (>=1.0.0,<2.0de)"] 298 | bqstorage = ["google-cloud-bigquery-storage (>=1.0.0,<2.0.0dev)", "grpcio (>=1.32.0,<2.0dev)", "pyarrow (>=1.0.0,<2.0dev)"] 299 | fastparquet = ["fastparquet", "python-snappy", "llvmlite (<=0.31.0)", "llvmlite (<=0.34.0)"] 300 | opentelemetry = ["opentelemetry-api (==0.9b0)", "opentelemetry-sdk (==0.9b0)", "opentelemetry-instrumentation (==0.9b0)"] 301 | pandas = ["pandas (>=0.23.0)"] 302 | pyarrow = ["pyarrow (>=0.16.0,<0.17.0dev)", "pyarrow (>=1.0.0,<2.0de)"] 303 | tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] 304 | 305 | [[package]] 306 | name = "google-cloud-core" 307 | version = "2.3.2" 308 | description = "Google Cloud API client core library" 309 | category = "dev" 310 | optional = false 311 | python-versions = ">=3.7" 312 | 313 | [package.dependencies] 314 | google-api-core = ">=1.31.6,<2.0.0 || >2.3.0,<3.0.0dev" 315 | google-auth = ">=1.25.0,<3.0dev" 316 | 317 | [package.extras] 318 | grpc = ["grpcio (>=1.38.0,<2.0dev)"] 319 | 320 | [[package]] 321 | name = "google-crc32c" 322 | version = "1.3.0" 323 | description = "A python wrapper of the C library 'Google CRC32C'" 324 | category = "dev" 325 | optional = false 326 | python-versions = ">=3.6" 327 | 328 | [package.extras] 329 | testing = ["pytest"] 330 | 331 | [[package]] 332 | name = "google-resumable-media" 333 | version = "1.3.3" 334 | description = "Utilities for Google Media Downloads and Resumable Uploads" 335 | category = "dev" 336 | optional = false 337 | python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" 338 | 339 | [package.dependencies] 340 | google-crc32c = {version = ">=1.0,<2.0dev", markers = "python_version >= \"3.5\""} 341 | six = ">=1.4.0" 342 | 343 | [package.extras] 344 | aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"] 345 | requests = ["requests (>=2.18.0,<3.0.0dev)"] 346 | 347 | [[package]] 348 | name = "googleapis-common-protos" 349 | version = "1.56.4" 350 | description = "Common protobufs used in Google APIs" 351 | category = "dev" 352 | optional = false 353 | python-versions = ">=3.7" 354 | 355 | [package.dependencies] 356 | protobuf = ">=3.15.0,<5.0.0dev" 357 | 358 | [package.extras] 359 | grpc = ["grpcio (>=1.0.0,<2.0.0dev)"] 360 | 361 | [[package]] 362 | name = "hologram" 363 | version = "0.0.15" 364 | description = "JSON schema generation from dataclasses" 365 | category = "main" 366 | optional = false 367 | python-versions = "*" 368 | 369 | [package.dependencies] 370 | jsonschema = ">=3.0,<4.0" 371 | python-dateutil = ">=2.8,<2.9" 372 | 373 | [[package]] 374 | name = "idna" 375 | version = "3.3" 376 | description = "Internationalized Domain Names in Applications (IDNA)" 377 | category = "main" 378 | optional = false 379 | python-versions = ">=3.5" 380 | 381 | [[package]] 382 | name = "importlib-metadata" 383 | version = "4.2.0" 384 | description = "Read metadata from Python packages" 385 | category = "main" 386 | optional = false 387 | python-versions = ">=3.6" 388 | 389 | [package.dependencies] 390 | typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} 391 | zipp = ">=0.5" 392 | 393 | [package.extras] 394 | docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] 395 | testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] 396 | 397 | [[package]] 398 | name = "isodate" 399 | version = "0.6.1" 400 | description = "An ISO 8601 date/time/duration parser and formatter" 401 | category = "main" 402 | optional = false 403 | python-versions = "*" 404 | 405 | [package.dependencies] 406 | six = "*" 407 | 408 | [[package]] 409 | name = "jinja2" 410 | version = "2.11.3" 411 | description = "A very fast and expressive template engine." 412 | category = "main" 413 | optional = false 414 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 415 | 416 | [package.dependencies] 417 | MarkupSafe = ">=0.23" 418 | 419 | [package.extras] 420 | i18n = ["Babel (>=0.8)"] 421 | 422 | [[package]] 423 | name = "jsonschema" 424 | version = "3.2.0" 425 | description = "An implementation of JSON Schema validation for Python" 426 | category = "main" 427 | optional = false 428 | python-versions = "*" 429 | 430 | [package.dependencies] 431 | attrs = ">=17.4.0" 432 | importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} 433 | pyrsistent = ">=0.14.0" 434 | six = ">=1.11.0" 435 | 436 | [package.extras] 437 | format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] 438 | format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"] 439 | 440 | [[package]] 441 | name = "leather" 442 | version = "0.3.4" 443 | description = "Python charting for 80% of humans." 444 | category = "main" 445 | optional = false 446 | python-versions = "*" 447 | 448 | [package.dependencies] 449 | six = ">=1.6.1" 450 | 451 | [[package]] 452 | name = "logbook" 453 | version = "1.5.3" 454 | description = "A logging replacement for Python" 455 | category = "main" 456 | optional = false 457 | python-versions = "*" 458 | 459 | [package.extras] 460 | all = ["redis", "brotli", "pytest (>4.0)", "execnet (>=1.0.9)", "cython", "pyzmq", "pytest-cov (>=2.6)", "sqlalchemy", "jinja2"] 461 | compression = ["brotli"] 462 | dev = ["pytest-cov (>=2.6)", "pytest (>4.0)", "cython"] 463 | execnet = ["execnet (>=1.0.9)"] 464 | jinja = ["jinja2"] 465 | redis = ["redis"] 466 | sqlalchemy = ["sqlalchemy"] 467 | test = ["pytest-cov (>=2.6)", "pytest (>4.0)"] 468 | zmq = ["pyzmq"] 469 | 470 | [[package]] 471 | name = "markupsafe" 472 | version = "2.0.1" 473 | description = "Safely add untrusted strings to HTML/XML markup." 474 | category = "main" 475 | optional = false 476 | python-versions = ">=3.6" 477 | 478 | [[package]] 479 | name = "mashumaro" 480 | version = "2.9" 481 | description = "Fast serialization framework on top of dataclasses" 482 | category = "main" 483 | optional = false 484 | python-versions = ">=3.6" 485 | 486 | [package.dependencies] 487 | msgpack = ">=0.5.6" 488 | pyyaml = ">=3.13" 489 | typing-extensions = "*" 490 | 491 | [[package]] 492 | name = "mccabe" 493 | version = "0.7.0" 494 | description = "McCabe checker, plugin for flake8" 495 | category = "dev" 496 | optional = false 497 | python-versions = ">=3.6" 498 | 499 | [[package]] 500 | name = "minimal-snowplow-tracker" 501 | version = "0.0.2" 502 | description = "A minimal snowplow event tracker for Python. Add analytics to your Python and Django apps, webapps and games" 503 | category = "main" 504 | optional = false 505 | python-versions = "*" 506 | 507 | [package.dependencies] 508 | requests = ">=2.2.1,<3.0" 509 | six = ">=1.9.0,<2.0" 510 | 511 | [[package]] 512 | name = "msgpack" 513 | version = "1.0.4" 514 | description = "MessagePack serializer" 515 | category = "main" 516 | optional = false 517 | python-versions = "*" 518 | 519 | [[package]] 520 | name = "mypy" 521 | version = "0.971" 522 | description = "Optional static typing for Python" 523 | category = "dev" 524 | optional = false 525 | python-versions = ">=3.6" 526 | 527 | [package.dependencies] 528 | mypy-extensions = ">=0.4.3" 529 | tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} 530 | typed-ast = {version = ">=1.4.0,<2", markers = "python_version < \"3.8\""} 531 | typing-extensions = ">=3.10" 532 | 533 | [package.extras] 534 | dmypy = ["psutil (>=4.0)"] 535 | python2 = ["typed-ast (>=1.4.0,<2)"] 536 | reports = ["lxml"] 537 | 538 | [[package]] 539 | name = "mypy-extensions" 540 | version = "0.4.3" 541 | description = "Experimental type system extensions for programs checked with the mypy typechecker." 542 | category = "dev" 543 | optional = false 544 | python-versions = "*" 545 | 546 | [[package]] 547 | name = "networkx" 548 | version = "2.6.3" 549 | description = "Python package for creating and manipulating graphs and networks" 550 | category = "main" 551 | optional = false 552 | python-versions = ">=3.7" 553 | 554 | [package.extras] 555 | default = ["numpy (>=1.19)", "scipy (>=1.5,!=1.6.1)", "matplotlib (>=3.3)", "pandas (>=1.1)"] 556 | developer = ["black (==21.5b1)", "pre-commit (>=2.12)"] 557 | doc = ["sphinx (>=4.0,<5.0)", "pydata-sphinx-theme (>=0.6,<1.0)", "sphinx-gallery (>=0.9,<1.0)", "numpydoc (>=1.1)", "pillow (>=8.2)", "nb2plots (>=0.6)", "texext (>=0.6.6)"] 558 | extra = ["lxml (>=4.5)", "pygraphviz (>=1.7)", "pydot (>=1.4.1)"] 559 | test = ["pytest (>=6.2)", "pytest-cov (>=2.12)", "codecov (>=2.1)"] 560 | 561 | [[package]] 562 | name = "packaging" 563 | version = "21.3" 564 | description = "Core utilities for Python packages" 565 | category = "main" 566 | optional = false 567 | python-versions = ">=3.6" 568 | 569 | [package.dependencies] 570 | pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" 571 | 572 | [[package]] 573 | name = "parsedatetime" 574 | version = "2.4" 575 | description = "Parse human-readable date/time text." 576 | category = "main" 577 | optional = false 578 | python-versions = "*" 579 | 580 | [package.dependencies] 581 | future = "*" 582 | 583 | [[package]] 584 | name = "pathspec" 585 | version = "0.9.0" 586 | description = "Utility library for gitignore style pattern matching of file paths." 587 | category = "dev" 588 | optional = false 589 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" 590 | 591 | [[package]] 592 | name = "pdbpp" 593 | version = "0.10.3" 594 | description = "pdb++, a drop-in replacement for pdb" 595 | category = "dev" 596 | optional = false 597 | python-versions = "*" 598 | 599 | [package.dependencies] 600 | fancycompleter = ">=0.8" 601 | pygments = "*" 602 | wmctrl = "*" 603 | 604 | [package.extras] 605 | funcsigs = ["funcsigs"] 606 | testing = ["funcsigs", "pytest"] 607 | 608 | [[package]] 609 | name = "platformdirs" 610 | version = "2.5.2" 611 | description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 612 | category = "dev" 613 | optional = false 614 | python-versions = ">=3.7" 615 | 616 | [package.extras] 617 | docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] 618 | test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] 619 | 620 | [[package]] 621 | name = "protobuf" 622 | version = "3.20.1" 623 | description = "Protocol Buffers" 624 | category = "dev" 625 | optional = false 626 | python-versions = ">=3.7" 627 | 628 | [[package]] 629 | name = "prql-python" 630 | version = "0.2.6" 631 | description = "" 632 | category = "main" 633 | optional = false 634 | python-versions = ">=3.7" 635 | 636 | [[package]] 637 | name = "psycopg2-binary" 638 | version = "2.9.3" 639 | description = "psycopg2 - Python-PostgreSQL Database Adapter" 640 | category = "dev" 641 | optional = false 642 | python-versions = ">=3.6" 643 | 644 | [[package]] 645 | name = "pyasn1" 646 | version = "0.4.8" 647 | description = "ASN.1 types and codecs" 648 | category = "dev" 649 | optional = false 650 | python-versions = "*" 651 | 652 | [[package]] 653 | name = "pyasn1-modules" 654 | version = "0.2.8" 655 | description = "A collection of ASN.1-based protocols modules." 656 | category = "dev" 657 | optional = false 658 | python-versions = "*" 659 | 660 | [package.dependencies] 661 | pyasn1 = ">=0.4.6,<0.5.0" 662 | 663 | [[package]] 664 | name = "pycodestyle" 665 | version = "2.9.1" 666 | description = "Python style guide checker" 667 | category = "dev" 668 | optional = false 669 | python-versions = ">=3.6" 670 | 671 | [[package]] 672 | name = "pycparser" 673 | version = "2.21" 674 | description = "C parser in Python" 675 | category = "main" 676 | optional = false 677 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 678 | 679 | [[package]] 680 | name = "pyflakes" 681 | version = "2.5.0" 682 | description = "passive checker of Python programs" 683 | category = "dev" 684 | optional = false 685 | python-versions = ">=3.6" 686 | 687 | [[package]] 688 | name = "pygments" 689 | version = "2.12.0" 690 | description = "Pygments is a syntax highlighting package written in Python." 691 | category = "dev" 692 | optional = false 693 | python-versions = ">=3.6" 694 | 695 | [[package]] 696 | name = "pyparsing" 697 | version = "3.0.9" 698 | description = "pyparsing module - Classes and methods to define and execute parsing grammars" 699 | category = "main" 700 | optional = false 701 | python-versions = ">=3.6.8" 702 | 703 | [package.extras] 704 | diagrams = ["railroad-diagrams", "jinja2"] 705 | 706 | [[package]] 707 | name = "pyreadline" 708 | version = "2.1" 709 | description = "A python implmementation of GNU readline." 710 | category = "dev" 711 | optional = false 712 | python-versions = "*" 713 | 714 | [[package]] 715 | name = "pyrepl" 716 | version = "0.9.0" 717 | description = "A library for building flexible command line interfaces" 718 | category = "dev" 719 | optional = false 720 | python-versions = "*" 721 | 722 | [[package]] 723 | name = "pyrsistent" 724 | version = "0.18.1" 725 | description = "Persistent/Functional/Immutable data structures" 726 | category = "main" 727 | optional = false 728 | python-versions = ">=3.7" 729 | 730 | [[package]] 731 | name = "python-dateutil" 732 | version = "2.8.2" 733 | description = "Extensions to the standard Python datetime module" 734 | category = "main" 735 | optional = false 736 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" 737 | 738 | [package.dependencies] 739 | six = ">=1.5" 740 | 741 | [[package]] 742 | name = "python-slugify" 743 | version = "6.1.2" 744 | description = "A Python slugify application that also handles Unicode" 745 | category = "main" 746 | optional = false 747 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" 748 | 749 | [package.dependencies] 750 | text-unidecode = ">=1.3" 751 | 752 | [package.extras] 753 | unidecode = ["Unidecode (>=1.1.1)"] 754 | 755 | [[package]] 756 | name = "pytimeparse" 757 | version = "1.1.8" 758 | description = "Time expression parser" 759 | category = "main" 760 | optional = false 761 | python-versions = "*" 762 | 763 | [[package]] 764 | name = "pytz" 765 | version = "2022.1" 766 | description = "World timezone definitions, modern and historical" 767 | category = "main" 768 | optional = false 769 | python-versions = "*" 770 | 771 | [[package]] 772 | name = "pyyaml" 773 | version = "6.0" 774 | description = "YAML parser and emitter for Python" 775 | category = "main" 776 | optional = false 777 | python-versions = ">=3.6" 778 | 779 | [[package]] 780 | name = "requests" 781 | version = "2.27.1" 782 | description = "Python HTTP for Humans." 783 | category = "main" 784 | optional = false 785 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" 786 | 787 | [package.dependencies] 788 | certifi = ">=2017.4.17" 789 | charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} 790 | idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} 791 | urllib3 = ">=1.21.1,<1.27" 792 | 793 | [package.extras] 794 | socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] 795 | use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] 796 | 797 | [[package]] 798 | name = "rsa" 799 | version = "4.4" 800 | description = "Pure-Python RSA implementation" 801 | category = "dev" 802 | optional = false 803 | python-versions = "*" 804 | 805 | [package.dependencies] 806 | pyasn1 = ">=0.1.3" 807 | 808 | [[package]] 809 | name = "six" 810 | version = "1.16.0" 811 | description = "Python 2 and 3 compatibility utilities" 812 | category = "main" 813 | optional = false 814 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 815 | 816 | [[package]] 817 | name = "sqlparse" 818 | version = "0.4.2" 819 | description = "A non-validating SQL parser." 820 | category = "main" 821 | optional = false 822 | python-versions = ">=3.5" 823 | 824 | [[package]] 825 | name = "text-unidecode" 826 | version = "1.3" 827 | description = "The most basic Text::Unidecode port" 828 | category = "main" 829 | optional = false 830 | python-versions = "*" 831 | 832 | [[package]] 833 | name = "tomli" 834 | version = "2.0.1" 835 | description = "A lil' TOML parser" 836 | category = "dev" 837 | optional = false 838 | python-versions = ">=3.7" 839 | 840 | [[package]] 841 | name = "typed-ast" 842 | version = "1.5.4" 843 | description = "a fork of Python 2 and 3 ast modules with type comment support" 844 | category = "dev" 845 | optional = false 846 | python-versions = ">=3.6" 847 | 848 | [[package]] 849 | name = "typing-extensions" 850 | version = "4.3.0" 851 | description = "Backported and Experimental Type Hints for Python 3.7+" 852 | category = "main" 853 | optional = false 854 | python-versions = ">=3.7" 855 | 856 | [[package]] 857 | name = "urllib3" 858 | version = "1.22" 859 | description = "HTTP library with thread-safe connection pooling, file post, and more." 860 | category = "main" 861 | optional = false 862 | python-versions = "*" 863 | 864 | [package.extras] 865 | secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] 866 | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] 867 | 868 | [[package]] 869 | name = "werkzeug" 870 | version = "2.1.2" 871 | description = "The comprehensive WSGI web application library." 872 | category = "main" 873 | optional = false 874 | python-versions = ">=3.7" 875 | 876 | [package.extras] 877 | watchdog = ["watchdog"] 878 | 879 | [[package]] 880 | name = "wmctrl" 881 | version = "0.4" 882 | description = "A tool to programmatically control windows inside X" 883 | category = "dev" 884 | optional = false 885 | python-versions = "*" 886 | 887 | [[package]] 888 | name = "zipp" 889 | version = "3.8.1" 890 | description = "Backport of pathlib-compatible object wrapper for zip files" 891 | category = "main" 892 | optional = false 893 | python-versions = ">=3.7" 894 | 895 | [package.extras] 896 | docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] 897 | testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] 898 | 899 | [metadata] 900 | lock-version = "1.1" 901 | python-versions = ">=3.7.3" 902 | content-hash = "f24762a7c4bc867cccb53f1f53546658945479e46e80a4b7e8cf654ceb8ea6d1" 903 | 904 | [metadata.files] 905 | agate = [ 906 | {file = "agate-1.6.3-py2.py3-none-any.whl", hash = "sha256:2d568fd68a8eb8b56c805a1299ba4bc30ca0434563be1bea309c9d1c1c8401f4"}, 907 | {file = "agate-1.6.3.tar.gz", hash = "sha256:e0f2f813f7e12311a4cdccc97d6ba0a6781e9c1aa8eca0ab00d5931c0113a308"}, 908 | ] 909 | attrs = [ 910 | {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, 911 | {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, 912 | ] 913 | babel = [] 914 | black = [ 915 | {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, 916 | {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, 917 | {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, 918 | {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, 919 | {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, 920 | {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, 921 | {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, 922 | {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, 923 | {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, 924 | {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, 925 | {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, 926 | {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, 927 | {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, 928 | {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, 929 | {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, 930 | {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, 931 | {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, 932 | {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, 933 | {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, 934 | {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, 935 | {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, 936 | {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, 937 | {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, 938 | ] 939 | cachetools = [ 940 | {file = "cachetools-3.1.1-py2.py3-none-any.whl", hash = "sha256:428266a1c0d36dc5aca63a2d7c5942e88c2c898d72139fca0e97fdd2380517ae"}, 941 | {file = "cachetools-3.1.1.tar.gz", hash = "sha256:8ea2d3ce97850f31e4a08b0e2b5e6c34997d7216a9d2c98e0f3978630d4da69a"}, 942 | ] 943 | certifi = [] 944 | cffi = [] 945 | charset-normalizer = [ 946 | {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, 947 | {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, 948 | ] 949 | click = [ 950 | {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, 951 | {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, 952 | ] 953 | colorama = [ 954 | {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, 955 | {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, 956 | ] 957 | dbt-bigquery = [ 958 | {file = "dbt-bigquery-1.1.1.tar.gz", hash = "sha256:ff584a2e6a3c0b21ad72469b4db1c1991685fdb269b862fecd43e9a297cd44c6"}, 959 | {file = "dbt_bigquery-1.1.1-py3-none-any.whl", hash = "sha256:7d35b2809344509115c51de3142c85f12fc3fc75dcf6434ee2c8295b0e685f18"}, 960 | ] 961 | dbt-core = [ 962 | {file = "dbt-core-1.1.2.tar.gz", hash = "sha256:e944eae2e2de07e418b5b6b6fe423772c89be6fa582d82ca5c5aa5cc7c53461e"}, 963 | {file = "dbt_core-1.1.2-py3-none-any.whl", hash = "sha256:bf957af91d4d7044f21c8a6ee3503b8e0edba81da2d914cefa49b06230d2f60f"}, 964 | ] 965 | dbt-extractor = [ 966 | {file = "dbt_extractor-0.4.1-cp36-abi3-macosx_10_7_x86_64.whl", hash = "sha256:4dc715bd740e418d8dc1dd418fea508e79208a24cf5ab110b0092a3cbe96bf71"}, 967 | {file = "dbt_extractor-0.4.1-cp36-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:bc9e0050e3a2f4ea9fe58e8794bc808e6709a0c688ed710fc7c5b6ef3e5623ec"}, 968 | {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76872cdee659075d6ce2df92dc62e59a74ba571be62acab2e297ca478b49d766"}, 969 | {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81435841610be1b07806d72cd89b1956c6e2a84c360b9ceb3f949c62a546d569"}, 970 | {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7c291f9f483eae4f60dd5859097d7ba51d5cb6c4725f08973ebd18cdea89d758"}, 971 | {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:822b1e911db230e1b9701c99896578e711232001027b518c44c32f79a46fa3f9"}, 972 | {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:554d27741a54599c39e5c0b7dbcab77400d83f908caba284a3e960db812e5814"}, 973 | {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a805d51a25317f53cbff951c79b9cf75421cf48e4b3e1dfb3e9e8de6d824b76c"}, 974 | {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cad90ddc708cb4182dc16fe2c87b1f088a1679877b93e641af068eb68a25d582"}, 975 | {file = "dbt_extractor-0.4.1-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:34783d788b133f223844e280e37b3f5244f2fb60acc457aa75c2667e418d5442"}, 976 | {file = "dbt_extractor-0.4.1-cp36-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:9da211869a1220ea55c5552c1567a3ea5233a6c52fa89ca87a22465481c37bc9"}, 977 | {file = "dbt_extractor-0.4.1-cp36-abi3-musllinux_1_2_i686.whl", hash = "sha256:7d7c47774dc051b8c18690281a55e2e3d3320e823b17e04b06bc3ff81b1874ba"}, 978 | {file = "dbt_extractor-0.4.1-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:037907a7c7ae0391045d81338ca77ddaef899a91d80f09958f09fe374594e19b"}, 979 | {file = "dbt_extractor-0.4.1-cp36-abi3-win32.whl", hash = "sha256:3fe8d8e28a7bd3e0884896147269ca0202ca432d8733113386bdc84c824561bf"}, 980 | {file = "dbt_extractor-0.4.1-cp36-abi3-win_amd64.whl", hash = "sha256:35265a0ae0a250623b0c2e3308b2738dc8212e40e0aa88407849e9ea090bb312"}, 981 | {file = "dbt_extractor-0.4.1.tar.gz", hash = "sha256:75b1c665699ec0f1ffce1ba3d776f7dfce802156f22e70a7b9c8f0b4d7e80f42"}, 982 | ] 983 | dbt-postgres = [ 984 | {file = "dbt-postgres-1.1.2.tar.gz", hash = "sha256:7f56bc912afb0d846e83a9a7593839b6de4363c36dd03e911ee81c03c01ba007"}, 985 | {file = "dbt_postgres-1.1.2-py3-none-any.whl", hash = "sha256:2764cb37af4e62eb18a0d66a820a71a8939aef98eb80257739aade7b2a8792d9"}, 986 | ] 987 | dbt-prql = [] 988 | fancycompleter = [ 989 | {file = "fancycompleter-0.9.1-py3-none-any.whl", hash = "sha256:dd076bca7d9d524cc7f25ec8f35ef95388ffef9ef46def4d3d25e9b044ad7080"}, 990 | {file = "fancycompleter-0.9.1.tar.gz", hash = "sha256:09e0feb8ae242abdfd7ef2ba55069a46f011814a80fe5476be48f51b00247272"}, 991 | ] 992 | flake8 = [ 993 | {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, 994 | {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, 995 | ] 996 | future = [ 997 | {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, 998 | ] 999 | google-api-core = [ 1000 | {file = "google-api-core-2.8.2.tar.gz", hash = "sha256:06f7244c640322b508b125903bb5701bebabce8832f85aba9335ec00b3d02edc"}, 1001 | {file = "google_api_core-2.8.2-py3-none-any.whl", hash = "sha256:93c6a91ccac79079ac6bbf8b74ee75db970cc899278b97d53bc012f35908cf50"}, 1002 | ] 1003 | google-auth = [ 1004 | {file = "google-auth-2.10.0.tar.gz", hash = "sha256:7904dbd44b745c7323fef29565adee2fe7ff48473e2d94443aced40b0404a395"}, 1005 | {file = "google_auth-2.10.0-py2.py3-none-any.whl", hash = "sha256:1deba4a54f95ef67b4139eaf5c20eaa7047215eec9f6a2344599b8596db8863b"}, 1006 | ] 1007 | google-cloud-bigquery = [] 1008 | google-cloud-core = [ 1009 | {file = "google-cloud-core-2.3.2.tar.gz", hash = "sha256:b9529ee7047fd8d4bf4a2182de619154240df17fbe60ead399078c1ae152af9a"}, 1010 | {file = "google_cloud_core-2.3.2-py2.py3-none-any.whl", hash = "sha256:8417acf6466be2fa85123441696c4badda48db314c607cf1e5d543fa8bdc22fe"}, 1011 | ] 1012 | google-crc32c = [ 1013 | {file = "google-crc32c-1.3.0.tar.gz", hash = "sha256:276de6273eb074a35bc598f8efbc00c7869c5cf2e29c90748fccc8c898c244df"}, 1014 | {file = "google_crc32c-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cb6994fff247987c66a8a4e550ef374671c2b82e3c0d2115e689d21e511a652d"}, 1015 | {file = "google_crc32c-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9da0a39b53d2fab3e5467329ed50e951eb91386e9d0d5b12daf593973c3b168"}, 1016 | {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:eb0b14523758e37802f27b7f8cd973f5f3d33be7613952c0df904b68c4842f0e"}, 1017 | {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:95c68a4b9b7828ba0428f8f7e3109c5d476ca44996ed9a5f8aac6269296e2d59"}, 1018 | {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c3cf890c3c0ecfe1510a452a165431b5831e24160c5fcf2071f0f85ca5a47cd"}, 1019 | {file = "google_crc32c-1.3.0-cp310-cp310-win32.whl", hash = "sha256:3bbce1be3687bbfebe29abdb7631b83e6b25da3f4e1856a1611eb21854b689ea"}, 1020 | {file = "google_crc32c-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:c124b8c8779bf2d35d9b721e52d4adb41c9bfbde45e6a3f25f0820caa9aba73f"}, 1021 | {file = "google_crc32c-1.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:42ae4781333e331a1743445931b08ebdad73e188fd554259e772556fc4937c48"}, 1022 | {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ff71073ebf0e42258a42a0b34f2c09ec384977e7f6808999102eedd5b49920e3"}, 1023 | {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fe31de3002e7b08eb20823b3735b97c86c5926dd0581c7710a680b418a8709d4"}, 1024 | {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd7760a88a8d3d705ff562aa93f8445ead54f58fd482e4f9e2bafb7e177375d4"}, 1025 | {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0b9e622c3b2b8d0ce32f77eba617ab0d6768b82836391e4f8f9e2074582bf02"}, 1026 | {file = "google_crc32c-1.3.0-cp36-cp36m-win32.whl", hash = "sha256:779cbf1ce375b96111db98fca913c1f5ec11b1d870e529b1dc7354b2681a8c3a"}, 1027 | {file = "google_crc32c-1.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:04e7c220798a72fd0f08242bc8d7a05986b2a08a0573396187fd32c1dcdd58b3"}, 1028 | {file = "google_crc32c-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e7a539b9be7b9c00f11ef16b55486141bc2cdb0c54762f84e3c6fc091917436d"}, 1029 | {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ca60076c388728d3b6ac3846842474f4250c91efbfe5afa872d3ffd69dd4b318"}, 1030 | {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05340b60bf05b574159e9bd940152a47d38af3fb43803ffe71f11d704b7696a6"}, 1031 | {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:318f73f5484b5671f0c7f5f63741ab020a599504ed81d209b5c7129ee4667407"}, 1032 | {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f58099ad7affc0754ae42e6d87443299f15d739b0ce03c76f515153a5cda06c"}, 1033 | {file = "google_crc32c-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:f52a4ad2568314ee713715b1e2d79ab55fab11e8b304fd1462ff5cccf4264b3e"}, 1034 | {file = "google_crc32c-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:bab4aebd525218bab4ee615786c4581952eadc16b1ff031813a2fd51f0cc7b08"}, 1035 | {file = "google_crc32c-1.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dda4d8a3bb0b50f540f6ff4b6033f3a74e8bf0bd5320b70fab2c03e512a62812"}, 1036 | {file = "google_crc32c-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fec221a051150eeddfdfcff162e6db92c65ecf46cb0f7bb1bf812a1520ec026b"}, 1037 | {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:226f2f9b8e128a6ca6a9af9b9e8384f7b53a801907425c9a292553a3a7218ce0"}, 1038 | {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7f9cbea4245ee36190f85fe1814e2d7b1e5f2186381b082f5d59f99b7f11328"}, 1039 | {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a4db36f9721fdf391646685ecffa404eb986cbe007a3289499020daf72e88a2"}, 1040 | {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:12674a4c3b56b706153a358eaa1018c4137a5a04635b92b4652440d3d7386206"}, 1041 | {file = "google_crc32c-1.3.0-cp38-cp38-win32.whl", hash = "sha256:650e2917660e696041ab3dcd7abac160b4121cd9a484c08406f24c5964099829"}, 1042 | {file = "google_crc32c-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:58be56ae0529c664cc04a9c76e68bb92b091e0194d6e3c50bea7e0f266f73713"}, 1043 | {file = "google_crc32c-1.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:96a8918a78d5d64e07c8ea4ed2bc44354e3f93f46a4866a40e8db934e4c0d74b"}, 1044 | {file = "google_crc32c-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:13af315c3a0eec8bb8b8d80b8b128cb3fcd17d7e4edafc39647846345a3f003a"}, 1045 | {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6311853aa2bba4064d0c28ca54e7b50c4d48e3de04f6770f6c60ebda1e975267"}, 1046 | {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed447680ff21c14aaceb6a9f99a5f639f583ccfe4ce1a5e1d48eb41c3d6b3217"}, 1047 | {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1c1d6236feab51200272d79b3d3e0f12cf2cbb12b208c835b175a21efdb0a73"}, 1048 | {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e0f1ff55dde0ebcfbef027edc21f71c205845585fffe30d4ec4979416613e9b3"}, 1049 | {file = "google_crc32c-1.3.0-cp39-cp39-win32.whl", hash = "sha256:fbd60c6aaa07c31d7754edbc2334aef50601b7f1ada67a96eb1eb57c7c72378f"}, 1050 | {file = "google_crc32c-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:127f9cc3ac41b6a859bd9dc4321097b1a4f6aa7fdf71b4f9227b9e3ebffb4422"}, 1051 | {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fc28e0db232c62ca0c3600884933178f0825c99be4474cdd645e378a10588125"}, 1052 | {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1926fd8de0acb9d15ee757175ce7242e235482a783cd4ec711cc999fc103c24e"}, 1053 | {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5da2c81575cc3ccf05d9830f9e8d3c70954819ca9a63828210498c0774fda1a3"}, 1054 | {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f712ce54e0d631370e1f4997b3f182f3368179198efc30d477c75d1f44942"}, 1055 | {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7f6fe42536d9dcd3e2ffb9d3053f5d05221ae3bbcefbe472bdf2c71c793e3183"}, 1056 | ] 1057 | google-resumable-media = [ 1058 | {file = "google-resumable-media-1.3.3.tar.gz", hash = "sha256:ce38555d250bd70b0c2598bf61e99003cb8c569b0176ec0e3f38b86f9ffff581"}, 1059 | {file = "google_resumable_media-1.3.3-py2.py3-none-any.whl", hash = "sha256:092f39153cd67a4e409924edf08129f43cc72e630a1eb22abec93e80155df4ba"}, 1060 | ] 1061 | googleapis-common-protos = [ 1062 | {file = "googleapis-common-protos-1.56.4.tar.gz", hash = "sha256:c25873c47279387cfdcbdafa36149887901d36202cb645a0e4f29686bf6e4417"}, 1063 | {file = "googleapis_common_protos-1.56.4-py2.py3-none-any.whl", hash = "sha256:8eb2cbc91b69feaf23e32452a7ae60e791e09967d81d4fcc7fc388182d1bd394"}, 1064 | ] 1065 | hologram = [] 1066 | idna = [ 1067 | {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, 1068 | {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, 1069 | ] 1070 | importlib-metadata = [ 1071 | {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"}, 1072 | {file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"}, 1073 | ] 1074 | isodate = [ 1075 | {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, 1076 | {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, 1077 | ] 1078 | jinja2 = [ 1079 | {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, 1080 | {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, 1081 | ] 1082 | jsonschema = [] 1083 | leather = [ 1084 | {file = "leather-0.3.4-py2.py3-none-any.whl", hash = "sha256:5e741daee96e9f1e9e06081b8c8a10c4ac199301a0564cdd99b09df15b4603d2"}, 1085 | {file = "leather-0.3.4.tar.gz", hash = "sha256:b43e21c8fa46b2679de8449f4d953c06418666dc058ce41055ee8a8d3bb40918"}, 1086 | ] 1087 | logbook = [ 1088 | {file = "Logbook-1.5.3-cp27-cp27m-win32.whl", hash = "sha256:56ee54c11df3377314cedcd6507638f015b4b88c0238c2e01b5eb44fd3a6ad1b"}, 1089 | {file = "Logbook-1.5.3-cp27-cp27m-win_amd64.whl", hash = "sha256:2dc85f1510533fddb481e97677bb7bca913560862734c0b3b289bfed04f78c92"}, 1090 | {file = "Logbook-1.5.3-cp35-cp35m-win32.whl", hash = "sha256:94e2e11ff3c2304b0d09a36c6208e5ae756eb948b210e5cbd63cd8d27f911542"}, 1091 | {file = "Logbook-1.5.3-cp35-cp35m-win_amd64.whl", hash = "sha256:97fee1bd9605f76335b169430ed65e15e457a844b2121bd1d90a08cf7e30aba0"}, 1092 | {file = "Logbook-1.5.3-cp36-cp36m-win32.whl", hash = "sha256:7c533eb728b3d220b1b5414ba4635292d149d79f74f6973b4aa744c850ca944a"}, 1093 | {file = "Logbook-1.5.3-cp36-cp36m-win_amd64.whl", hash = "sha256:e18f7422214b1cf0240c56f884fd9c9b4ff9d0da2eabca9abccba56df7222f66"}, 1094 | {file = "Logbook-1.5.3-cp37-cp37m-win32.whl", hash = "sha256:8f76a2e7b1f72595f753228732f81ce342caf03babc3fed6bbdcf366f2f20f18"}, 1095 | {file = "Logbook-1.5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0cf2cdbfb65a03b5987d19109dacad13417809dcf697f66e1a7084fb21744ea9"}, 1096 | {file = "Logbook-1.5.3.tar.gz", hash = "sha256:66f454ada0f56eae43066f604a222b09893f98c1adc18df169710761b8f32fe8"}, 1097 | ] 1098 | markupsafe = [ 1099 | {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, 1100 | {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, 1101 | {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, 1102 | {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, 1103 | {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, 1104 | {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, 1105 | {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, 1106 | {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, 1107 | {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, 1108 | {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, 1109 | {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, 1110 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, 1111 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, 1112 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, 1113 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, 1114 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, 1115 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, 1116 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, 1117 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, 1118 | {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, 1119 | {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, 1120 | {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, 1121 | {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, 1122 | {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, 1123 | {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, 1124 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, 1125 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, 1126 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, 1127 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, 1128 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, 1129 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, 1130 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, 1131 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, 1132 | {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, 1133 | {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, 1134 | {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, 1135 | {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, 1136 | {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, 1137 | {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, 1138 | {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, 1139 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, 1140 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, 1141 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, 1142 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, 1143 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, 1144 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, 1145 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, 1146 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, 1147 | {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, 1148 | {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, 1149 | {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, 1150 | {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, 1151 | {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, 1152 | {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, 1153 | {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, 1154 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, 1155 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, 1156 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, 1157 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, 1158 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, 1159 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, 1160 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, 1161 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, 1162 | {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, 1163 | {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, 1164 | {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, 1165 | {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, 1166 | {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, 1167 | {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, 1168 | ] 1169 | mashumaro = [ 1170 | {file = "mashumaro-2.9-py3-none-any.whl", hash = "sha256:f616df410d82936b8bb2b4d32af570556685d77f49acf4228134b50230a69799"}, 1171 | {file = "mashumaro-2.9.tar.gz", hash = "sha256:343b6e2d3e432e31973688c4c8821dcd6ef41fd33264b992afc4aecbfd155f18"}, 1172 | ] 1173 | mccabe = [ 1174 | {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, 1175 | {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, 1176 | ] 1177 | minimal-snowplow-tracker = [ 1178 | {file = "minimal-snowplow-tracker-0.0.2.tar.gz", hash = "sha256:acabf7572db0e7f5cbf6983d495eef54081f71be392330eb3aadb9ccb39daaa4"}, 1179 | ] 1180 | msgpack = [] 1181 | mypy = [ 1182 | {file = "mypy-0.971-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2899a3cbd394da157194f913a931edfd4be5f274a88041c9dc2d9cdcb1c315c"}, 1183 | {file = "mypy-0.971-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98e02d56ebe93981c41211c05adb630d1d26c14195d04d95e49cd97dbc046dc5"}, 1184 | {file = "mypy-0.971-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:19830b7dba7d5356d3e26e2427a2ec91c994cd92d983142cbd025ebe81d69cf3"}, 1185 | {file = "mypy-0.971-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:02ef476f6dcb86e6f502ae39a16b93285fef97e7f1ff22932b657d1ef1f28655"}, 1186 | {file = "mypy-0.971-cp310-cp310-win_amd64.whl", hash = "sha256:25c5750ba5609a0c7550b73a33deb314ecfb559c350bb050b655505e8aed4103"}, 1187 | {file = "mypy-0.971-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d3348e7eb2eea2472db611486846742d5d52d1290576de99d59edeb7cd4a42ca"}, 1188 | {file = "mypy-0.971-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fa7a477b9900be9b7dd4bab30a12759e5abe9586574ceb944bc29cddf8f0417"}, 1189 | {file = "mypy-0.971-cp36-cp36m-win_amd64.whl", hash = "sha256:2ad53cf9c3adc43cf3bea0a7d01a2f2e86db9fe7596dfecb4496a5dda63cbb09"}, 1190 | {file = "mypy-0.971-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:855048b6feb6dfe09d3353466004490b1872887150c5bb5caad7838b57328cc8"}, 1191 | {file = "mypy-0.971-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:23488a14a83bca6e54402c2e6435467a4138785df93ec85aeff64c6170077fb0"}, 1192 | {file = "mypy-0.971-cp37-cp37m-win_amd64.whl", hash = "sha256:4b21e5b1a70dfb972490035128f305c39bc4bc253f34e96a4adf9127cf943eb2"}, 1193 | {file = "mypy-0.971-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9796a2ba7b4b538649caa5cecd398d873f4022ed2333ffde58eaf604c4d2cb27"}, 1194 | {file = "mypy-0.971-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a361d92635ad4ada1b1b2d3630fc2f53f2127d51cf2def9db83cba32e47c856"}, 1195 | {file = "mypy-0.971-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b793b899f7cf563b1e7044a5c97361196b938e92f0a4343a5d27966a53d2ec71"}, 1196 | {file = "mypy-0.971-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1ea5d12c8e2d266b5fb8c7a5d2e9c0219fedfeb493b7ed60cd350322384ac27"}, 1197 | {file = "mypy-0.971-cp38-cp38-win_amd64.whl", hash = "sha256:23c7ff43fff4b0df93a186581885c8512bc50fc4d4910e0f838e35d6bb6b5e58"}, 1198 | {file = "mypy-0.971-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f7656b69974a6933e987ee8ffb951d836272d6c0f81d727f1d0e2696074d9e6"}, 1199 | {file = "mypy-0.971-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2022bfadb7a5c2ef410d6a7c9763188afdb7f3533f22a0a32be10d571ee4bbe"}, 1200 | {file = "mypy-0.971-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef943c72a786b0f8d90fd76e9b39ce81fb7171172daf84bf43eaf937e9f220a9"}, 1201 | {file = "mypy-0.971-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d744f72eb39f69312bc6c2abf8ff6656973120e2eb3f3ec4f758ed47e414a4bf"}, 1202 | {file = "mypy-0.971-cp39-cp39-win_amd64.whl", hash = "sha256:77a514ea15d3007d33a9e2157b0ba9c267496acf12a7f2b9b9f8446337aac5b0"}, 1203 | {file = "mypy-0.971-py3-none-any.whl", hash = "sha256:0d054ef16b071149917085f51f89555a576e2618d5d9dd70bd6eea6410af3ac9"}, 1204 | {file = "mypy-0.971.tar.gz", hash = "sha256:40b0f21484238269ae6a57200c807d80debc6459d444c0489a102d7c6a75fa56"}, 1205 | ] 1206 | mypy-extensions = [ 1207 | {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, 1208 | {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, 1209 | ] 1210 | networkx = [ 1211 | {file = "networkx-2.6.3-py3-none-any.whl", hash = "sha256:80b6b89c77d1dfb64a4c7854981b60aeea6360ac02c6d4e4913319e0a313abef"}, 1212 | {file = "networkx-2.6.3.tar.gz", hash = "sha256:c0946ed31d71f1b732b5aaa6da5a0388a345019af232ce2f49c766e2d6795c51"}, 1213 | ] 1214 | packaging = [ 1215 | {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, 1216 | {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, 1217 | ] 1218 | parsedatetime = [ 1219 | {file = "parsedatetime-2.4-py2-none-any.whl", hash = "sha256:9ee3529454bf35c40a77115f5a596771e59e1aee8c53306f346c461b8e913094"}, 1220 | {file = "parsedatetime-2.4.tar.gz", hash = "sha256:3d817c58fb9570d1eec1dd46fa9448cd644eeed4fb612684b02dfda3a79cb84b"}, 1221 | ] 1222 | pathspec = [ 1223 | {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, 1224 | {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, 1225 | ] 1226 | pdbpp = [ 1227 | {file = "pdbpp-0.10.3-py2.py3-none-any.whl", hash = "sha256:79580568e33eb3d6f6b462b1187f53e10cd8e4538f7d31495c9181e2cf9665d1"}, 1228 | {file = "pdbpp-0.10.3.tar.gz", hash = "sha256:d9e43f4fda388eeb365f2887f4e7b66ac09dce9b6236b76f63616530e2f669f5"}, 1229 | ] 1230 | platformdirs = [ 1231 | {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, 1232 | {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, 1233 | ] 1234 | protobuf = [ 1235 | {file = "protobuf-3.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996"}, 1236 | {file = "protobuf-3.20.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"}, 1237 | {file = "protobuf-3.20.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cd68be2559e2a3b84f517fb029ee611546f7812b1fdd0aa2ecc9bc6ec0e4fdde"}, 1238 | {file = "protobuf-3.20.1-cp310-cp310-win32.whl", hash = "sha256:9016d01c91e8e625141d24ec1b20fed584703e527d28512aa8c8707f105a683c"}, 1239 | {file = "protobuf-3.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:32ca378605b41fd180dfe4e14d3226386d8d1b002ab31c969c366549e66a2bb7"}, 1240 | {file = "protobuf-3.20.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9be73ad47579abc26c12024239d3540e6b765182a91dbc88e23658ab71767153"}, 1241 | {file = "protobuf-3.20.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:097c5d8a9808302fb0da7e20edf0b8d4703274d140fd25c5edabddcde43e081f"}, 1242 | {file = "protobuf-3.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20"}, 1243 | {file = "protobuf-3.20.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cdee09140e1cd184ba9324ec1df410e7147242b94b5f8b0c64fc89e38a8ba531"}, 1244 | {file = "protobuf-3.20.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:af0ebadc74e281a517141daad9d0f2c5d93ab78e9d455113719a45a49da9db4e"}, 1245 | {file = "protobuf-3.20.1-cp37-cp37m-win32.whl", hash = "sha256:755f3aee41354ae395e104d62119cb223339a8f3276a0cd009ffabfcdd46bb0c"}, 1246 | {file = "protobuf-3.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:62f1b5c4cd6c5402b4e2d63804ba49a327e0c386c99b1675c8a0fefda23b2067"}, 1247 | {file = "protobuf-3.20.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:06059eb6953ff01e56a25cd02cca1a9649a75a7e65397b5b9b4e929ed71d10cf"}, 1248 | {file = "protobuf-3.20.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:cb29edb9eab15742d791e1025dd7b6a8f6fcb53802ad2f6e3adcb102051063ab"}, 1249 | {file = "protobuf-3.20.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:69ccfdf3657ba59569c64295b7d51325f91af586f8d5793b734260dfe2e94e2c"}, 1250 | {file = "protobuf-3.20.1-cp38-cp38-win32.whl", hash = "sha256:dd5789b2948ca702c17027c84c2accb552fc30f4622a98ab5c51fcfe8c50d3e7"}, 1251 | {file = "protobuf-3.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:77053d28427a29987ca9caf7b72ccafee011257561259faba8dd308fda9a8739"}, 1252 | {file = "protobuf-3.20.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f50601512a3d23625d8a85b1638d914a0970f17920ff39cec63aaef80a93fb7"}, 1253 | {file = "protobuf-3.20.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:284f86a6207c897542d7e956eb243a36bb8f9564c1742b253462386e96c6b78f"}, 1254 | {file = "protobuf-3.20.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7403941f6d0992d40161aa8bb23e12575637008a5a02283a930addc0508982f9"}, 1255 | {file = "protobuf-3.20.1-cp39-cp39-win32.whl", hash = "sha256:db977c4ca738dd9ce508557d4fce0f5aebd105e158c725beec86feb1f6bc20d8"}, 1256 | {file = "protobuf-3.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:7e371f10abe57cee5021797126c93479f59fccc9693dafd6bd5633ab67808a91"}, 1257 | {file = "protobuf-3.20.1-py2.py3-none-any.whl", hash = "sha256:adfc6cf69c7f8c50fd24c793964eef18f0ac321315439d94945820612849c388"}, 1258 | {file = "protobuf-3.20.1.tar.gz", hash = "sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9"}, 1259 | ] 1260 | prql-python = [ 1261 | {file = "prql_python-0.2.6-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:616d092486d34c8bb467c4c45fe1a35ed9d7ba6dbdd10dcc5aae51670b9b2ccf"}, 1262 | {file = "prql_python-0.2.6-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ce197e4e5122139f6618325fbaea435e903d131296d9741b9c9a845afc5909a9"}, 1263 | {file = "prql_python-0.2.6-cp37-abi3-win_amd64.whl", hash = "sha256:3314ca0e75d74716909ebe4991b28149668c07bfe7e01734313d7231186af384"}, 1264 | {file = "prql_python-0.2.6.tar.gz", hash = "sha256:0e5fcf521aa37042ebb0abf365894bd12eb64337c11180b035ffb12d5435a69b"}, 1265 | ] 1266 | psycopg2-binary = [ 1267 | {file = "psycopg2-binary-2.9.3.tar.gz", hash = "sha256:761df5313dc15da1502b21453642d7599d26be88bff659382f8f9747c7ebea4e"}, 1268 | {file = "psycopg2_binary-2.9.3-cp310-cp310-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:539b28661b71da7c0e428692438efbcd048ca21ea81af618d845e06ebfd29478"}, 1269 | {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e82d38390a03da28c7985b394ec3f56873174e2c88130e6966cb1c946508e65"}, 1270 | {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57804fc02ca3ce0dbfbef35c4b3a4a774da66d66ea20f4bda601294ad2ea6092"}, 1271 | {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:083a55275f09a62b8ca4902dd11f4b33075b743cf0d360419e2051a8a5d5ff76"}, 1272 | {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_ppc64le.whl", hash = "sha256:0a29729145aaaf1ad8bafe663131890e2111f13416b60e460dae0a96af5905c9"}, 1273 | {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a79d622f5206d695d7824cbf609a4f5b88ea6d6dab5f7c147fc6d333a8787e4"}, 1274 | {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:090f3348c0ab2cceb6dfbe6bf721ef61262ddf518cd6cc6ecc7d334996d64efa"}, 1275 | {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a9e1f75f96ea388fbcef36c70640c4efbe4650658f3d6a2967b4cc70e907352e"}, 1276 | {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c3ae8e75eb7160851e59adc77b3a19a976e50622e44fd4fd47b8b18208189d42"}, 1277 | {file = "psycopg2_binary-2.9.3-cp310-cp310-win32.whl", hash = "sha256:7b1e9b80afca7b7a386ef087db614faebbf8839b7f4db5eb107d0f1a53225029"}, 1278 | {file = "psycopg2_binary-2.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:8b344adbb9a862de0c635f4f0425b7958bf5a4b927c8594e6e8d261775796d53"}, 1279 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:e847774f8ffd5b398a75bc1c18fbb56564cda3d629fe68fd81971fece2d3c67e"}, 1280 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68641a34023d306be959101b345732360fc2ea4938982309b786f7be1b43a4a1"}, 1281 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3303f8807f342641851578ee7ed1f3efc9802d00a6f83c101d21c608cb864460"}, 1282 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:e3699852e22aa68c10de06524a3721ade969abf382da95884e6a10ff798f9281"}, 1283 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_ppc64le.whl", hash = "sha256:526ea0378246d9b080148f2d6681229f4b5964543c170dd10bf4faaab6e0d27f"}, 1284 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b1c8068513f5b158cf7e29c43a77eb34b407db29aca749d3eb9293ee0d3103ca"}, 1285 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:15803fa813ea05bef089fa78835118b5434204f3a17cb9f1e5dbfd0b9deea5af"}, 1286 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:152f09f57417b831418304c7f30d727dc83a12761627bb826951692cc6491e57"}, 1287 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:404224e5fef3b193f892abdbf8961ce20e0b6642886cfe1fe1923f41aaa75c9d"}, 1288 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-win32.whl", hash = "sha256:1f6b813106a3abdf7b03640d36e24669234120c72e91d5cbaeb87c5f7c36c65b"}, 1289 | {file = "psycopg2_binary-2.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:2d872e3c9d5d075a2e104540965a1cf898b52274a5923936e5bfddb58c59c7c2"}, 1290 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:10bb90fb4d523a2aa67773d4ff2b833ec00857f5912bafcfd5f5414e45280fb1"}, 1291 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a52ecab70af13e899f7847b3e074eeb16ebac5615665db33bce8a1009cf33"}, 1292 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a29b3ca4ec9defec6d42bf5feb36bb5817ba3c0230dd83b4edf4bf02684cd0ae"}, 1293 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:12b11322ea00ad8db8c46f18b7dfc47ae215e4df55b46c67a94b4effbaec7094"}, 1294 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_ppc64le.whl", hash = "sha256:53293533fcbb94c202b7c800a12c873cfe24599656b341f56e71dd2b557be063"}, 1295 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c381bda330ddf2fccbafab789d83ebc6c53db126e4383e73794c74eedce855ef"}, 1296 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d29409b625a143649d03d0fd7b57e4b92e0ecad9726ba682244b73be91d2fdb"}, 1297 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:183a517a3a63503f70f808b58bfbf962f23d73b6dccddae5aa56152ef2bcb232"}, 1298 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:15c4e4cfa45f5a60599d9cec5f46cd7b1b29d86a6390ec23e8eebaae84e64554"}, 1299 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-win32.whl", hash = "sha256:adf20d9a67e0b6393eac162eb81fb10bc9130a80540f4df7e7355c2dd4af9fba"}, 1300 | {file = "psycopg2_binary-2.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f9ffd643bc7349eeb664eba8864d9e01f057880f510e4681ba40a6532f93c71"}, 1301 | {file = "psycopg2_binary-2.9.3-cp38-cp38-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:def68d7c21984b0f8218e8a15d514f714d96904265164f75f8d3a70f9c295667"}, 1302 | {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dffc08ca91c9ac09008870c9eb77b00a46b3378719584059c034b8945e26b272"}, 1303 | {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:280b0bb5cbfe8039205c7981cceb006156a675362a00fe29b16fbc264e242834"}, 1304 | {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:af9813db73395fb1fc211bac696faea4ca9ef53f32dc0cfa27e4e7cf766dcf24"}, 1305 | {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_ppc64le.whl", hash = "sha256:63638d875be8c2784cfc952c9ac34e2b50e43f9f0a0660b65e2a87d656b3116c"}, 1306 | {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd"}, 1307 | {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0c9d5450c566c80c396b7402895c4369a410cab5a82707b11aee1e624da7d004"}, 1308 | {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:d1c1b569ecafe3a69380a94e6ae09a4789bbb23666f3d3a08d06bbd2451f5ef1"}, 1309 | {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8fc53f9af09426a61db9ba357865c77f26076d48669f2e1bb24d85a22fb52307"}, 1310 | {file = "psycopg2_binary-2.9.3-cp38-cp38-win32.whl", hash = "sha256:6472a178e291b59e7f16ab49ec8b4f3bdada0a879c68d3817ff0963e722a82ce"}, 1311 | {file = "psycopg2_binary-2.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:35168209c9d51b145e459e05c31a9eaeffa9a6b0fd61689b48e07464ffd1a83e"}, 1312 | {file = "psycopg2_binary-2.9.3-cp39-cp39-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:47133f3f872faf28c1e87d4357220e809dfd3fa7c64295a4a148bcd1e6e34ec9"}, 1313 | {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91920527dea30175cc02a1099f331aa8c1ba39bf8b7762b7b56cbf54bc5cce42"}, 1314 | {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887dd9aac71765ac0d0bac1d0d4b4f2c99d5f5c1382d8b770404f0f3d0ce8a39"}, 1315 | {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:1f14c8b0942714eb3c74e1e71700cbbcb415acbc311c730370e70c578a44a25c"}, 1316 | {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_ppc64le.whl", hash = "sha256:7af0dd86ddb2f8af5da57a976d27cd2cd15510518d582b478fbb2292428710b4"}, 1317 | {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93cd1967a18aa0edd4b95b1dfd554cf15af657cb606280996d393dadc88c3c35"}, 1318 | {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bda845b664bb6c91446ca9609fc69f7db6c334ec5e4adc87571c34e4f47b7ddb"}, 1319 | {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:01310cf4cf26db9aea5158c217caa92d291f0500051a6469ac52166e1a16f5b7"}, 1320 | {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:99485cab9ba0fa9b84f1f9e1fef106f44a46ef6afdeec8885e0b88d0772b49e8"}, 1321 | {file = "psycopg2_binary-2.9.3-cp39-cp39-win32.whl", hash = "sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d"}, 1322 | {file = "psycopg2_binary-2.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f"}, 1323 | ] 1324 | pyasn1 = [ 1325 | {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, 1326 | {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"}, 1327 | {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"}, 1328 | {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"}, 1329 | {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, 1330 | {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"}, 1331 | {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"}, 1332 | {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"}, 1333 | {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"}, 1334 | {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"}, 1335 | {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"}, 1336 | {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"}, 1337 | {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, 1338 | ] 1339 | pyasn1-modules = [ 1340 | {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, 1341 | {file = "pyasn1_modules-0.2.8-py2.4.egg", hash = "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199"}, 1342 | {file = "pyasn1_modules-0.2.8-py2.5.egg", hash = "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405"}, 1343 | {file = "pyasn1_modules-0.2.8-py2.6.egg", hash = "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb"}, 1344 | {file = "pyasn1_modules-0.2.8-py2.7.egg", hash = "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8"}, 1345 | {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, 1346 | {file = "pyasn1_modules-0.2.8-py3.1.egg", hash = "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d"}, 1347 | {file = "pyasn1_modules-0.2.8-py3.2.egg", hash = "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45"}, 1348 | {file = "pyasn1_modules-0.2.8-py3.3.egg", hash = "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4"}, 1349 | {file = "pyasn1_modules-0.2.8-py3.4.egg", hash = "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811"}, 1350 | {file = "pyasn1_modules-0.2.8-py3.5.egg", hash = "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed"}, 1351 | {file = "pyasn1_modules-0.2.8-py3.6.egg", hash = "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0"}, 1352 | {file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"}, 1353 | ] 1354 | pycodestyle = [ 1355 | {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, 1356 | {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, 1357 | ] 1358 | pycparser = [ 1359 | {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, 1360 | {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, 1361 | ] 1362 | pyflakes = [ 1363 | {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, 1364 | {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, 1365 | ] 1366 | pygments = [ 1367 | {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, 1368 | {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, 1369 | ] 1370 | pyparsing = [] 1371 | pyreadline = [ 1372 | {file = "pyreadline-2.1.win-amd64.exe", hash = "sha256:9ce5fa65b8992dfa373bddc5b6e0864ead8f291c94fbfec05fbd5c836162e67b"}, 1373 | {file = "pyreadline-2.1.win32.exe", hash = "sha256:65540c21bfe14405a3a77e4c085ecfce88724743a4ead47c66b84defcf82c32e"}, 1374 | {file = "pyreadline-2.1.zip", hash = "sha256:4530592fc2e85b25b1a9f79664433da09237c1a270e4d78ea5aa3a2c7229e2d1"}, 1375 | ] 1376 | pyrepl = [ 1377 | {file = "pyrepl-0.9.0.tar.gz", hash = "sha256:292570f34b5502e871bbb966d639474f2b57fbfcd3373c2d6a2f3d56e681a775"}, 1378 | ] 1379 | pyrsistent = [ 1380 | {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, 1381 | {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, 1382 | {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, 1383 | {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, 1384 | {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, 1385 | {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, 1386 | {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, 1387 | {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, 1388 | {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, 1389 | {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, 1390 | {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, 1391 | {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, 1392 | {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, 1393 | {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, 1394 | {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, 1395 | {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, 1396 | {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, 1397 | {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, 1398 | {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, 1399 | {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, 1400 | {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, 1401 | ] 1402 | python-dateutil = [ 1403 | {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, 1404 | {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, 1405 | ] 1406 | python-slugify = [ 1407 | {file = "python-slugify-6.1.2.tar.gz", hash = "sha256:272d106cb31ab99b3496ba085e3fea0e9e76dcde967b5e9992500d1f785ce4e1"}, 1408 | {file = "python_slugify-6.1.2-py2.py3-none-any.whl", hash = "sha256:7b2c274c308b62f4269a9ba701aa69a797e9bca41aeee5b3a9e79e36b6656927"}, 1409 | ] 1410 | pytimeparse = [ 1411 | {file = "pytimeparse-1.1.8-py2.py3-none-any.whl", hash = "sha256:04b7be6cc8bd9f5647a6325444926c3ac34ee6bc7e69da4367ba282f076036bd"}, 1412 | {file = "pytimeparse-1.1.8.tar.gz", hash = "sha256:e86136477be924d7e670646a98561957e8ca7308d44841e21f5ddea757556a0a"}, 1413 | ] 1414 | pytz = [ 1415 | {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, 1416 | {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, 1417 | ] 1418 | pyyaml = [ 1419 | {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, 1420 | {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, 1421 | {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, 1422 | {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, 1423 | {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, 1424 | {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, 1425 | {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, 1426 | {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, 1427 | {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, 1428 | {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, 1429 | {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, 1430 | {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, 1431 | {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, 1432 | {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, 1433 | {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, 1434 | {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, 1435 | {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, 1436 | {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, 1437 | {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, 1438 | {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, 1439 | {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, 1440 | {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, 1441 | {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, 1442 | {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, 1443 | {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, 1444 | {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, 1445 | {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, 1446 | {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, 1447 | {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, 1448 | {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, 1449 | {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, 1450 | {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, 1451 | {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, 1452 | ] 1453 | requests = [ 1454 | {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, 1455 | {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, 1456 | ] 1457 | rsa = [ 1458 | {file = "rsa-4.4-py2.py3-none-any.whl", hash = "sha256:4afbaaecc3e9550c7351fdf0ab3fea1857ff616b85bab59215f00fb42e0e9582"}, 1459 | {file = "rsa-4.4.tar.gz", hash = "sha256:5d95293bbd0fbee1dd9cb4b72d27b723942eb50584abc8c4f5f00e4bcfa55307"}, 1460 | ] 1461 | six = [ 1462 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 1463 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 1464 | ] 1465 | sqlparse = [ 1466 | {file = "sqlparse-0.4.2-py3-none-any.whl", hash = "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d"}, 1467 | {file = "sqlparse-0.4.2.tar.gz", hash = "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae"}, 1468 | ] 1469 | text-unidecode = [ 1470 | {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, 1471 | {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, 1472 | ] 1473 | tomli = [ 1474 | {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, 1475 | {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, 1476 | ] 1477 | typed-ast = [ 1478 | {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, 1479 | {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, 1480 | {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, 1481 | {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, 1482 | {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, 1483 | {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, 1484 | {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, 1485 | {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, 1486 | {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, 1487 | {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, 1488 | {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, 1489 | {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, 1490 | {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, 1491 | {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, 1492 | {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, 1493 | {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, 1494 | {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, 1495 | {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, 1496 | {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, 1497 | {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, 1498 | {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, 1499 | {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, 1500 | {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, 1501 | {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, 1502 | ] 1503 | typing-extensions = [ 1504 | {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, 1505 | {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, 1506 | ] 1507 | urllib3 = [ 1508 | {file = "urllib3-1.22-py2.py3-none-any.whl", hash = "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b"}, 1509 | {file = "urllib3-1.22.tar.gz", hash = "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"}, 1510 | ] 1511 | werkzeug = [ 1512 | {file = "Werkzeug-2.1.2-py3-none-any.whl", hash = "sha256:72a4b735692dd3135217911cbeaa1be5fa3f62bffb8745c5215420a03dc55255"}, 1513 | {file = "Werkzeug-2.1.2.tar.gz", hash = "sha256:1ce08e8093ed67d638d63879fd1ba3735817f7a80de3674d293f5984f25fb6e6"}, 1514 | ] 1515 | wmctrl = [ 1516 | {file = "wmctrl-0.4.tar.gz", hash = "sha256:66cbff72b0ca06a22ec3883ac3a4d7c41078bdae4fb7310f52951769b10e14e0"}, 1517 | ] 1518 | zipp = [ 1519 | {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, 1520 | {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, 1521 | ] 1522 | -------------------------------------------------------------------------------- /tests/profiles.yml: -------------------------------------------------------------------------------- 1 | prql-test: 2 | target: prql-test-bigquery 3 | outputs: 4 | prql-test-bigquery: 5 | type: bigquery 6 | database: prql-test-db 7 | schema: prql_test_schema 8 | method: oauth 9 | 10 | prql-test-postgres: 11 | type: postgres 12 | database: prql_test_db 13 | schema: prql_test_schema 14 | user: dbt_prql 15 | host: none 16 | port: 1234 17 | password: password 18 | -------------------------------------------------------------------------------- /tests/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | authors = ["Maximilian Roos "] 3 | description = "Test suite for dbt-prql" 4 | homepage = "https://github.com/prql/dbt-prql" 5 | license = "Apache-2.0" 6 | name = "dbt-prql-test" 7 | readme = "README.md" 8 | repository = "https://github.com/prql/dbt-prql" 9 | version = "0" 10 | 11 | [tool.poetry.dependencies] 12 | python = ">=3.7.3" 13 | 14 | # `develop=true` here means `zzz_dbt_prql.pth` isn't installed 15 | dbt-prql = {path = "..", develop = false} 16 | 17 | [tool.poetry.dev-dependencies] 18 | dbt-bigquery = ">=1.1.0,<1.3.0" 19 | dbt-postgres = ">=1.1.0,<1.3.0" 20 | 21 | black = "*" 22 | flake8 = "*" 23 | mypy = "*" 24 | pdbpp = "*" 25 | 26 | [build-system] 27 | build-backend = "poetry.core.masonry.api" 28 | requires = ["poetry-core>=1.0.0"] 29 | 30 | [tool.isort] 31 | default_section = "THIRDPARTY" 32 | float_to_top = true 33 | profile = "black" 34 | skip_gitignore = true 35 | -------------------------------------------------------------------------------- /zzz_dbt_prql.pth: -------------------------------------------------------------------------------- 1 | import dbt_prql.patch as patch; patch.patch_dbt_environment() 2 | --------------------------------------------------------------------------------