meerschaum 2.9.0rc2__py3-none-any.whl → 2.9.1__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 (40) hide show
  1. meerschaum/api/dash/callbacks/__init__.py +5 -2
  2. meerschaum/api/dash/callbacks/custom.py +17 -25
  3. meerschaum/api/dash/callbacks/dashboard.py +5 -21
  4. meerschaum/api/dash/callbacks/settings/__init__.py +8 -0
  5. meerschaum/api/dash/callbacks/settings/password_reset.py +76 -0
  6. meerschaum/api/dash/components.py +110 -7
  7. meerschaum/api/dash/pages/__init__.py +1 -0
  8. meerschaum/api/dash/pages/settings/__init__.py +8 -0
  9. meerschaum/api/dash/pages/settings/password_reset.py +63 -0
  10. meerschaum/api/resources/static/css/dash.css +7 -0
  11. meerschaum/api/routes/_pipes.py +76 -36
  12. meerschaum/config/_version.py +1 -1
  13. meerschaum/connectors/__init__.py +1 -0
  14. meerschaum/connectors/api/_pipes.py +79 -30
  15. meerschaum/connectors/sql/_pipes.py +38 -5
  16. meerschaum/connectors/valkey/_ValkeyConnector.py +2 -0
  17. meerschaum/connectors/valkey/_pipes.py +51 -39
  18. meerschaum/core/Pipe/__init__.py +1 -0
  19. meerschaum/core/Pipe/_sync.py +64 -4
  20. meerschaum/plugins/__init__.py +26 -4
  21. meerschaum/utils/dataframe.py +58 -3
  22. meerschaum/utils/dtypes/__init__.py +45 -17
  23. meerschaum/utils/dtypes/sql.py +182 -3
  24. meerschaum/utils/misc.py +1 -1
  25. meerschaum/utils/packages/_packages.py +6 -3
  26. meerschaum/utils/sql.py +122 -6
  27. meerschaum/utils/venv/__init__.py +4 -1
  28. {meerschaum-2.9.0rc2.dist-info → meerschaum-2.9.1.dist-info}/METADATA +14 -9
  29. {meerschaum-2.9.0rc2.dist-info → meerschaum-2.9.1.dist-info}/RECORD +35 -36
  30. {meerschaum-2.9.0rc2.dist-info → meerschaum-2.9.1.dist-info}/WHEEL +1 -1
  31. meerschaum/_internal/gui/__init__.py +0 -43
  32. meerschaum/_internal/gui/app/__init__.py +0 -50
  33. meerschaum/_internal/gui/app/_windows.py +0 -74
  34. meerschaum/_internal/gui/app/actions.py +0 -30
  35. meerschaum/_internal/gui/app/pipes.py +0 -47
  36. {meerschaum-2.9.0rc2.dist-info → meerschaum-2.9.1.dist-info}/LICENSE +0 -0
  37. {meerschaum-2.9.0rc2.dist-info → meerschaum-2.9.1.dist-info}/NOTICE +0 -0
  38. {meerschaum-2.9.0rc2.dist-info → meerschaum-2.9.1.dist-info}/entry_points.txt +0 -0
  39. {meerschaum-2.9.0rc2.dist-info → meerschaum-2.9.1.dist-info}/top_level.txt +0 -0
  40. {meerschaum-2.9.0rc2.dist-info → meerschaum-2.9.1.dist-info}/zip-safe +0 -0
meerschaum/utils/sql.py CHANGED
@@ -528,7 +528,7 @@ NO_CTE_FLAVORS = {'mysql', 'mariadb'}
528
528
  NO_SELECT_INTO_FLAVORS = {'sqlite', 'oracle', 'mysql', 'mariadb', 'duckdb'}
529
529
 
530
530
 
531
- def clean(substring: str) -> str:
531
+ def clean(substring: str) -> None:
532
532
  """
533
533
  Ensure a substring is clean enough to be inserted into a SQL query.
534
534
  Raises an exception when banned words are used.
@@ -932,6 +932,7 @@ def build_where(
932
932
  params: Dict[str, Any],
933
933
  connector: Optional[mrsm.connectors.sql.SQLConnector] = None,
934
934
  with_where: bool = True,
935
+ flavor: str = 'postgresql',
935
936
  ) -> str:
936
937
  """
937
938
  Build the `WHERE` clause based on the input criteria.
@@ -951,6 +952,9 @@ def build_where(
951
952
  with_where: bool, default True:
952
953
  If `True`, include the leading `'WHERE'` string.
953
954
 
955
+ flavor: str, default 'postgresql'
956
+ If `connector` is `None`, fall back to this flavor.
957
+
954
958
  Returns
955
959
  -------
956
960
  A `str` of the `WHERE` clause from the input `params` dictionary for the connector's flavor.
@@ -979,13 +983,11 @@ def build_where(
979
983
  warn(f"Aborting build_where() due to possible SQL injection.")
980
984
  return ''
981
985
 
982
- if connector is None:
983
- from meerschaum import get_connector
984
- connector = get_connector('sql')
986
+ query_flavor = getattr(connector, 'flavor', flavor) if connector is not None else flavor
985
987
  where = ""
986
988
  leading_and = "\n AND "
987
989
  for key, value in params.items():
988
- _key = sql_item_name(key, connector.flavor, None)
990
+ _key = sql_item_name(key, query_flavor, None)
989
991
  ### search across a list (i.e. IN syntax)
990
992
  if isinstance(value, Iterable) and not isinstance(value, (dict, str)):
991
993
  includes = [
@@ -1296,7 +1298,24 @@ def get_table_cols_types(
1296
1298
  if cols_types_docs and not cols_types_docs_filtered:
1297
1299
  cols_types_docs_filtered = cols_types_docs
1298
1300
 
1299
- return {
1301
+ ### NOTE: Check for PostGIS GEOMETRY columns.
1302
+ geometry_cols_types = {}
1303
+ user_defined_cols = [
1304
+ doc
1305
+ for doc in cols_types_docs_filtered
1306
+ if str(doc.get('type', None)).upper() == 'USER-DEFINED'
1307
+ ]
1308
+ if user_defined_cols:
1309
+ geometry_cols_types.update(
1310
+ get_postgis_geo_columns_types(
1311
+ connectable,
1312
+ table,
1313
+ schema=schema,
1314
+ debug=debug,
1315
+ )
1316
+ )
1317
+
1318
+ cols_types = {
1300
1319
  (
1301
1320
  doc['column']
1302
1321
  if flavor != 'oracle' else (
@@ -1317,6 +1336,8 @@ def get_table_cols_types(
1317
1336
  )
1318
1337
  for doc in cols_types_docs_filtered
1319
1338
  }
1339
+ cols_types.update(geometry_cols_types)
1340
+ return cols_types
1320
1341
  except Exception as e:
1321
1342
  warn(f"Failed to fetch columns for table '{table}':\n{e}")
1322
1343
  return {}
@@ -2505,3 +2526,98 @@ def get_reset_autoincrement_queries(
2505
2526
  )
2506
2527
  for query in reset_queries
2507
2528
  ]
2529
+
2530
+
2531
+ def get_postgis_geo_columns_types(
2532
+ connectable: Union[
2533
+ 'mrsm.connectors.sql.SQLConnector',
2534
+ 'sqlalchemy.orm.session.Session',
2535
+ 'sqlalchemy.engine.base.Engine'
2536
+ ],
2537
+ table: str,
2538
+ schema: Optional[str] = 'public',
2539
+ debug: bool = False,
2540
+ ) -> Dict[str, str]:
2541
+ """
2542
+ Return the
2543
+ """
2544
+ from meerschaum.utils.dtypes import get_geometry_type_srid
2545
+ default_type, default_srid = get_geometry_type_srid()
2546
+ default_type = default_type.upper()
2547
+
2548
+ clean(table)
2549
+ clean(str(schema))
2550
+ schema = schema or 'public'
2551
+ truncated_schema_name = truncate_item_name(schema, flavor='postgis')
2552
+ truncated_table_name = truncate_item_name(table, flavor='postgis')
2553
+ query = (
2554
+ "SELECT \"f_geometry_column\" AS \"column\", 'GEOMETRY' AS \"func\", \"type\", \"srid\"\n"
2555
+ "FROM \"geometry_columns\"\n"
2556
+ f"WHERE \"f_table_schema\" = '{truncated_schema_name}'\n"
2557
+ f" AND \"f_table_name\" = '{truncated_table_name}'\n"
2558
+ "UNION ALL\n"
2559
+ "SELECT \"f_geography_column\" AS \"column\", 'GEOGRAPHY' AS \"func\", \"type\", \"srid\"\n"
2560
+ "FROM \"geography_columns\"\n"
2561
+ f"WHERE \"f_table_schema\" = '{truncated_schema_name}'\n"
2562
+ f" AND \"f_table_name\" = '{truncated_table_name}'\n"
2563
+ )
2564
+ debug_kwargs = {'debug': debug} if isinstance(connectable, mrsm.connectors.SQLConnector) else {}
2565
+ result_rows = [
2566
+ row
2567
+ for row in connectable.execute(query, **debug_kwargs).fetchall()
2568
+ ]
2569
+ cols_type_tuples = {
2570
+ row[0]: (row[1], row[2], row[3])
2571
+ for row in result_rows
2572
+ }
2573
+
2574
+ geometry_cols_types = {
2575
+ col: (
2576
+ f"{func}({typ.upper()}, {srid})"
2577
+ if srid
2578
+ else (
2579
+ func
2580
+ + (
2581
+ f'({typ.upper()})'
2582
+ if typ.upper() not in ('GEOMETRY', 'GEOGRAPHY')
2583
+ else ''
2584
+ )
2585
+ )
2586
+ )
2587
+ for col, (func, typ, srid) in cols_type_tuples.items()
2588
+ }
2589
+ return geometry_cols_types
2590
+
2591
+
2592
+ def get_create_schema_if_not_exists_queries(
2593
+ schema: str,
2594
+ flavor: str,
2595
+ ) -> List[str]:
2596
+ """
2597
+ Return the queries to create a schema if it does not yet exist.
2598
+ For databases which do not support schemas, an empty list will be returned.
2599
+ """
2600
+ if not schema:
2601
+ return []
2602
+
2603
+ if flavor in NO_SCHEMA_FLAVORS:
2604
+ return []
2605
+
2606
+ clean(schema)
2607
+
2608
+ if flavor == 'mssql':
2609
+ return [
2610
+ (
2611
+ f"IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = '{schema}')\n"
2612
+ "BEGIN\n"
2613
+ f" EXEC('CREATE SCHEMA {sql_item_name(schema, flavor)}');\n"
2614
+ "END;"
2615
+ )
2616
+ ]
2617
+
2618
+ if flavor == 'oracle':
2619
+ return []
2620
+
2621
+ return [
2622
+ f"CREATE SCHEMA IF NOT EXISTS {sql_item_name(schema, flavor)};"
2623
+ ]
@@ -86,7 +86,10 @@ def activate_venv(
86
86
  target = target_path.as_posix()
87
87
 
88
88
  if venv in active_venvs_order:
89
- sys.path.remove(target)
89
+ try:
90
+ sys.path.remove(target)
91
+ except Exception:
92
+ pass
90
93
  try:
91
94
  active_venvs_order.remove(venv)
92
95
  except Exception:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: meerschaum
3
- Version: 2.9.0rc2
3
+ Version: 2.9.1
4
4
  Summary: Sync Time-Series Pipes with Meerschaum
5
5
  Home-page: https://meerschaum.io
6
6
  Author: Bennett Meares
@@ -87,6 +87,10 @@ Requires-Dist: mycli>=1.23.2; extra == "cli"
87
87
  Requires-Dist: litecli>=1.5.0; extra == "cli"
88
88
  Requires-Dist: mssql-cli>=1.0.0; extra == "cli"
89
89
  Requires-Dist: gadwall>=0.2.0; extra == "cli"
90
+ Provides-Extra: gis
91
+ Requires-Dist: pyproj>=3.7.1; extra == "gis"
92
+ Requires-Dist: geopandas>=1.0.1; extra == "gis"
93
+ Requires-Dist: shapely>=2.0.7; extra == "gis"
90
94
  Provides-Extra: stack
91
95
  Requires-Dist: docker-compose>=1.29.2; extra == "stack"
92
96
  Provides-Extra: build
@@ -114,7 +118,6 @@ Requires-Dist: mkdocs-linkcheck>=1.0.6; extra == "docs"
114
118
  Requires-Dist: mkdocs-redirects>=1.0.4; extra == "docs"
115
119
  Requires-Dist: jinja2==3.0.3; extra == "docs"
116
120
  Provides-Extra: gui
117
- Requires-Dist: toga>=0.3.0-dev29; extra == "gui"
118
121
  Requires-Dist: pywebview>=3.6.3; extra == "gui"
119
122
  Requires-Dist: pycparser>=2.21.0; extra == "gui"
120
123
  Provides-Extra: extras
@@ -126,8 +129,6 @@ Requires-Dist: importlib-metadata>=4.12.0; extra == "extras"
126
129
  Provides-Extra: sql
127
130
  Requires-Dist: numpy>=1.18.5; extra == "sql"
128
131
  Requires-Dist: pandas[parquet]>=2.0.1; extra == "sql"
129
- Requires-Dist: geopandas>=1.0.1; extra == "sql"
130
- Requires-Dist: shapely>=2.0.7; extra == "sql"
131
132
  Requires-Dist: pyarrow>=16.1.0; extra == "sql"
132
133
  Requires-Dist: dask[complete]>=2024.12.1; extra == "sql"
133
134
  Requires-Dist: partd>=1.4.2; extra == "sql"
@@ -167,6 +168,9 @@ Requires-Dist: fasteners>=0.19.0; extra == "sql"
167
168
  Requires-Dist: virtualenv>=20.1.0; extra == "sql"
168
169
  Requires-Dist: attrs>=24.2.0; extra == "sql"
169
170
  Requires-Dist: uv>=0.2.11; extra == "sql"
171
+ Requires-Dist: pyproj>=3.7.1; extra == "sql"
172
+ Requires-Dist: geopandas>=1.0.1; extra == "sql"
173
+ Requires-Dist: shapely>=2.0.7; extra == "sql"
170
174
  Provides-Extra: dash
171
175
  Requires-Dist: Flask-Compress>=1.10.1; extra == "dash"
172
176
  Requires-Dist: dash>=2.6.2; extra == "dash"
@@ -189,8 +193,6 @@ Requires-Dist: httpcore>=1.0.6; extra == "api"
189
193
  Requires-Dist: valkey>=6.0.0; extra == "api"
190
194
  Requires-Dist: numpy>=1.18.5; extra == "api"
191
195
  Requires-Dist: pandas[parquet]>=2.0.1; extra == "api"
192
- Requires-Dist: geopandas>=1.0.1; extra == "api"
193
- Requires-Dist: shapely>=2.0.7; extra == "api"
194
196
  Requires-Dist: pyarrow>=16.1.0; extra == "api"
195
197
  Requires-Dist: dask[complete]>=2024.12.1; extra == "api"
196
198
  Requires-Dist: partd>=1.4.2; extra == "api"
@@ -230,6 +232,9 @@ Requires-Dist: fasteners>=0.19.0; extra == "api"
230
232
  Requires-Dist: virtualenv>=20.1.0; extra == "api"
231
233
  Requires-Dist: attrs>=24.2.0; extra == "api"
232
234
  Requires-Dist: uv>=0.2.11; extra == "api"
235
+ Requires-Dist: pyproj>=3.7.1; extra == "api"
236
+ Requires-Dist: geopandas>=1.0.1; extra == "api"
237
+ Requires-Dist: shapely>=2.0.7; extra == "api"
233
238
  Requires-Dist: pprintpp>=0.4.0; extra == "api"
234
239
  Requires-Dist: asciitree>=0.3.3; extra == "api"
235
240
  Requires-Dist: typing-extensions>=4.7.1; extra == "api"
@@ -292,13 +297,13 @@ Requires-Dist: aiomysql>=0.0.21; extra == "full"
292
297
  Requires-Dist: sqlalchemy-cockroachdb>=2.0.0; extra == "full"
293
298
  Requires-Dist: duckdb>=1.0.0; extra == "full"
294
299
  Requires-Dist: duckdb-engine>=0.13.0; extra == "full"
295
- Requires-Dist: toga>=0.3.0-dev29; extra == "full"
300
+ Requires-Dist: pyproj>=3.7.1; extra == "full"
301
+ Requires-Dist: geopandas>=1.0.1; extra == "full"
302
+ Requires-Dist: shapely>=2.0.7; extra == "full"
296
303
  Requires-Dist: pywebview>=3.6.3; extra == "full"
297
304
  Requires-Dist: pycparser>=2.21.0; extra == "full"
298
305
  Requires-Dist: numpy>=1.18.5; extra == "full"
299
306
  Requires-Dist: pandas[parquet]>=2.0.1; extra == "full"
300
- Requires-Dist: geopandas>=1.0.1; extra == "full"
301
- Requires-Dist: shapely>=2.0.7; extra == "full"
302
307
  Requires-Dist: pyarrow>=16.1.0; extra == "full"
303
308
  Requires-Dist: dask[complete]>=2024.12.1; extra == "full"
304
309
  Requires-Dist: partd>=1.4.2; extra == "full"
@@ -7,11 +7,6 @@ meerschaum/_internal/arguments/_parse_arguments.py,sha256=TtHX7NvdHLD-nVVlMctc6S
7
7
  meerschaum/_internal/arguments/_parser.py,sha256=9AfOJ4Kc37y2gLeRabU3cDwF4RRnW-3nGKfN2l0P3rQ,17163
8
8
  meerschaum/_internal/docs/__init__.py,sha256=ZQYHWo6n0kfLLkyG36YXqTYvv2Pc7it5HZHMylT6cBA,126
9
9
  meerschaum/_internal/docs/index.py,sha256=ZkqXj-GhoLEpgMysy4ugvOlFhWVlnq7tFvzMhy43jUQ,24670
10
- meerschaum/_internal/gui/__init__.py,sha256=KF6Opae0aBOjIndMZ2txoPs7ozCXRlR-lcTsicLO7fc,1313
11
- meerschaum/_internal/gui/app/__init__.py,sha256=rKUa8hHk6Fai-PDF61tQcpT1myxKcfmvEMDHxThNp7o,1565
12
- meerschaum/_internal/gui/app/_windows.py,sha256=-VHdjTzA3V596fVqnbmTxemONSp_80-sTNJ0CTB8FwU,2632
13
- meerschaum/_internal/gui/app/actions.py,sha256=rx37qXf3uoa7Ou0n1cISqNFZNL0nr4wO7vSUmWO8f2E,935
14
- meerschaum/_internal/gui/app/pipes.py,sha256=4nAQ0rrHb_2bNgDF0Ru2YlbPaCDDzAl5beOGU4Af-4A,1596
15
10
  meerschaum/_internal/shell/Shell.py,sha256=R6xW-D9gVuxJxQzf4Bf6E9V8exE40aCdrDJ_snUpoxA,39982
16
11
  meerschaum/_internal/shell/ShellCompleter.py,sha256=Ex6mPv83RUNdC3ufRJCcaoOmQ8q8z6tCHDVzXQmWIpY,3293
17
12
  meerschaum/_internal/shell/ValidAutoSuggest.py,sha256=bARjOWMidz0dvMelLUe6yRPto5l3gcEHYHqFDjoh22I,1280
@@ -60,7 +55,7 @@ meerschaum/api/_exceptions.py,sha256=xfbWp8F8JYrMUdtDXesn8C8e39_jAXHz51IosIGjkVM
60
55
  meerschaum/api/_oauth2.py,sha256=dJTIVlPpX3sAVW-PcN6pXRNy2RR5QAalu2RHp3l14YU,1683
61
56
  meerschaum/api/_websockets.py,sha256=EMT9wB3yELu_WyCMqn9ZpgMDh23spUUchouRLCCLVuw,1509
62
57
  meerschaum/api/dash/__init__.py,sha256=SpM96oyOy_MUswZHtJkVzMn91PjdADPyCAkyTQjL7LA,2079
63
- meerschaum/api/dash/components.py,sha256=vePWQUf00l_YdVTj_UWfMr1lPq50hV0XpkFLc8iylpk,6571
58
+ meerschaum/api/dash/components.py,sha256=zeXzitZzXSLva12PJI51GeTmmFnmVc1Dl6Opm_yA5dQ,9850
64
59
  meerschaum/api/dash/connectors.py,sha256=-Wd40ieYJI2nOASXi4V1C4bvLekjnN_tj6zp7HgZDl0,791
65
60
  meerschaum/api/dash/graphs.py,sha256=wJUDWzcLN8-C3xko6rj0F2v7Rt8YDkSXoVkkXJjYGIk,2046
66
61
  meerschaum/api/dash/jobs.py,sha256=mj9STE6AaQY4fwkjD1JcYRG0iW3VEcP04bO1SlKgiXw,7681
@@ -78,15 +73,17 @@ meerschaum/api/dash/assets/banner_1920x320.png,sha256=n2cNTSVEsGxO9XZg2keb85J3UO
78
73
  meerschaum/api/dash/assets/favicon.ico,sha256=nDEekVxwS60wEDno1nbw5GF3TJOcDV26SETOHJEZKkY,9662
79
74
  meerschaum/api/dash/assets/logo_48x48.png,sha256=hTR5BHUHEN4yP2xiqAcDciuigoII9T3-80R-dzsxVmw,10218
80
75
  meerschaum/api/dash/assets/logo_500x500.png,sha256=9EUtf6wQcEZTXHKfQ2kjNXod6Rn_4DTB_BkTgxggq00,67702
81
- meerschaum/api/dash/callbacks/__init__.py,sha256=5nLDkziaWWWt5ivmuMNG3kVBMOfqB6KQNIAS8f16bmA,493
82
- meerschaum/api/dash/callbacks/custom.py,sha256=p1ki5jvc6FT628Qz_hm1TMDWGLV7m670R6yRJwsWvuE,1905
83
- meerschaum/api/dash/callbacks/dashboard.py,sha256=BRYypI3Zwx8k7KEZjQDVLI4Z0OQuXBLBlhmhlCvg6JU,36112
76
+ meerschaum/api/dash/callbacks/__init__.py,sha256=5dh8gsfcVaLlM4WcvGVE9Q1CtwaqJ2qwND0tdhvodng,607
77
+ meerschaum/api/dash/callbacks/custom.py,sha256=af7O0OMoNOcAJOuE0N2WXQZbmHiUVcQB9YBe_xgcr7I,1795
78
+ meerschaum/api/dash/callbacks/dashboard.py,sha256=BmFYp3yPkg0N4ywHcKhn2aevGc5BIYfjqtFy2YIj43w,35517
84
79
  meerschaum/api/dash/callbacks/jobs.py,sha256=JYTrDcUEte_MIT3EegLDmQDsmU_Mxqw8L60dvF71ho4,8418
85
80
  meerschaum/api/dash/callbacks/login.py,sha256=mEvMgV-f85H6DvqNdTvJPoiwHqTnhWY2nf_zLB26ipE,2876
86
81
  meerschaum/api/dash/callbacks/pipes.py,sha256=byphQn-wJOe8ft-fGU9wac0n5xsMjVHJzNvYYb9NsKU,1693
87
82
  meerschaum/api/dash/callbacks/plugins.py,sha256=znPgw_Uf3__QEjKxoIHADfjVNubTehCDaTJ02b16pQo,2760
88
83
  meerschaum/api/dash/callbacks/register.py,sha256=KfMFgXWiFkemz0YriSPaLQBVnFDG8q6_t9gHuempOS0,3666
89
- meerschaum/api/dash/pages/__init__.py,sha256=E3MI73_FR21R_-npTJ9HBNd7hdbOwQ75V-TMpq3ohz8,349
84
+ meerschaum/api/dash/callbacks/settings/__init__.py,sha256=pttbJMJGfd5I_oCWfbpbbVtXZp7pyerl9ESgY9xwUwI,157
85
+ meerschaum/api/dash/callbacks/settings/password_reset.py,sha256=LD4wS1k-MyGIJNwQL897Rg001U9Z53iHWK2Agzu6oyU,2468
86
+ meerschaum/api/dash/pages/__init__.py,sha256=U7PyReXPnB0PizArS6o556FXuDsUBCplI9zBLe3CU2s,391
90
87
  meerschaum/api/dash/pages/dashboard.py,sha256=d6zPEycsbiFJyvufN6kt5JsOZbpW9zy-mNxPAJ_wOFo,3830
91
88
  meerschaum/api/dash/pages/error.py,sha256=-uCrASuIBrceHcc-leLeEoLos2ibSBWG0XMFQzFwtbw,595
92
89
  meerschaum/api/dash/pages/job.py,sha256=bAXXDB0fM3bSiqqJ2XlTwVdg2lohRaWdIGZp7ZtTZOw,544
@@ -94,6 +91,8 @@ meerschaum/api/dash/pages/login.py,sha256=Qjc-kDL9wW4D1cN48x0MrmWCME4igHDt0VkX9J
94
91
  meerschaum/api/dash/pages/pipes.py,sha256=Cd5XY_m4nBIsEk6TQadpcajuBRzxw1cyDaTtojwykcI,506
95
92
  meerschaum/api/dash/pages/plugins.py,sha256=EX-M99bxvRSrI-9bIBocj-tmBpf6NgPQ813sJ_HSXS8,1731
96
93
  meerschaum/api/dash/pages/register.py,sha256=dqhsiu2OhrXhs4RL41_CpqipdrWo1-_roASvZIDBAq8,2364
94
+ meerschaum/api/dash/pages/settings/__init__.py,sha256=UjfD2Pyz504CcbieVQbXbljjU5Wnxx7Pe0aix1zqBOE,153
95
+ meerschaum/api/dash/pages/settings/password_reset.py,sha256=cVIesZfCSixEBPWPLAV0jQpwJPKq0vXTIZ_BDuKlU6g,1864
97
96
  meerschaum/api/models/__init__.py,sha256=WrSLChqDkw5y9uU_ma2xJFFLqqVAQvHoIjuYrZDxOcM,276
98
97
  meerschaum/api/models/_interfaces.py,sha256=XtqxzWvUhZ-_SDia45Ut9K_VNziSltGjmLlUt-tMcJY,263
99
98
  meerschaum/api/models/_locations.py,sha256=EF0aZDynLYyDApk_FcpoEK_5ictWnh6bwD73yP99rh8,304
@@ -103,7 +102,7 @@ meerschaum/api/resources/__init__.py,sha256=LshFiqh0sL55QtC_15fz6A6r-1_H9sQWtlif
103
102
  meerschaum/api/resources/static/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
103
  meerschaum/api/resources/static/css/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
104
  meerschaum/api/resources/static/css/bootstrap.min.css,sha256=W8ArKu4Q_NnxCNqO3doJB2hqrNOIHNLFroAxpyxnYL8,180286
106
- meerschaum/api/resources/static/css/dash.css,sha256=T30ZHWx1Kq-E0BaUJrMwVeTba_lxsFaO2r5AL8716W8,1714
105
+ meerschaum/api/resources/static/css/dash.css,sha256=nhHriUI9eos9bjMUofqNhqMQDK8W_f-vxfcWhbl1XBY,1886
107
106
  meerschaum/api/resources/static/css/dbc_dark.css,sha256=2pka1ymFAjlWLv-mJaxGkPeL-gTEMD2g4Ba6LMuhHV4,6087
108
107
  meerschaum/api/resources/static/css/styles.css,sha256=dHcCtRUzs8kJhpG6d4gusROLSe9AFkUitybvgFmEDvI,81
109
108
  meerschaum/api/resources/static/css/xterm.css,sha256=gy8_LGA7Q61DUf8ElwFQzHqHMBQnbbEmpgZcbdgeSHI,5383
@@ -127,7 +126,7 @@ meerschaum/api/routes/_index.py,sha256=Z8kuyqm3vmJadw8iIYyswYI4-3IOJ7KXdkhDTv1oU
127
126
  meerschaum/api/routes/_jobs.py,sha256=sEt-UtVd5pN-hJgikTvj1oTKJQ2hhNe8XhjkclwOXOE,12568
128
127
  meerschaum/api/routes/_login.py,sha256=tygEp50EVOMgvTG6CEASlShflbtEK8viJ9O07o0lnnE,2434
129
128
  meerschaum/api/routes/_misc.py,sha256=XxfSvXNGAm8rdvXePXWxX8wc5tjeAdBOSZwYveL3oAM,2591
130
- meerschaum/api/routes/_pipes.py,sha256=1NiL6xKPdFh4LNm5OioedZ_bHUlDBRM7uJU4frjXcDE,28111
129
+ meerschaum/api/routes/_pipes.py,sha256=QEZgLbCPyQUXGq6MbNcSIPsMZ357s19CIlECjp-rPnc,29776
131
130
  meerschaum/api/routes/_plugins.py,sha256=okstNlv9Bhoiy6JvQWgwjxEi4kQ8adPUcir6k3Y7hH8,6329
132
131
  meerschaum/api/routes/_users.py,sha256=i55LuLTQ2cuzIyWz0PxkWji6aQQUIBPf_FEryKwXI50,7197
133
132
  meerschaum/api/routes/_version.py,sha256=-3A0i4Gk54netFOOwjI_x3YQik9vgHjtq7G_VYbzIJo,750
@@ -146,7 +145,7 @@ meerschaum/config/_preprocess.py,sha256=-AEA8m_--KivZwTQ1sWN6LTn5sio_fUr2XZ51BO6
146
145
  meerschaum/config/_read_config.py,sha256=RLC3HHi_1ndj7ITVDKLD9_uULY3caGRwSz3ATYE-ixA,15014
147
146
  meerschaum/config/_shell.py,sha256=46_m49Txc5q1rGfCgO49ca48BODx45DQJi8D0zz1R18,4245
148
147
  meerschaum/config/_sync.py,sha256=jHcWRkxd82_BgX8Xo8agsWvf7BSbv3qHLWmYl6ehp_0,4242
149
- meerschaum/config/_version.py,sha256=qSHUj8MxnJ9gRyXkAhkZxz2mL83tODyagATrnfHLw2c,74
148
+ meerschaum/config/_version.py,sha256=7okJtJcqzixKAM_p1_8Xn65bdIYufx5bhsC8mvjwTzU,71
150
149
  meerschaum/config/paths.py,sha256=JjibeGN3YAdSNceRwsd42aNmeUrIgM6ndzC8qZAmNI0,621
151
150
  meerschaum/config/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
151
  meerschaum/config/stack/__init__.py,sha256=2UukC0Lmk-aVL1o1qXzumqmuIrw3vu9fD7iCuz4XD4I,10544
@@ -156,7 +155,7 @@ meerschaum/config/stack/mosquitto/resources/__init__.py,sha256=47DEQpj8HBSa-_TIm
156
155
  meerschaum/config/stack/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
156
  meerschaum/config/static/__init__.py,sha256=ccm5oaYnLu0j5B85C9a8Y7jWsw4ReJq5RqyvLd-rW_s,5519
158
157
  meerschaum/connectors/_Connector.py,sha256=VaVNg0SlQCTXk4shl3c68QdkbymA2Y9ScUlUjckk8PY,6795
159
- meerschaum/connectors/__init__.py,sha256=bpWsnU0uvoowWyUkFTwfEkadK84pssZUJ4M7yReudOU,12703
158
+ meerschaum/connectors/__init__.py,sha256=Hx_T2E3fF6zYLC1pjAt0EbnuDbVk9UOI845WaQGw7lk,12716
160
159
  meerschaum/connectors/parse.py,sha256=Dzu3fiZu-Vd5d0qje-HCwIIolfmWmUYEOpYRjc7vDqw,4188
161
160
  meerschaum/connectors/poll.py,sha256=23yRUeIqqyNVt8VoJErhirW543YZ6X0ocfBauMJnC_g,7465
162
161
  meerschaum/connectors/api/_APIConnector.py,sha256=bcjvPVfxE7y7i_r3FTPL1phzjTMqWq4szJzeusaNqQg,5598
@@ -166,7 +165,7 @@ meerschaum/connectors/api/_fetch.py,sha256=Khq9AFr1nk8Dsmcedb77aWhAuHw0JGgVeahDG
166
165
  meerschaum/connectors/api/_jobs.py,sha256=N5lpHFGG10jlVgaJeWAOTuLBQw3AdgjXsEPpp1YwZQE,11270
167
166
  meerschaum/connectors/api/_login.py,sha256=cVVmiS-QT0y0QHdrG25eGB4f7j44om1E0YPxnMCNeas,2049
168
167
  meerschaum/connectors/api/_misc.py,sha256=XK0LLexNUEKZjAAqoJ-9oOgwLlMdwxSOvcpqO5NuOas,1083
169
- meerschaum/connectors/api/_pipes.py,sha256=yeyxb83RBtqK2RuBhrmifN0mUwobN5IAetn-SGB3Qjo,22384
168
+ meerschaum/connectors/api/_pipes.py,sha256=6WVHx5chscrejIPcvBNKIH4FDaRCJ1cMzADrdtEpRes,23865
170
169
  meerschaum/connectors/api/_plugins.py,sha256=hv0rqWaH8GrQMup8XMdfUbpv_qGcEAjnl3S8yYQGcsI,5072
171
170
  meerschaum/connectors/api/_request.py,sha256=JtnDa14nkC5CDCuYhutUPztnbLxxzgjmGG_0k09B4mY,6957
172
171
  meerschaum/connectors/api/_uri.py,sha256=HWxqGx4R1cHZ3ywy9Ro9ePbFxxusw4RLaC3hpGt9Z6I,1469
@@ -179,7 +178,7 @@ meerschaum/connectors/sql/_cli.py,sha256=smwMBxq-euAeefbdZSXGTr83cm04GVGT1WIFEft
179
178
  meerschaum/connectors/sql/_create_engine.py,sha256=RRiTNNVNwE_sabeTRWrlZZoFB6jFXDfcEcXkENuo8Rc,12035
180
179
  meerschaum/connectors/sql/_fetch.py,sha256=mVe5zQo7SM9PSUU3Vjhacg4Bq1-Vttb7KkXL4p5YQdQ,12818
181
180
  meerschaum/connectors/sql/_instance.py,sha256=xCc8M0xWMzF5Tu_1uWIFivAoHey5N1ccFhN_Z7u04zk,6304
182
- meerschaum/connectors/sql/_pipes.py,sha256=RAE3ACk7U0-Z2jnXBFJt_laKIqA4EABxPuDApPHkTc8,129185
181
+ meerschaum/connectors/sql/_pipes.py,sha256=udeAA-me-Lwq_gGRdvzvcaBWmkAb4eeXZvKdtUUcBfE,130202
183
182
  meerschaum/connectors/sql/_plugins.py,sha256=OVEdZ_UHTi-x5sF-5lu2TmR9ONxddp6SwDOmFo5TpU8,8051
184
183
  meerschaum/connectors/sql/_sql.py,sha256=EziDFp9mLU-VPvFczG94ZUtGy-JmKxXB4wbLtCfkykk,43786
185
184
  meerschaum/connectors/sql/_uri.py,sha256=BFzu5pjlbL3kxLH13vHWlpKGYTPfg8wuA2j58O9NsCM,3440
@@ -187,14 +186,14 @@ meerschaum/connectors/sql/_users.py,sha256=mRyjsUCfPV52nfTQUbpu9gMXfV_DHXNqEhw4N
187
186
  meerschaum/connectors/sql/tools.py,sha256=jz8huOaRCwGlYdtGfAqAh7SoK8uydYBrasKQba9FT38,187
188
187
  meerschaum/connectors/sql/tables/__init__.py,sha256=53EeJsvmGjj68SpSShdt6kyLuk5Md5O8DnvWC1ra3u8,8876
189
188
  meerschaum/connectors/sql/tables/types.py,sha256=Jc_MTHIBM-KHpQt__Lckp39CeOo7tGOiAk5faDx-znY,1573
190
- meerschaum/connectors/valkey/_ValkeyConnector.py,sha256=_KjJSgUcZhNJZuPfn0vhDBjnOzjtk_jZrjScfhio0Ww,15794
189
+ meerschaum/connectors/valkey/_ValkeyConnector.py,sha256=IJgFXHXH89J2uDP_WaejIzr1L8gSNQtSXGxjXeYm2gw,15854
191
190
  meerschaum/connectors/valkey/__init__.py,sha256=jkVutsygQCvGPLN17cP6wHAjHajxVycnQJbm2eVMuY0,187
192
191
  meerschaum/connectors/valkey/_fetch.py,sha256=MjeE0h3YI4M3LCzy7axQAc_fX_l82vUqX4WXcYoppxE,1920
193
- meerschaum/connectors/valkey/_pipes.py,sha256=sjjO1vehNCkN_2bsqQKy81WWWrOg8a8ElupqzCjZ_7c,24594
192
+ meerschaum/connectors/valkey/_pipes.py,sha256=3F24dzdCZ17fQU2tnk2x4n-Mr95fd5tP2-sKD0FiXPw,24673
194
193
  meerschaum/connectors/valkey/_plugins.py,sha256=ZqiEW4XZCOpw4G8DUK2IKY6Qrph4mYfTjgXWimgakYY,6267
195
194
  meerschaum/connectors/valkey/_users.py,sha256=AS1vLarrkDA9yPK644GWwRiQiTZVa9x3nlLpyntq40g,7730
196
195
  meerschaum/core/__init__.py,sha256=tjASW10n9uLV6bYhcwP4rggh-ESXSJzgxpSBbVsuISs,251
197
- meerschaum/core/Pipe/__init__.py,sha256=0HWR0SbBXRlnO7YEe6WCK3rWzZ7kqx86E6B8-cbenjI,19354
196
+ meerschaum/core/Pipe/__init__.py,sha256=rHlKky1AZI6kg9J_9_yOVCJHinMB9JN6hy0VMZBQmdk,19393
198
197
  meerschaum/core/Pipe/_attributes.py,sha256=wZQBGspZHmqmab_DNEUrvYsJSZtwaDsj0zeXDHoEBdQ,22419
199
198
  meerschaum/core/Pipe/_bootstrap.py,sha256=gTNGh5e2LmTMrgIpHqrVaL60uPKWCphhsuz8j-lJ2HI,7348
200
199
  meerschaum/core/Pipe/_clear.py,sha256=LghXabgyyc1tD7FNQrh9ExT71ipcg2poM9FDA3k9e4M,2230
@@ -209,7 +208,7 @@ meerschaum/core/Pipe/_fetch.py,sha256=IojFSA_EXBSm0I8BmlDgmUh3M85FFtXjmDJhdxZ8Ll
209
208
  meerschaum/core/Pipe/_index.py,sha256=cYgaVwBVfAYxJBZ6j6MXDqOxnOrD_QnYi33_kIwy_FQ,1944
210
209
  meerschaum/core/Pipe/_register.py,sha256=Sd5xaAW8H7uLTIoommcKb-6kHPRuHJLWNSbPnt2UbvA,2240
211
210
  meerschaum/core/Pipe/_show.py,sha256=nG50y8eBT9TVuKkRgAKtNDNIxysJvMNxfu__lkL1F9k,1352
212
- meerschaum/core/Pipe/_sync.py,sha256=NGiGhBI7M_nyIvVvyIA9_4jUKis1YpK4YL_pnceYGjg,38077
211
+ meerschaum/core/Pipe/_sync.py,sha256=YsNlWepIPHVxfoBsYtPkdl5jMdTIEEd0kHtMllUyAoI,39968
213
212
  meerschaum/core/Pipe/_verify.py,sha256=aXRpD6azrN9A9Z3AXkKQw6NJFqNWqZVpgidjh5BsfLE,22565
214
213
  meerschaum/core/Plugin/__init__.py,sha256=UXg64EvJPgI1PCxkY_KM02-ZmBm4FZpLPIQR_uSJJDc,137
215
214
  meerschaum/core/User/_User.py,sha256=qbI0GIkr3G0PI4d9S49uatbJQ2kH_-z5-GoVJ0fuEtA,6624
@@ -219,20 +218,20 @@ meerschaum/jobs/_Job.py,sha256=D4TFrEQQ9EYqZrnepLBO7T3Sx2mOOdgBs2JnBdC1dNc,32257
219
218
  meerschaum/jobs/__init__.py,sha256=YmZr1ZU8MLUjlTSLQ61Y6eE-a-SYuSMSMhiIpJKao_Y,12829
220
219
  meerschaum/jobs/systemd.py,sha256=CZbBkm-2z8z7G3CNmP5yBRj2VtWuxmxXVIv97cGhZGc,24613
221
220
  meerschaum/plugins/_Plugin.py,sha256=CyaWg0TImFui9NMJkTP3bYKnYHmRC5uVrPSPKoiB_Dc,34359
222
- meerschaum/plugins/__init__.py,sha256=Tl5B0Q4rIfgkPpgknJH3UKKB3fS_cAWI9TspKosvBPM,26520
221
+ meerschaum/plugins/__init__.py,sha256=H0VwldqR_n5XaX3amBl58mDgugIo0Pnn-e1Xxyb103I,27312
223
222
  meerschaum/plugins/bootstrap.py,sha256=VwjpZAuYdqPJW0YoVgAoM_taHkdQHqP902-8T7OWWCI,11339
224
223
  meerschaum/utils/__init__.py,sha256=QrK1K9hIbPCRCM5k2nZGFqGnrqhA0Eh-iSmCU7FG6Cs,612
225
224
  meerschaum/utils/_get_pipes.py,sha256=tu4xKPoDn79Dz2kWM13cXTP4DSCkn-3G9M8KiLftopw,11073
226
- meerschaum/utils/dataframe.py,sha256=SfwFGqBTGVcA5ulWEXOV2GZ1633JPcRXxF_l6oQ7L5o,52020
225
+ meerschaum/utils/dataframe.py,sha256=J7L2OWCuRI1Oxi-UMgQK9S_CiduuSopC7bmO1k-eQdM,54091
227
226
  meerschaum/utils/debug.py,sha256=GyIzJmunkoPnOcZNYVQdT4Sgd-aOb5MI2VbIgATOjIQ,3695
228
227
  meerschaum/utils/interactive.py,sha256=t-6jWozXSqL7lYGDHuwiOjTgr-UKhdcg61q_eR5mikI,3196
229
- meerschaum/utils/misc.py,sha256=8TOQQlFyF_aYnc8tnx98lccXr9tFrdlS-ngXeOQjHHY,47407
228
+ meerschaum/utils/misc.py,sha256=by_cNQ2qzQoFZYDBLRIimFzsxXW3QLuHSsFUnSahk5E,47419
230
229
  meerschaum/utils/networking.py,sha256=Sr_eYUGW8_UV9-k9LqRFf7xLtbUcsDucODyLCRsFRUc,1006
231
230
  meerschaum/utils/pool.py,sha256=vkE42af4fjrTEJTxf6Ek3xGucm1MtEkpsSEiaVzNKHs,2655
232
231
  meerschaum/utils/process.py,sha256=as0-CjG4mqFP0TydVvmAmgki6er4thS5BqUopeiq98Q,8216
233
232
  meerschaum/utils/prompt.py,sha256=qj1As1tuiL0GZTku_YOC6I5DmOU6L5otDR7DW7LA5fM,19397
234
233
  meerschaum/utils/schedule.py,sha256=Vrcd2Qs-UPVn6xBayNUIgludf0Mlb6Wrgq6ATdyhV8c,11451
235
- meerschaum/utils/sql.py,sha256=wOm_9bA2HRn-TGYqyiqwU3ILk3JBOH08X8e5k0TEDes,80786
234
+ meerschaum/utils/sql.py,sha256=sVW1F7BMshmGPiG9yi2nSRVtU9mzQKH8SbqfNrl018Q,84369
236
235
  meerschaum/utils/threading.py,sha256=awjbVL_QR6G-o_9Qk85utac9cSdqkiC8tQSdERCdrG8,2814
237
236
  meerschaum/utils/typing.py,sha256=U3MC347sh1umpa3Xr1k71eADyDmk4LB6TnVCpq8dVzI,2830
238
237
  meerschaum/utils/warnings.py,sha256=n-phr3BftNNgyPnvnXC_VMSjtCvjiCZ-ewmVfcROhkc,6611
@@ -243,23 +242,23 @@ meerschaum/utils/daemon/RotatingFile.py,sha256=8_bXegBjjzNRlNEjFZ_EHU4pSaDfjXZTw
243
242
  meerschaum/utils/daemon/StdinFile.py,sha256=qdZ8E_RSOkURypwnS50mWeyWyRig1bAY9tKWMTVKajc,3307
244
243
  meerschaum/utils/daemon/__init__.py,sha256=ziRPyu_IM3l7Xd58y3Uvt0fZLoirJ9nuboFIxxult6c,8741
245
244
  meerschaum/utils/daemon/_names.py,sha256=d2ZwTxBoTAqXZkCfZ5LuX2XrkQmLNUq1OTlUqfoH5dA,4515
246
- meerschaum/utils/dtypes/__init__.py,sha256=nFlslv8aL_UFscWNJOwY19F5KFvXsXAR0_UX0rjF6D8,20669
247
- meerschaum/utils/dtypes/sql.py,sha256=MhuFT3wY8cx_o556a-oa3sKVKmAus0_O8ETbIIRlXik,26074
245
+ meerschaum/utils/dtypes/__init__.py,sha256=CIq3UsBzkq9MHV4RYgn8jfNDIdUdYgLYYpU8kFBRkC8,21285
246
+ meerschaum/utils/dtypes/sql.py,sha256=zhwGnz6MfsaJEH7Sibtd-GfVEImnBSkZh1I3srxgiKE,31428
248
247
  meerschaum/utils/formatting/__init__.py,sha256=bA8qwBeTNIVHVQOBK682bJsKSKik1yS6xYJAoi0RErk,15528
249
248
  meerschaum/utils/formatting/_jobs.py,sha256=izsqPJhTtUkXUUtWnbXtReYsUYwulXtci3pBj72Ne64,6637
250
249
  meerschaum/utils/formatting/_pipes.py,sha256=gwl8-xCN5GYqBZJ7SkY20BebcofY0nU5X8Y4Emf5dz8,19570
251
250
  meerschaum/utils/formatting/_pprint.py,sha256=wyTmjHFnsHbxfyuytjTWzH-D42Z65GuIisQ_W6UnRPg,3096
252
251
  meerschaum/utils/formatting/_shell.py,sha256=2bFvtwNXapjl9jdlc0fg79PRWHbYVcllKiVcG5g36qI,3678
253
252
  meerschaum/utils/packages/__init__.py,sha256=TdKaj2tmN4bFwzusOfMv24P5ET7Zv73vyoOf9GOIr5E,64427
254
- meerschaum/utils/packages/_packages.py,sha256=BWBJRlwWqZD4SPcM-SbVxEJ2pwclUhioSeP1ldSiYWE,9047
253
+ meerschaum/utils/packages/_packages.py,sha256=G3eMtqq4WJo_iTC4ctRAWkzKhN6ZQcdFRpKy5j6glMk,9131
255
254
  meerschaum/utils/packages/lazy_loader.py,sha256=VHnph3VozH29R4JnSSBfwtA5WKZYZQFT_GeQSShCnuc,2540
256
255
  meerschaum/utils/venv/_Venv.py,sha256=gc1TCeAj-kTZbQFAT9xl1bi4HXFV5ApT0dPOJfxwr78,3748
257
- meerschaum/utils/venv/__init__.py,sha256=6FDfOSBsGgw2RIXvBuFEwlF5740RIHs4Qum0ekati9I,27249
258
- meerschaum-2.9.0rc2.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
259
- meerschaum-2.9.0rc2.dist-info/METADATA,sha256=18-lm3TfFldZ0KZdp6YkgF5HDpzfPii7thoQ7ibqMuA,24930
260
- meerschaum-2.9.0rc2.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
261
- meerschaum-2.9.0rc2.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
262
- meerschaum-2.9.0rc2.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
263
- meerschaum-2.9.0rc2.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
264
- meerschaum-2.9.0rc2.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
265
- meerschaum-2.9.0rc2.dist-info/RECORD,,
256
+ meerschaum/utils/venv/__init__.py,sha256=RhWuDohBEROIu_9T6BNPgYCrGtuE14w7nXHR1E2qyh8,27321
257
+ meerschaum-2.9.1.dist-info/LICENSE,sha256=jG2zQEdRNt88EgHUWPpXVWmOrOduUQRx7MnYV9YIPaw,11359
258
+ meerschaum-2.9.1.dist-info/METADATA,sha256=ZPWiGuRYN720zphzsnJzL1fZITZItbScGDWE-tpScMQ,25123
259
+ meerschaum-2.9.1.dist-info/NOTICE,sha256=OTA9Fcthjf5BRvWDDIcBC_xfLpeDV-RPZh3M-HQBRtQ,114
260
+ meerschaum-2.9.1.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
261
+ meerschaum-2.9.1.dist-info/entry_points.txt,sha256=5YBVzibw-0rNA_1VjB16z5GABsOGf-CDhW4yqH8C7Gc,88
262
+ meerschaum-2.9.1.dist-info/top_level.txt,sha256=bNoSiDj0El6buocix-FRoAtJOeq1qOF5rRm2u9i7Q6A,11
263
+ meerschaum-2.9.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
264
+ meerschaum-2.9.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (76.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,43 +0,0 @@
1
- #! /usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- # vim:fenc=utf-8
4
-
5
- """
6
- Meerschaum GUI definition. Start the GUI with `start gui`.
7
- """
8
-
9
- from meerschaum.config.static import STATIC_CONFIG
10
- from meerschaum.utils.packages import attempt_import
11
- from meerschaum.config import __version__
12
- from meerschaum.config._paths import PACKAGE_ROOT_PATH
13
- from meerschaum.utils.threading import Lock
14
-
15
- from meerschaum._internal.gui.app import MeerschaumApp
16
-
17
- icon_path = PACKAGE_ROOT_PATH / 'api' / 'dash' / 'assets' / 'logo_500x500.png'
18
-
19
- locks = {'app': Lock()}
20
- _app = None
21
-
22
- def get_app(**kw) -> MeerschaumApp:
23
- """Instantiate and return the main app."""
24
- global _app
25
- if _app is None:
26
- with locks['app']:
27
- _app = build_app(**kw)
28
- return _app
29
-
30
- def build_app(**kw) -> MeerschaumApp:
31
- """Construct and return an instance of the GUI application."""
32
- _kw = dict(
33
- formal_name = STATIC_CONFIG['setup']['formal_name'],
34
- app_id = STATIC_CONFIG['setup']['app_id'],
35
- app_name = STATIC_CONFIG['setup']['name'],
36
- author = STATIC_CONFIG['setup']['author'],
37
- description = STATIC_CONFIG['setup']['description'],
38
- icon = icon_path,
39
- version = __version__,
40
- home_page = STATIC_CONFIG['setup']['url'],
41
- )
42
- _kw.update(kw)
43
- return MeerschaumApp(**_kw)
@@ -1,50 +0,0 @@
1
- #! /usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- # vim:fenc=utf-8
4
-
5
- """
6
- Define the `toga.App` implementation here.
7
- """
8
-
9
- from __future__ import annotations
10
- from meerschaum.utils.typing import Optional, List, Dict, Any
11
-
12
- from meerschaum.utils.packages import attempt_import
13
- toga = attempt_import('toga', lazy=False, venv=None)
14
-
15
- from meerschaum._internal.gui.app._windows import get_windows, get_main_window
16
-
17
- class MeerschaumApp(toga.App):
18
-
19
-
20
- def __init__(
21
- self,
22
- *args: Any,
23
- mrsm_instance: Optional[str] = None,
24
- debug: bool = False,
25
- **kw: Any
26
- ):
27
- """
28
- Set the initial state of the GUI application from the keyword arguments.
29
- """
30
- from meerschaum.utils.misc import filter_keywords
31
- self._windows = get_windows(instance=mrsm_instance, debug=debug, **kw)
32
- windows_list = list(kw.pop('windows', []))
33
- windows_list += [w for k, w in self._windows.items()]
34
- _init = super(MeerschaumApp, self).__init__
35
- _init(*args, **filter_keywords(_init, windows=windows_list, **kw))
36
- self._debug = debug
37
- self._instance = mrsm_instance
38
- self._kw = kw
39
-
40
- def startup(self) -> None:
41
- """Entrypoint for the GUI application."""
42
- self.main_window = get_main_window(instance=self._instance, debug=self._debug, **self._kw)
43
- for k, w in self._windows.items():
44
- if k == 'main':
45
- continue
46
- w.app = self
47
- self._windows['main'] = self.main_window
48
-
49
- self.main_window.show()
50
- print('CLOSE')
@@ -1,74 +0,0 @@
1
- #! /usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- # vim:fenc=utf-8
4
-
5
- """
6
- Define different windows for the GUI application.
7
- """
8
-
9
- from __future__ import annotations
10
- from meerschaum.utils.typing import List, Dict, Optional
11
-
12
- from meerschaum._internal.gui.app import toga
13
-
14
- def get_windows(**kw) -> Dict[str, toga.window.Window]:
15
- return {
16
- # 'main': get_main_window(**kw),
17
- 'terminal': get_terminal_window(**kw),
18
- }
19
-
20
-
21
- def get_main_window(instance: Optional[str], debug: bool = False, **kw) -> toga.window.Window:
22
- from meerschaum.config.static import _static_config
23
- from meerschaum.utils.misc import get_connector_labels
24
- from meerschaum.connectors import instance_types
25
- from meerschaum._internal.gui.app.pipes import build_pipes_tree
26
-
27
- main_window = toga.MainWindow(title=_static_config()['setup']['formal_name'], size=(1280, 720))
28
- tree = build_pipes_tree(mrsm_instance=instance, debug=debug, **kw)
29
- sub_menu = toga.Group("Sub Menu", parent=toga.Group.COMMANDS, order=2)
30
-
31
- left_box = toga.Box(children=[
32
- toga.Box(children=[
33
- toga.Selection(items=get_connector_labels(*instance_types), style=toga.style.Pack(flex=1)),
34
- tree,
35
- toga.Button('Hello, world!', style=toga.style.Pack(flex=1, padding=10), on_press=show_test_window),
36
- ], style=toga.style.Pack(flex=1, padding=10, direction='column', width=200))
37
-
38
- ])
39
- label = toga.Label("foo!")
40
- right_box = toga.Box(children=[], style=toga.style.Pack(flex=1))
41
-
42
- main_box = toga.Box(children=[left_box, right_box])
43
-
44
- option_container = toga.OptionContainer()
45
- option_container.add('foo', label)
46
- # option_container.add('Terminal', self.webview)
47
- # main_box = toga.Box(option_container)
48
- # main_box = option_container
49
- main_window.content = main_box
50
-
51
- from meerschaum.config._paths import PACKAGE_ROOT_PATH
52
- icon_path = PACKAGE_ROOT_PATH / 'api' / 'dash' / 'assets' / 'logo_500x500.png'
53
- command = toga.Command(_open_webterm, label='Open Terminal', icon=icon_path, tooltip=_open_webterm.__doc__)
54
- # main_window.toolbar.add(command)
55
- # self._windows['main_window'] = main_window
56
- # return self._windows['main_window']
57
- return main_window
58
-
59
-
60
- def get_terminal_window(**kw):
61
- window = toga.Window(title='Terminal')
62
- webview = toga.WebView(url='http://localhost:8765', style=toga.style.Pack(flex=1))
63
- box = toga.Box(children=[webview])
64
-
65
- window.content = box
66
- return window
67
-
68
-
69
- def _open_webterm():
70
- """Foo bar"""
71
-
72
- def show_test_window(button):
73
- from meerschaum._internal.gui import get_app
74
- get_app()._windows['terminal'].show()