squirrels 0.5.0b1__py3-none-any.whl → 0.5.0b3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. dateutils/__init__.py +6 -0
  2. dateutils/_enums.py +25 -0
  3. squirrels/dateutils.py → dateutils/_implementation.py +58 -111
  4. dateutils/types.py +6 -0
  5. squirrels/__init__.py +7 -13
  6. squirrels/_api_server.py +5 -5
  7. squirrels/{arguments/init_time_args.py → _arguments/_init_time_args.py} +2 -2
  8. squirrels/{arguments/run_time_args.py → _arguments/_run_time_args.py} +4 -26
  9. squirrels/_auth.py +2 -2
  10. squirrels/_command_line.py +13 -9
  11. squirrels/_connection_set.py +5 -5
  12. squirrels/_constants.py +1 -1
  13. squirrels/_dashboard_types.py +82 -0
  14. squirrels/_dashboards_io.py +2 -2
  15. squirrels/_data_sources.py +564 -0
  16. squirrels/_exceptions.py +1 -1
  17. squirrels/_initializer.py +82 -58
  18. squirrels/_manifest.py +5 -5
  19. squirrels/_model_builder.py +2 -0
  20. squirrels/_model_configs.py +3 -3
  21. squirrels/_model_queries.py +1 -1
  22. squirrels/_models.py +28 -14
  23. squirrels/{package_data → _package_data}/base_project/dashboards/dashboard_example.py +4 -4
  24. squirrels/{package_data → _package_data}/base_project/dashboards/dashboard_example.yml +2 -2
  25. squirrels/_package_data/base_project/macros/macros_example.sql +17 -0
  26. squirrels/{package_data → _package_data}/base_project/models/builds/build_example.py +2 -2
  27. squirrels/{package_data → _package_data}/base_project/models/builds/build_example.sql +1 -1
  28. squirrels/{package_data → _package_data}/base_project/models/builds/build_example.yml +2 -0
  29. squirrels/{package_data → _package_data}/base_project/models/dbviews/dbview_example.sql +1 -1
  30. squirrels/_package_data/base_project/models/federates/federate_example.py +41 -0
  31. squirrels/_package_data/base_project/models/federates/federate_example.sql +25 -0
  32. squirrels/{package_data → _package_data}/base_project/models/federates/federate_example.yml +6 -6
  33. squirrels/{package_data → _package_data}/base_project/parameters.yml +9 -8
  34. squirrels/_package_data/base_project/pyconfigs/connections.py +14 -0
  35. squirrels/{package_data → _package_data}/base_project/pyconfigs/context.py +14 -16
  36. squirrels/{package_data → _package_data}/base_project/pyconfigs/parameters.py +13 -8
  37. squirrels/{package_data → _package_data}/base_project/pyconfigs/user.py +2 -2
  38. squirrels/_parameter_configs.py +34 -34
  39. squirrels/_parameter_options.py +348 -0
  40. squirrels/_parameter_sets.py +18 -18
  41. squirrels/_parameters.py +1266 -0
  42. squirrels/_project.py +37 -12
  43. squirrels/_utils.py +5 -3
  44. squirrels/arguments.py +2 -0
  45. squirrels/connections.py +1 -0
  46. squirrels/dashboards.py +1 -82
  47. squirrels/data_sources.py +8 -563
  48. squirrels/parameter_options.py +8 -348
  49. squirrels/parameters.py +9 -1266
  50. squirrels/types.py +11 -0
  51. {squirrels-0.5.0b1.dist-info → squirrels-0.5.0b3.dist-info}/METADATA +11 -17
  52. squirrels-0.5.0b3.dist-info/RECORD +80 -0
  53. squirrels/package_data/base_project/macros/macros_example.sql +0 -15
  54. squirrels/package_data/base_project/models/federates/federate_example.py +0 -44
  55. squirrels/package_data/base_project/models/federates/federate_example.sql +0 -17
  56. squirrels/package_data/base_project/pyconfigs/connections.py +0 -14
  57. squirrels-0.5.0b1.dist-info/RECORD +0 -70
  58. /squirrels/{dataset_result.py → _dataset_types.py} +0 -0
  59. /squirrels/{package_data → _package_data}/base_project/.env +0 -0
  60. /squirrels/{package_data → _package_data}/base_project/.env.example +0 -0
  61. /squirrels/{package_data → _package_data}/base_project/assets/expenses.db +0 -0
  62. /squirrels/{package_data → _package_data}/base_project/assets/weather.db +0 -0
  63. /squirrels/{package_data → _package_data}/base_project/connections.yml +0 -0
  64. /squirrels/{package_data → _package_data}/base_project/docker/.dockerignore +0 -0
  65. /squirrels/{package_data → _package_data}/base_project/docker/Dockerfile +0 -0
  66. /squirrels/{package_data → _package_data}/base_project/docker/compose.yml +0 -0
  67. /squirrels/{package_data → _package_data}/base_project/duckdb_init.sql +0 -0
  68. /squirrels/{package_data/base_project/.gitignore → _package_data/base_project/gitignore} +0 -0
  69. /squirrels/{package_data → _package_data}/base_project/models/dbviews/dbview_example.yml +0 -0
  70. /squirrels/{package_data → _package_data}/base_project/models/sources.yml +0 -0
  71. /squirrels/{package_data → _package_data}/base_project/seeds/seed_categories.csv +0 -0
  72. /squirrels/{package_data → _package_data}/base_project/seeds/seed_categories.yml +0 -0
  73. /squirrels/{package_data → _package_data}/base_project/seeds/seed_subcategories.csv +0 -0
  74. /squirrels/{package_data → _package_data}/base_project/seeds/seed_subcategories.yml +0 -0
  75. /squirrels/{package_data → _package_data}/base_project/squirrels.yml.j2 +0 -0
  76. /squirrels/{package_data → _package_data}/base_project/tmp/.gitignore +0 -0
  77. {squirrels-0.5.0b1.dist-info → squirrels-0.5.0b3.dist-info}/WHEEL +0 -0
  78. {squirrels-0.5.0b1.dist-info → squirrels-0.5.0b3.dist-info}/entry_points.txt +0 -0
  79. {squirrels-0.5.0b1.dist-info → squirrels-0.5.0b3.dist-info}/licenses/LICENSE +0 -0
squirrels/types.py ADDED
@@ -0,0 +1,11 @@
1
+ from ._data_sources import DataSource
2
+
3
+ from ._parameter_options import ParameterOption
4
+
5
+ from ._parameters import Parameter, TextValue
6
+
7
+ from ._auth import BaseUser
8
+
9
+ from ._dataset_types import DatasetMetadata, DatasetResult
10
+
11
+ from ._dashboard_types import Dashboard
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: squirrels
3
- Version: 0.5.0b1
3
+ Version: 0.5.0b3
4
4
  Summary: Squirrels - API Framework for Data Analytics
5
5
  Project-URL: Homepage, https://squirrels-analytics.github.io
6
6
  Project-URL: Repository, https://github.com/squirrels-analytics/squirrels
@@ -62,8 +62,8 @@ Here are a few of the things that squirrels can do:
62
62
  - Configure parameter widgets (types include single-select, multi-select, date, number, etc.) for your datasets (in `parameters.py`).
63
63
  - Use Jinja SQL templates (just like dbt!) or python functions (that return a Python dataframe such as polars or pandas) to define dynamic query logic based on parameter selections.
64
64
  - Query multiple databases and join the results together in a final view in one API endpoint/dataset!
65
- - Test your API endpoints with an interactive UI or by a command line that generates rendered sql queries and results (for a given set of parameter selections).
66
- - Define authentication logic (in `auth.py`) and authorize privacy scope per dataset (in `squirrels.yml`). The user's attributes can even be used in your query logic!
65
+ - Test your API endpoints with Squirrels Studio or by a command line that generates rendered sql queries and results (for a given set of parameter selections).
66
+ - Define User model (in `user.py`) and authorize privacy scope per dataset (in `squirrels.yml`). The user's attributes can even be used in your query logic!
67
67
 
68
68
  ## License
69
69
 
@@ -77,18 +77,18 @@ The sections below describe how to set up your local environment for squirrels d
77
77
 
78
78
  ### Setup
79
79
 
80
- This project requires python version 3.10 or above to be installed. It also uses the python build tool `poetry`. Information on setting up poetry can be found at: https://python-poetry.org/docs/.
80
+ This project requires python version 3.10 or above to be installed. It also uses the python package manager `uv`. Information on setting up poetry can be found at: https://docs.astral.sh/uv/getting-started/installation/.
81
81
 
82
- Then, to install all dependencies, run:
82
+ Then, to install all dependencies in a virtual environment, run:
83
83
 
84
- ```
85
- poetry install
84
+ ```bash
85
+ uv sync
86
86
  ```
87
87
 
88
- And activate the virtual environment created by poetry with:
88
+ And activate the virtual environment with:
89
89
 
90
- ```
91
- poetry shell
90
+ ```bash
91
+ source .venv/bin/activate
92
92
  ```
93
93
 
94
94
  To confirm that the setup worked, run the following to show the help page for all squirrels CLI commands:
@@ -97,11 +97,9 @@ To confirm that the setup worked, run the following to show the help page for al
97
97
  sqrl -h
98
98
  ```
99
99
 
100
- You can enter `exit` to exit the virtual environment shell. You can also run `poetry run sqrl -h` to run squirrels commands without activating the virtual environment.
101
-
102
100
  ### Testing
103
101
 
104
- In poetry's virtual environment, run `pytest`.
102
+ Run `uv run pytest`. Or if you have the virtual environment activated, simply run `pytest`.
105
103
 
106
104
  ### Project Structure
107
105
 
@@ -110,7 +108,3 @@ From the root of the git repo, the source code can be found in the `squirrels` f
110
108
  To understand what a specific squirrels command is doing, start from the `_command_line.py` file as your entry point.
111
109
 
112
110
  The library version is maintained in both the `pyproject.toml` and the `squirrels/_version.py` files.
113
-
114
- When a user initializes a squirrels project using `sqrl init`, the files are copied from the `squirrels/package_data/base_project` folder. The contents in the `database` subfolder were constructed from the scripts in the `database_elt` folder.
115
-
116
- For the Squirrels UI activated by `sqrl run`, the HTML, CSS, and Javascript files can be found in the `static` and `templates` subfolders of `squirrels/package_data`. The CSS and Javascript files are minified and built from the source files in this project: https://github.com/squirrels-analytics/squirrels-testing-ui.
@@ -0,0 +1,80 @@
1
+ dateutils/__init__.py,sha256=dq4VSlJ5ztaDPdvYBRAvXSyanT_CZif3I4O0YVmWfa8,277
2
+ dateutils/_enums.py,sha256=WBrnLqta_iMMhGMEn24cCO1Vlr7bST0E8oEfAL3z0P8,373
3
+ dateutils/_implementation.py,sha256=PVJAdNolDdTpCZXwvokKoMIZzTSNpCUvZlVLWpMeSho,15173
4
+ dateutils/types.py,sha256=xcRwBoftQi-uHM1tlVTW5xgN84qdrqCo5tQT7A34S8Y,124
5
+ squirrels/__init__.py,sha256=7n-Wci_BSeE7SEY703WYqsBhJ2Ix49AKIcRq3rXb4QI,267
6
+ squirrels/_api_response_models.py,sha256=fQWjEBGAyy8KbkaY4jjOKvxhEcvQPU1bF2dJRTVTRc4,13601
7
+ squirrels/_api_server.py,sha256=iODEImWZo7NPekubYYRFXtVxMHobry0JACLDMFPTJAk,51208
8
+ squirrels/_auth.py,sha256=u3ISed2yavktOseN9rf5uXcPupfS4pK6rlC60RvyrgI,19305
9
+ squirrels/_command_line.py,sha256=ZB7cTJabWiYEV6tFi1l87M-w468LJ-DV7TNgQ_bqFbY,11151
10
+ squirrels/_connection_set.py,sha256=170NqnDgAisseTY4Iqzw79CZeT3oMIdUNuz3HLHZSGM,4009
11
+ squirrels/_constants.py,sha256=ddKMtnBAzUNuXHT4zT63oo1OpWy9LPXakDeLduikM6Q,3127
12
+ squirrels/_dashboard_types.py,sha256=g27ET5CnM_4IvxdhtGBjaRUM4MeK1kDsIfcp78AIYFE,1950
13
+ squirrels/_dashboards_io.py,sha256=bWgXdqTNV57x3zlptmFnG_RX5s1zO-TV2CvrQpcCTs8,3001
14
+ squirrels/_data_sources.py,sha256=W1aUAHkkjPpBRjZGBrc9RJIxEwICfnzB8HAyknCoZ3E,25988
15
+ squirrels/_dataset_types.py,sha256=wZvvRs4U1Hva_iyoFosAAu76S1yfv1Cd5SX3UMIw2PA,2838
16
+ squirrels/_exceptions.py,sha256=ny_-lS-V-G4ss7XT98cg83kl2KWZfP-K1plkgK2ElSg,2505
17
+ squirrels/_initializer.py,sha256=bJ0AeFIHYIYVT6o_kw5oWQJ9Qm4-n1RVNk3iYi2qbH0,14270
18
+ squirrels/_manifest.py,sha256=ag902b0SNbra6XrBzkaKizmJGwRgFKPjEjtnkJgfFio,10232
19
+ squirrels/_model_builder.py,sha256=fdoBcbbDpQaSTApV0mHKbq3yFe5xrr-TggdehEx8xE0,5063
20
+ squirrels/_model_configs.py,sha256=eJne5L-QLv42s7uodUOOASMRn1NbzGbiBmwMllkO5C4,3303
21
+ squirrels/_model_queries.py,sha256=mvx3r0nps8rBGjmxP_SaGjDmKsjh5CBWQ6uAWxX1LnU,1088
22
+ squirrels/_models.py,sha256=pP_NuYtBj8pmC--3BpNp6cVTxfkCUkZf19sB2v817Bg,49721
23
+ squirrels/_package_loader.py,sha256=xcIur5Z38OWd-OVjsueFstVV567zlkK9UBnLS4NawJY,1158
24
+ squirrels/_parameter_configs.py,sha256=GwKtuZJIMIsGx2d1bWlluqw3FkwIRv7nzekYzMQN4zg,23950
25
+ squirrels/_parameter_options.py,sha256=cWYKNoBUopHq6VfaeBu-nN2V0_IY3OgYpmYhKODNCew,16956
26
+ squirrels/_parameter_sets.py,sha256=K_4HKu2keC1-EvaOSBS9PRDRjooicqfTz_NMk1ZqqRs,9823
27
+ squirrels/_parameters.py,sha256=Bg3MqgkBb-QjtEIgBwA35730cOM3KCvq0_qFz-HZaZw,55942
28
+ squirrels/_project.py,sha256=3RnBZVRJtZasuZ-KqIqCM5vOmBXtQr4_FTqrvFp5n5w,29307
29
+ squirrels/_py_module.py,sha256=LgILTjMx3jyb92o8Y35ezpntuk6u6ezYVGAICKhUSUM,2622
30
+ squirrels/_seeds.py,sha256=yyIYp4bn9Sg6lhgvsOYIJQHIpPbvLNsyGHVfswEyVd8,2225
31
+ squirrels/_sources.py,sha256=j5mY_EtA5cxoHwtk8RwTVHO74hleik2lS7mF9gVnG_A,4840
32
+ squirrels/_utils.py,sha256=A2_zBxdKKf-HmwlI6vdsS6VMrefDF1km9TBuwnOG-ME,12279
33
+ squirrels/_version.py,sha256=M8aFbJ4vlAi3Sk9b7leRuEfkNBjkkX5S_F9lA4h8GK4,105
34
+ squirrels/arguments.py,sha256=Sg8m5_LYrL4IMb7fzZGmyNceA2vQMD7fiu0cXNir_V4,165
35
+ squirrels/connections.py,sha256=dpjR00DjLiPfF0iz9HfL9PyjWYtYQq67zk2LyT2bnhg,64
36
+ squirrels/dashboards.py,sha256=hPpuG4xJIZdY7OQFcO_CdO630KCSgLzHdMSsGjlpt5U,57
37
+ squirrels/data_sources.py,sha256=6a4E1m-Zcx-o2SERwKJiz8n6LFsI2CQ5MbmDwKhVq1o,170
38
+ squirrels/parameter_options.py,sha256=TmvoESS1BSPx-73bNzo6W0bSztj7-ye0_vssmii0cBk,205
39
+ squirrels/parameters.py,sha256=7Go5jetD3J7NDrkk2a_7ExxJv0mT4rwo1B9sAkuxPPg,195
40
+ squirrels/types.py,sha256=xhCOlIxXOERG1Th_jTSE6yYJvFMNeATdZbqRFVsEhBg,263
41
+ squirrels/_arguments/_init_time_args.py,sha256=_XfZjsqP9GWhJYppnokRAAFXO1mSqf1mUcKG0KgWk7o,3448
42
+ squirrels/_arguments/_run_time_args.py,sha256=ppakg7XXnhgIkycingldxcaDqXtBkgpfyMpiFhAYK9Y,5017
43
+ squirrels/_package_data/base_project/.env,sha256=3Tuk3SJl7RNMebm8P0jocqB-Ox91aW09Zreq8QjyUJ4,1026
44
+ squirrels/_package_data/base_project/.env.example,sha256=dS5ZO_kyMT3GdZbj6nfiK9PzkvwGfse9-UiYkvrh7ys,1078
45
+ squirrels/_package_data/base_project/connections.yml,sha256=qZxh7OuI2xqf2cFKwpMo5TONrJXGVzQ7YfcWh4Go7Oo,1011
46
+ squirrels/_package_data/base_project/duckdb_init.sql,sha256=iwKDoHbKhOEMe-Pu_sX5a9OauCgqxfZLD70S7RduBrE,196
47
+ squirrels/_package_data/base_project/gitignore,sha256=B9OEkQ_j9fZGA2IAyVUvXeylxpya-AUwzLzqzMN4Bfc,155
48
+ squirrels/_package_data/base_project/parameters.yml,sha256=lws8lblJjyC6apNP-5fhvxlShTKs6UqBzvl3dO_0Zw8,6908
49
+ squirrels/_package_data/base_project/squirrels.yml.j2,sha256=j3X3w-rQNP25rSo9Nye8roOUJV98etlpqfsD_zHwxTo,2673
50
+ squirrels/_package_data/base_project/assets/expenses.db,sha256=aO0QdApW9ad8LRc73MW1o3eimryzmOAH5vz9Vc3dWK0,77824
51
+ squirrels/_package_data/base_project/assets/weather.db,sha256=dsHPO36gQdZ4ULAA726Hg3jp8a1dCdig1DhrGg8wTeg,86016
52
+ squirrels/_package_data/base_project/dashboards/dashboard_example.py,sha256=jd6Sjs69QK4zBJlRnKaloati1cU5Oby1Pzg9bUxY0ZY,1637
53
+ squirrels/_package_data/base_project/dashboards/dashboard_example.yml,sha256=fIm56M3J1eWp9_zDcc5R04pSLbHgdjm2X3XZgpB0SaQ,417
54
+ squirrels/_package_data/base_project/docker/.dockerignore,sha256=IN0ZmxwLdmYlw6I2ziTdzXkTbZWCUyV4kfUI9_lDz-A,201
55
+ squirrels/_package_data/base_project/docker/Dockerfile,sha256=DBOfPajd7ikNr1Qg08TcQmQmWDYamlxoDv7u6FSWElE,470
56
+ squirrels/_package_data/base_project/docker/compose.yml,sha256=xMAjfJeNVv49ypMGxR8bG27P5JSbPTNMR7UeGTHGyeA,105
57
+ squirrels/_package_data/base_project/macros/macros_example.sql,sha256=kJMAxL9ihCd-ULPOfHkqt8TDIMcH6QAOFFw89VplGL0,508
58
+ squirrels/_package_data/base_project/models/sources.yml,sha256=Miujhj5QRnbN1Q6BkQyeyX8FZAROPDPLWzVgdsdZy9o,1890
59
+ squirrels/_package_data/base_project/models/builds/build_example.py,sha256=QqNicirKK_JXn44QGrp48Ods5iGfAnoD_PZN5u-YLzQ,1022
60
+ squirrels/_package_data/base_project/models/builds/build_example.sql,sha256=52tqAIzFWJgX13CP4HNeBd5BFy7Z929Z0XxfLgGKthM,508
61
+ squirrels/_package_data/base_project/models/builds/build_example.yml,sha256=kUd6j5u8qU6UD294AowPBHFOb8yYDA_dxWlCIBrPl90,1407
62
+ squirrels/_package_data/base_project/models/dbviews/dbview_example.sql,sha256=RMET1ni2qeEFysxy3lSFHQOxYkfMHvs6G3JUzPhfklU,268
63
+ squirrels/_package_data/base_project/models/dbviews/dbview_example.yml,sha256=BFTGdBe7OcyNWKjBh7IhWgmfFgG3nT4toCR3XG5ZgLI,947
64
+ squirrels/_package_data/base_project/models/federates/federate_example.py,sha256=c3fJvY9ChSSt-Mg-ddwwOwUmnTzQ1_qfYldLTOduC7s,1544
65
+ squirrels/_package_data/base_project/models/federates/federate_example.sql,sha256=Otda657dASjQUGk5Wbh2P18gcSBIpk8d3VDrgD6vBvA,674
66
+ squirrels/_package_data/base_project/models/federates/federate_example.yml,sha256=FpSVZV7xNSH5iUAXMkyd_jynFxWryutz5Izlgsq3aP0,2279
67
+ squirrels/_package_data/base_project/pyconfigs/connections.py,sha256=IRL9D2HG9pdwp12S896b0Q-hKnFfVck8we1q5sifX10,601
68
+ squirrels/_package_data/base_project/pyconfigs/context.py,sha256=8zsQ0tf0EhfeRDPwK7ANNaJWAubT3AYVCzcdaOz0xwY,3670
69
+ squirrels/_package_data/base_project/pyconfigs/parameters.py,sha256=B3AdnzJzpK5BC_fADl7og_hsmejAYNqgjpQO-4eFYXk,5355
70
+ squirrels/_package_data/base_project/pyconfigs/user.py,sha256=qP0dpptza-xBBZKxN3-KBfaDwaD5ZUGhUBqU8WqBNXk,855
71
+ squirrels/_package_data/base_project/seeds/seed_categories.csv,sha256=jppjf1nOIxy7-bi5lJn5CVqmnLfJHHq0ABgp6UqbXnw,104
72
+ squirrels/_package_data/base_project/seeds/seed_categories.yml,sha256=NZ4BVvYYCEq6OnjRLrE_WOMhYsW0BQhRPWOgUchzdp4,435
73
+ squirrels/_package_data/base_project/seeds/seed_subcategories.csv,sha256=Tta1oIgnc2nukNMDlUkIErRKNH_8YT5EPp1A2kQKcow,327
74
+ squirrels/_package_data/base_project/seeds/seed_subcategories.yml,sha256=QTgw8Eld-p6Kntf53FyXyn7-7vKYI7IOJVu-Lr-FHCY,583
75
+ squirrels/_package_data/base_project/tmp/.gitignore,sha256=XImoqcWvJY0C0L_TWCx1ljvqU7qh9fUTJmK4ACCmNFI,13
76
+ squirrels-0.5.0b3.dist-info/METADATA,sha256=PIrRC6cNC2UbwcUSK7eVbiiK9LM8l43_zX9qI5M66n4,4399
77
+ squirrels-0.5.0b3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
78
+ squirrels-0.5.0b3.dist-info/entry_points.txt,sha256=i6vgjhJ3o_cdSFYofFcNY9DFMPr4MIcuwnkskSTXfJc,95
79
+ squirrels-0.5.0b3.dist-info/licenses/LICENSE,sha256=qqERuumQtQVsMrEXvJHuecJvV2sLxbleEubd_Zk8dY8,11338
80
+ squirrels-0.5.0b3.dist-info/RECORD,,
@@ -1,15 +0,0 @@
1
- {%- macro date_and_amount_filters(use_from_range) -%}
2
-
3
- {%- if use_from_range -%}
4
- date >= {{ ctx.start_date_from_range }}
5
- AND date <= {{ ctx.end_date_from_range }}
6
- AND amount >= {{ ctx.min_amount_from_range }}
7
- AND amount <= {{ ctx.max_amount_from_range }}
8
- {%- else -%}
9
- date >= {{ ctx.start_date }}
10
- AND date <= {{ ctx.end_date }}
11
- AND amount >= {{ ctx.min_amount }}
12
- AND amount <= {{ ctx.max_amount }}
13
- {%- endif -%}
14
-
15
- {%- endmacro -%}
@@ -1,44 +0,0 @@
1
- from squirrels import ModelArgs, parameters as p
2
- import polars as pl, pandas as pd
3
-
4
- def dequote(value: str) -> str:
5
- return value[1:-1]
6
-
7
- def joined_str_to_list(value: str) -> list[str]:
8
- return [dequote(category) for category in str(value).split(",")]
9
-
10
-
11
- def main(sqrl: ModelArgs) -> pl.LazyFrame | pl.DataFrame | pd.DataFrame:
12
- """
13
- Create federated models by joining/processing dependent models (sources, seeds, builds, dbviews, other federates, etc.) to
14
- form a new Python DataFrame (using polars LazyFrame, polars DataFrame, or pandas DataFrame).
15
- """
16
- df = sqrl.ref("build_example")
17
-
18
- df = df.filter(
19
- (pl.col("amount") >= sqrl.ctx["min_amount_from_range"]) &
20
- (pl.col("amount") <= sqrl.ctx["max_amount_from_range"]) &
21
- (pl.col("date") >= dequote(sqrl.ctx["start_date_from_range"])) &
22
- (pl.col("date") <= dequote(sqrl.ctx["end_date_from_range"]))
23
- )
24
-
25
- if sqrl.ctx["has_categories"]:
26
- categories_list = joined_str_to_list(sqrl.ctx["categories"])
27
- df = df.filter(pl.col("category_id").is_in(categories_list))
28
-
29
- if sqrl.ctx["has_subcategories"]:
30
- subcategories_list = joined_str_to_list(sqrl.ctx["subcategories"])
31
- df = df.filter(pl.col("subcategory_id").is_in(subcategories_list))
32
-
33
- dimension_cols = sqrl.ctx["group_by_cols_list"]
34
- df = df.group_by(dimension_cols).agg(
35
- pl.sum("amount").cast(pl.Decimal(precision=15, scale=2)).alias("total_amount")
36
- )
37
- df = df.sort(dimension_cols, descending=True)
38
-
39
- if sqrl.param_exists("limit"):
40
- assert isinstance(limit := sqrl.prms["limit"], p.NumberParameter)
41
- df = df.limit(int(limit.get_selected_value()))
42
-
43
- df = df.select(*dimension_cols, "total_amount")
44
- return df.rename(sqrl.ctx["rename_dict"])
@@ -1,17 +0,0 @@
1
- {# DuckDB dialect #}
2
-
3
- SELECT {{ ctx.select_dim_cols }}
4
- , CAST(SUM(amount) AS DECIMAL(15, 2)) as total_amount
5
-
6
- {# ref() can be used on a sources, seeds, builds, dbviews, or other federate models -#}
7
- FROM {{ ref("build_example") }} AS a
8
-
9
- WHERE {{ date_and_amount_filters(use_from_range=true) }}
10
- {% if ctx.has_categories -%} AND category_id IN ({{ ctx.categories }}) {%- endif %}
11
- {% if ctx.has_subcategories -%} AND subcategory_id IN ({{ ctx.subcategories }}) {%- endif %}
12
-
13
- GROUP BY {{ ctx.group_by_cols }}
14
-
15
- ORDER BY {{ ctx.order_by_cols }}
16
-
17
- {{ ctx.limit_clause }}
@@ -1,14 +0,0 @@
1
- from typing import Any
2
- from squirrels import ConnectionsArgs, ConnectionProperties, ConnectionType
3
-
4
-
5
- def main(connections: dict[str, ConnectionProperties | Any], sqrl: ConnectionsArgs) -> None:
6
- """
7
- Define sqlalchemy engines by adding them to the "connections" dictionary
8
- """
9
- ## SQLAlchemy URL for a connection engine
10
- conn_str: str = sqrl.env_vars["SQLITE_URI"].format(project_path=sqrl.project_path)
11
-
12
- ## Assigning names to connection engines
13
- connections["default"] = ConnectionProperties(label="SQLite Expenses Database", type=ConnectionType.SQLALCHEMY, uri=conn_str)
14
-
@@ -1,70 +0,0 @@
1
- squirrels/__init__.py,sha256=Y62ldkfs81jsKcetWLDw_1a98gwALx9Ww1b_rLsBpbs,1010
2
- squirrels/_api_response_models.py,sha256=fQWjEBGAyy8KbkaY4jjOKvxhEcvQPU1bF2dJRTVTRc4,13601
3
- squirrels/_api_server.py,sha256=1jhUr7GwwwD0O5dqQOX11uuU3Ea-zKXheeeQM0cLrDE,51181
4
- squirrels/_auth.py,sha256=XCC9i-Z7PaU74u-fqR6_d_eoc9qVh-5nC0CdYp4Svvg,19254
5
- squirrels/_command_line.py,sha256=urMyS7xIyNCWoiBWDLr6lDz0M_3NvaoPfMIo0vvn5cQ,10663
6
- squirrels/_connection_set.py,sha256=ZxnNAj9Cu_5ba0uwi6v_ItH6nurFnONrPgB47_GE-3I,3987
7
- squirrels/_constants.py,sha256=RDoUo4HtiVIQXatVdLoMXaGs1pkNER-Kgnmgs4FUx_Y,3126
8
- squirrels/_dashboards_io.py,sha256=PPZGB6TpPYxaWJ2pJMj0cZNT9Vo14QV9w-1idLb_eaE,2993
9
- squirrels/_exceptions.py,sha256=OOywX0UhX-KnvC8MScl2E6KYq3bzLq-PSqOpF7NbUvc,2481
10
- squirrels/_initializer.py,sha256=fwB_sSJqiBQqYseLshiItEyZCAWMc9bA_qqAW3l0ZIY,13265
11
- squirrels/_manifest.py,sha256=SrnGj_dd6L1O5Ygfr_B4rvxv_zx9iZap8bSfHTjhx4o,10208
12
- squirrels/_model_builder.py,sha256=_rUfGgmvvsyFhmXLvDzuP3gDPT_TLXgrZSusqjhhtRo,4921
13
- squirrels/_model_configs.py,sha256=03gzjFwoMiPtEPMg3U4Ekm7vJtQ2NU3Ks2Aj6gY-2vs,3300
14
- squirrels/_model_queries.py,sha256=xzfkPvHMq-5m22pnb-Zd045gRTdWe7UP6RmS9AZ-LRk,1086
15
- squirrels/_models.py,sha256=JmkUSx02ccRRGzGqQNh_Hxxqk4KCATNcxTVekUWOExU,48680
16
- squirrels/_package_loader.py,sha256=xcIur5Z38OWd-OVjsueFstVV567zlkK9UBnLS4NawJY,1158
17
- squirrels/_parameter_configs.py,sha256=sWQEJ7Hr6s1TE91H6qZsUO7uUAZqlS0z2Af3ZNoqc7I,23981
18
- squirrels/_parameter_sets.py,sha256=aE6IDELpLgytjt_G7eI9oTEMgDCgkb71dxATBsrnC38,9837
19
- squirrels/_project.py,sha256=3Ve6waHnRh92tu-KJSy5GJ5imaIf4LqBQcq_dlokAJs,28314
20
- squirrels/_py_module.py,sha256=LgILTjMx3jyb92o8Y35ezpntuk6u6ezYVGAICKhUSUM,2622
21
- squirrels/_seeds.py,sha256=yyIYp4bn9Sg6lhgvsOYIJQHIpPbvLNsyGHVfswEyVd8,2225
22
- squirrels/_sources.py,sha256=j5mY_EtA5cxoHwtk8RwTVHO74hleik2lS7mF9gVnG_A,4840
23
- squirrels/_utils.py,sha256=gzcPAQCJna674YomsxTgVe4DZucGJTVotxMWawoudzw,12043
24
- squirrels/_version.py,sha256=M8aFbJ4vlAi3Sk9b7leRuEfkNBjkkX5S_F9lA4h8GK4,105
25
- squirrels/dashboards.py,sha256=pekv_ERwoHHpBLYjIXSJ7Z8X7suWmjyex_whpCpZY60,1974
26
- squirrels/data_sources.py,sha256=W3wzXyC7wGVnz49JkWYZQxBqNuViC_QhulM90KEuLCY,26088
27
- squirrels/dataset_result.py,sha256=wZvvRs4U1Hva_iyoFosAAu76S1yfv1Cd5SX3UMIw2PA,2838
28
- squirrels/dateutils.py,sha256=kH2JNvQz0xjfYSh4xNTEAvm73f2EVXNpbXAB9zM2694,16730
29
- squirrels/parameter_options.py,sha256=cWYKNoBUopHq6VfaeBu-nN2V0_IY3OgYpmYhKODNCew,16956
30
- squirrels/parameters.py,sha256=kcMQ5-GEQ5lA9Zs_-R21n2Hq5_gULCygQy-Rf1FJK-4,56001
31
- squirrels/arguments/init_time_args.py,sha256=wl9PrVr3iHsMuZQEfrUj_gyzjdSqMTdQbpYUPjWQEsc,3477
32
- squirrels/arguments/run_time_args.py,sha256=3L8lQvICJPdH75J1rAqqeupM8raUIw6VedEHJL8nT0c,5705
33
- squirrels/package_data/base_project/.env,sha256=3Tuk3SJl7RNMebm8P0jocqB-Ox91aW09Zreq8QjyUJ4,1026
34
- squirrels/package_data/base_project/.env.example,sha256=dS5ZO_kyMT3GdZbj6nfiK9PzkvwGfse9-UiYkvrh7ys,1078
35
- squirrels/package_data/base_project/.gitignore,sha256=B9OEkQ_j9fZGA2IAyVUvXeylxpya-AUwzLzqzMN4Bfc,155
36
- squirrels/package_data/base_project/connections.yml,sha256=qZxh7OuI2xqf2cFKwpMo5TONrJXGVzQ7YfcWh4Go7Oo,1011
37
- squirrels/package_data/base_project/duckdb_init.sql,sha256=iwKDoHbKhOEMe-Pu_sX5a9OauCgqxfZLD70S7RduBrE,196
38
- squirrels/package_data/base_project/parameters.yml,sha256=McvLXWWI3DoYqTUPGBFo9ArsGJOCseh9mdzO9TxiJ8I,6755
39
- squirrels/package_data/base_project/squirrels.yml.j2,sha256=j3X3w-rQNP25rSo9Nye8roOUJV98etlpqfsD_zHwxTo,2673
40
- squirrels/package_data/base_project/assets/expenses.db,sha256=aO0QdApW9ad8LRc73MW1o3eimryzmOAH5vz9Vc3dWK0,77824
41
- squirrels/package_data/base_project/assets/weather.db,sha256=dsHPO36gQdZ4ULAA726Hg3jp8a1dCdig1DhrGg8wTeg,86016
42
- squirrels/package_data/base_project/dashboards/dashboard_example.py,sha256=8hg5MIrmeD5OpiKb7x2TCRkAsc4Rg36lf6I4KpJg7Os,1621
43
- squirrels/package_data/base_project/dashboards/dashboard_example.yml,sha256=mxC1Zmt33TpjpSCEFPAkK7nOcVbSJBhbWh7wMGeHav0,410
44
- squirrels/package_data/base_project/docker/.dockerignore,sha256=IN0ZmxwLdmYlw6I2ziTdzXkTbZWCUyV4kfUI9_lDz-A,201
45
- squirrels/package_data/base_project/docker/Dockerfile,sha256=DBOfPajd7ikNr1Qg08TcQmQmWDYamlxoDv7u6FSWElE,470
46
- squirrels/package_data/base_project/docker/compose.yml,sha256=xMAjfJeNVv49ypMGxR8bG27P5JSbPTNMR7UeGTHGyeA,105
47
- squirrels/package_data/base_project/macros/macros_example.sql,sha256=oxC6TZmoqgTiXEjosQbiKwUV2-mAGbINmNoV36V1-PI,510
48
- squirrels/package_data/base_project/models/sources.yml,sha256=Miujhj5QRnbN1Q6BkQyeyX8FZAROPDPLWzVgdsdZy9o,1890
49
- squirrels/package_data/base_project/models/builds/build_example.py,sha256=SUfWN7E8lZJYl-Zi2c-KoLADha4S5sw4T6cVhhozLaY,1014
50
- squirrels/package_data/base_project/models/builds/build_example.sql,sha256=UNpgvybUV7sVK-KN2h-ULDyDb4uwN3nYNGZUcBLBtrU,506
51
- squirrels/package_data/base_project/models/builds/build_example.yml,sha256=bwA_r6j8CIgrzuRnxpVmR350nGvy_USDy6p7TOy4lBI,1284
52
- squirrels/package_data/base_project/models/dbviews/dbview_example.sql,sha256=hGj7rNJZzgEKGxqzwjmkCAdL-0hOh4U7pIJCyz2SYHk,266
53
- squirrels/package_data/base_project/models/dbviews/dbview_example.yml,sha256=BFTGdBe7OcyNWKjBh7IhWgmfFgG3nT4toCR3XG5ZgLI,947
54
- squirrels/package_data/base_project/models/federates/federate_example.py,sha256=g30cVukwI9UIypZR6KOU1z0KWLwx2kGIkRHhrdmeZq8,1774
55
- squirrels/package_data/base_project/models/federates/federate_example.sql,sha256=A_-ts4Qw5eO-btnrmGbagv3MWJ0TUj_hBS5P7jaCNP4,574
56
- squirrels/package_data/base_project/models/federates/federate_example.yml,sha256=xhNmc4nT5zyc7J6tr_xSq_lQl3RP6pg4zUuxTPpaEXE,2254
57
- squirrels/package_data/base_project/pyconfigs/connections.py,sha256=zueK24yEuWt1x_xcR0Q-ikXGe2dXsS4wwh3qlzKG39Q,600
58
- squirrels/package_data/base_project/pyconfigs/context.py,sha256=9QuvSc7_oAipsIaaeT06bMnjGtUlpKdxmu5xnofE__Y,3717
59
- squirrels/package_data/base_project/pyconfigs/parameters.py,sha256=VS6fC5H0JSY_bubnDb4iawOI5niEGESF3YFDQ9gv1co,5053
60
- squirrels/package_data/base_project/pyconfigs/user.py,sha256=L-dj3skPFM2B46g1NgXhX7fgCB7MzLLhWcwMAan98xE,851
61
- squirrels/package_data/base_project/seeds/seed_categories.csv,sha256=jppjf1nOIxy7-bi5lJn5CVqmnLfJHHq0ABgp6UqbXnw,104
62
- squirrels/package_data/base_project/seeds/seed_categories.yml,sha256=NZ4BVvYYCEq6OnjRLrE_WOMhYsW0BQhRPWOgUchzdp4,435
63
- squirrels/package_data/base_project/seeds/seed_subcategories.csv,sha256=Tta1oIgnc2nukNMDlUkIErRKNH_8YT5EPp1A2kQKcow,327
64
- squirrels/package_data/base_project/seeds/seed_subcategories.yml,sha256=QTgw8Eld-p6Kntf53FyXyn7-7vKYI7IOJVu-Lr-FHCY,583
65
- squirrels/package_data/base_project/tmp/.gitignore,sha256=XImoqcWvJY0C0L_TWCx1ljvqU7qh9fUTJmK4ACCmNFI,13
66
- squirrels-0.5.0b1.dist-info/METADATA,sha256=eZ83IOAOLOTs9zsox-IS8Xd_CTCEiAu7qGtLdhvFoGI,5053
67
- squirrels-0.5.0b1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
68
- squirrels-0.5.0b1.dist-info/entry_points.txt,sha256=i6vgjhJ3o_cdSFYofFcNY9DFMPr4MIcuwnkskSTXfJc,95
69
- squirrels-0.5.0b1.dist-info/licenses/LICENSE,sha256=qqERuumQtQVsMrEXvJHuecJvV2sLxbleEubd_Zk8dY8,11338
70
- squirrels-0.5.0b1.dist-info/RECORD,,
File without changes