planar 0.9.1__py3-none-any.whl → 0.9.2__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.
planar/ai/agent_base.py CHANGED
@@ -12,6 +12,7 @@ from typing import (
12
12
  )
13
13
 
14
14
  from pydantic import BaseModel
15
+ from pydantic_ai.settings import ModelSettings
15
16
 
16
17
  from planar.ai.models import AgentConfig, AgentEventEmitter, AgentRunResult
17
18
  from planar.logging import get_logger
@@ -38,7 +39,10 @@ class AgentBase[
38
39
  user_prompt: str = ""
39
40
  tools: list[Callable] = field(default_factory=list)
40
41
  max_turns: int = 2
41
- model_parameters: dict[str, Any] = field(default_factory=dict)
42
+ # `ModelSettings` is a TypedDict; use a typed empty dict as default
43
+ model_parameters: ModelSettings = field(
44
+ default_factory=lambda: cast(ModelSettings, {})
45
+ )
42
46
  event_emitter: AgentEventEmitter | None = None
43
47
  durable: bool = True
44
48
 
planar/ai/agent_utils.py CHANGED
@@ -1,13 +1,10 @@
1
1
  import inspect
2
- from typing import (
3
- Any,
4
- Callable,
5
- Dict,
6
- )
2
+ from typing import Any, Callable, Dict, cast
7
3
 
8
4
  from jinja2 import StrictUndefined, TemplateError
9
5
  from jinja2.sandbox import SandboxedEnvironment
10
- from pydantic import BaseModel, create_model
6
+ from pydantic import BaseModel, Field, create_model
7
+ from pydantic_ai.settings import ModelSettings
11
8
 
12
9
  from planar.ai.models import (
13
10
  AgentConfig,
@@ -24,8 +21,9 @@ logger = get_logger(__name__)
24
21
  class ModelSpec(BaseModel):
25
22
  """Pydantic model for AI model specifications."""
26
23
 
24
+ model_config = {"arbitrary_types_allowed": True}
27
25
  model_id: str
28
- parameters: dict[str, Any] = {}
26
+ parameters: ModelSettings = Field(default_factory=lambda: cast(ModelSettings, {}))
29
27
 
30
28
 
31
29
  def extract_files_from_model(
planar/ai/models.py CHANGED
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  from enum import Enum
4
2
  from typing import (
5
3
  Annotated,
@@ -11,9 +9,11 @@ from typing import (
11
9
  Protocol,
12
10
  TypeVar,
13
11
  Union,
12
+ cast,
14
13
  )
15
14
 
16
15
  from pydantic import BaseModel, Field
16
+ from pydantic_ai.settings import ModelSettings
17
17
 
18
18
  from planar.files.models import PlanarFile
19
19
  from planar.modeling.field_helpers import JsonSchema
@@ -29,11 +29,17 @@ T = TypeVar("T", bound=Union[str, BaseModel])
29
29
  # This model allows storing configurations that override the default
30
30
  # settings defined in Agent instances.
31
31
  class AgentConfig(BaseModel):
32
+ # ModelSettings TypedDict has some fields that use non-serializable types
33
+ # so we need to allow arbitrary types
34
+ model_config = {"arbitrary_types_allowed": True}
32
35
  system_prompt: str
33
36
  user_prompt: str = Field()
34
37
  model: str = Field()
35
38
  max_turns: int = Field()
36
- model_parameters: Dict[str, Any] = Field(default_factory=dict)
39
+ # `ModelSettings` is a TypedDict; use a typed empty dict as default
40
+ model_parameters: ModelSettings = Field(
41
+ default_factory=lambda: cast(ModelSettings, {})
42
+ )
37
43
 
38
44
 
39
45
  class ToolDefinition(BaseModel):
planar/ai/pydantic_ai.py CHANGED
@@ -384,7 +384,7 @@ class ModelRunResponse[TOutput: BaseModel | str](BaseModel):
384
384
  async def model_run[TOutput: BaseModel | str](
385
385
  model: Model | KnownModelName,
386
386
  max_extra_turns: int,
387
- model_settings: dict[str, Any] | None = None,
387
+ model_settings: ModelSettings | None = None,
388
388
  messages: list[m.ModelMessage] = [],
389
389
  tools: list[m.ToolDefinition] = [],
390
390
  event_handler: m.AgentEventEmitter | None = None,
@@ -443,7 +443,7 @@ async def model_run[TOutput: BaseModel | str](
443
443
  model=model,
444
444
  messages=history,
445
445
  model_request_parameters=request_params,
446
- model_settings=cast(ModelSettings, model_settings),
446
+ model_settings=model_settings,
447
447
  ) as stream:
448
448
  async for event in stream:
449
449
  match event:
planar/db/alembic/env.py CHANGED
@@ -41,6 +41,13 @@ def run_migrations_offline() -> None:
41
41
  )
42
42
 
43
43
 
44
+ def include_name(name, type_, _):
45
+ if type_ == "schema":
46
+ return name == PLANAR_SCHEMA
47
+ else:
48
+ return True
49
+
50
+
44
51
  def run_migrations_online() -> None:
45
52
  """Run migrations in 'online' mode.
46
53
 
@@ -60,8 +67,8 @@ def run_migrations_online() -> None:
60
67
  target_metadata=target_metadata,
61
68
  # For SQLite, don't use schema since it's not supported
62
69
  version_table_schema=None if is_sqlite else PLANAR_SCHEMA,
63
- include_schemas=not is_sqlite,
64
- compare_type=True,
70
+ include_schemas=True,
71
+ include_name=include_name,
65
72
  # SQLite doesn't support alter table, so we need to use render_as_batch
66
73
  # to create the tables in a single transaction. For other databases,
67
74
  # the batch op is no-op.
@@ -95,7 +102,7 @@ def run_migrations_online() -> None:
95
102
  config_dict = config.get_section(config.config_ini_section, {})
96
103
  url = config_dict["sqlalchemy.url"]
97
104
  is_sqlite = url.startswith("sqlite://")
98
- translate_map = {"planar": None} if is_sqlite else {}
105
+ translate_map = {PLANAR_SCHEMA: None} if is_sqlite else {}
99
106
  connectable = engine_from_config(
100
107
  config_dict,
101
108
  prefix="sqlalchemy.",
@@ -110,15 +117,15 @@ def run_migrations_online() -> None:
110
117
  with connectable.connect() as connection:
111
118
  is_sqlite = connection.dialect.name == "sqlite"
112
119
  if is_sqlite:
113
- connection.dialect.default_schema_name = "planar"
120
+ connection.dialect.default_schema_name = PLANAR_SCHEMA
114
121
 
115
122
  context.configure(
116
123
  connection=connection,
117
124
  target_metadata=target_metadata,
118
125
  # For SQLite, don't use schema since it's not supported
119
126
  version_table_schema=None if is_sqlite else PLANAR_SCHEMA,
120
- include_schemas=not is_sqlite,
121
- compare_type=True,
127
+ include_schemas=True,
128
+ include_name=include_name,
122
129
  # SQLite doesn't support alter table, so we need to use render_as_batch
123
130
  # to create the tables in a single transaction. For other databases,
124
131
  # the batch op is no-op.
@@ -5,12 +5,12 @@ Revises: ${down_revision | comma,n}
5
5
  Create Date: ${create_date}
6
6
 
7
7
  """
8
+
8
9
  from typing import Sequence, Union
9
10
 
10
- from alembic import op
11
11
  import sqlalchemy as sa
12
12
  import sqlmodel.sql.sqltypes
13
- import planar.object_config.models
13
+ from alembic import op
14
14
  ${imports if imports else ""}
15
15
 
16
16
  # revision identifiers, used by Alembic.
planar/py.typed ADDED
File without changes
@@ -1,9 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: planar
3
- Version: 0.9.1
3
+ Version: 0.9.2
4
4
  Summary: Add your description here
5
5
  License-Expression: LicenseRef-Proprietary
6
- Requires-Python: >=3.12
7
6
  Requires-Dist: aiofiles>=24.1.0
8
7
  Requires-Dist: aiosqlite>=0.21.0
9
8
  Requires-Dist: alembic>=1.14.1
@@ -23,19 +22,20 @@ Requires-Dist: sqlmodel>=0.0.22
23
22
  Requires-Dist: typer>=0.15.2
24
23
  Requires-Dist: typing-extensions>=4.12.2
25
24
  Requires-Dist: zen-engine>=0.40.0
25
+ Requires-Dist: azure-storage-blob>=12.19.0 ; extra == 'azure'
26
+ Requires-Dist: azure-identity>=1.15.0 ; extra == 'azure'
27
+ Requires-Dist: aiohttp>=3.8.0 ; extra == 'azure'
28
+ Requires-Dist: ducklake>=0.1.1 ; extra == 'data'
29
+ Requires-Dist: ibis-framework[duckdb]>=10.8.0 ; extra == 'data'
30
+ Requires-Dist: polars>=1.31.0 ; extra == 'data'
31
+ Requires-Dist: opentelemetry-api>=1.34.1 ; extra == 'otel'
32
+ Requires-Dist: opentelemetry-exporter-otlp>=1.34.1 ; extra == 'otel'
33
+ Requires-Dist: opentelemetry-instrumentation-logging>=0.55b1 ; extra == 'otel'
34
+ Requires-Dist: opentelemetry-sdk>=1.34.1 ; extra == 'otel'
35
+ Requires-Python: >=3.12
26
36
  Provides-Extra: azure
27
- Requires-Dist: aiohttp>=3.8.0; extra == 'azure'
28
- Requires-Dist: azure-identity>=1.15.0; extra == 'azure'
29
- Requires-Dist: azure-storage-blob>=12.19.0; extra == 'azure'
30
37
  Provides-Extra: data
31
- Requires-Dist: ducklake>=0.1.1; extra == 'data'
32
- Requires-Dist: ibis-framework[duckdb]>=10.8.0; extra == 'data'
33
- Requires-Dist: polars>=1.31.0; extra == 'data'
34
38
  Provides-Extra: otel
35
- Requires-Dist: opentelemetry-api>=1.34.1; extra == 'otel'
36
- Requires-Dist: opentelemetry-exporter-otlp>=1.34.1; extra == 'otel'
37
- Requires-Dist: opentelemetry-instrumentation-logging>=0.55b1; extra == 'otel'
38
- Requires-Dist: opentelemetry-sdk>=1.34.1; extra == 'otel'
39
39
  Description-Content-Type: text/markdown
40
40
 
41
41
  # Planar
@@ -1,43 +1,29 @@
1
1
  planar/__init__.py,sha256=FAYRGjuJOH2Y_XYFA0-BrRFjuKdPzIShNbaYwJbtu6A,499
2
- planar/_version.py,sha256=MDn0Ro0DvGxuAuRTGL8IBqcm5nbo1P640CIS7xBBu2k,18
3
- planar/app.py,sha256=VEs4jDlcisyOy9I9zEGMG_-Qm8ULKT36CSHjqrYit3o,18491
4
- planar/cli.py,sha256=2ObR5XkLGbdbnDqp5mrBzDVhSacHCNsVNSHnXkrMQzQ,9593
5
- planar/config.py,sha256=6J42G9rEVUiOyCAY3EwUTU3PPmWthGTnrHMzST9TMcc,17809
6
- planar/dependencies.py,sha256=PH78fGk3bQfGnz-AphxH49307Y0XVgl3EY0LdGJnoik,1008
7
- planar/object_registry.py,sha256=RMleX5XE8OKDxlnMeyLpJ1Y280duub-tx1smR1zTlDg,3219
8
- planar/registry_items.py,sha256=UhZRIpbSoa_CV9OTl17pJfRLxItYp4Pxd9f5ZbJkGaM,2055
9
- planar/session.py,sha256=xLS9WPvaiy9nr2Olju1-C-7_sU5VXK8RuNdjuKndul4,1020
10
- planar/task_local.py,sha256=pyvT0bdzAn15HL2yQUs9YrU5MVXh9njQt9MH51AGljs,1102
11
- planar/test_app.py,sha256=5dYhOW6lRbAx2X270DfqktkJ5IfuqfowX6bwxM1WQAM,4865
12
- planar/test_cli.py,sha256=faR6CSuooHHyyB5Yt-p8CIr7mGtKrrU2TLQbc4Oe9bA,13834
13
- planar/test_config.py,sha256=HcmDu1nwKZZhzHQLGVyP9oxje-_g_XubEsvzRj28QPg,14328
14
- planar/test_object_config.py,sha256=izn4s2HmSDWpGtgpOTDmKeUYN2-63WDR1QtVQrT-x00,20135
15
- planar/test_object_registry.py,sha256=R7IwbB2GACm2HUuVZTeVY4V12XB9_JgSSeppPxiCdfs,480
16
- planar/test_sqlalchemy.py,sha256=QTloaipWiFmlLTBGH6YCRkwi1R27gmQZnwprO7lPLfU,7058
17
- planar/test_utils.py,sha256=gKenXotj36SN_bb3bQpYPfD8t06IjnGBQqEgWpujHcA,3086
18
- planar/utils.py,sha256=v7q9AJyWgQWl9VPSN_0qxw3rBvYe-_Pb_KcwqSsjOFU,3103
19
2
  planar/ai/__init__.py,sha256=ABOKvqQOLlVJkptcvXcuLjVZZWEsK8h-1RyFGK7kib8,231
20
3
  planar/ai/agent.py,sha256=flgHU00LRT-UcP0TjMqDigi2jwWq6UoMpmCZSOTyyB0,12428
21
- planar/ai/agent_base.py,sha256=iOOiUwbTiqckrZ-ZtlpkPCjSNE117gMwxrdgegO-P-0,5303
22
- planar/ai/agent_utils.py,sha256=Yug1lt3uT7zLJ0X9uUBpKEomxucKaZiEUBIcf-RZILo,4052
23
- planar/ai/models.py,sha256=aH61vkHJEhmupvGJHS87Nv7bpCpcfBJDO-N8k3k2ixc,4292
24
- planar/ai/pydantic_ai.py,sha256=lYWtnIclOLRiEpBJi5r6Ey8gDBVlQIHTFa3iEzUNqWY,23525
4
+ planar/ai/agent_base.py,sha256=rdK5ExCpkPf5sdVy-Wo5MKAx2O_GULFCwA24s0XO6Ek,5462
5
+ planar/ai/agent_utils.py,sha256=MYNerdAm2TPVbDSKAmBCUlGmR56NAc8seZmDAFOWvUA,4199
6
+ planar/ai/models.py,sha256=bZd4MoBBJMqzXJqsmsbMdZtOaRrNeX438CHAqOvmpfw,4598
7
+ planar/ai/pydantic_ai.py,sha256=FpD0pE7wWNYwmEUZ90D7_J8gbAoqKmWtrLr2fhAd7rg,23503
25
8
  planar/ai/test_agent_serialization.py,sha256=zYLIxhYdFhOZzBrEBoQNyYLyNcNxWwaMTkjt_ARTkZk,8073
26
9
  planar/ai/utils.py,sha256=WVBW0TGaoKytC4bNd_a9lXrBf5QsDRut4GBcA53U2Ww,3116
10
+ planar/app.py,sha256=VEs4jDlcisyOy9I9zEGMG_-Qm8ULKT36CSHjqrYit3o,18491
11
+ planar/cli.py,sha256=2ObR5XkLGbdbnDqp5mrBzDVhSacHCNsVNSHnXkrMQzQ,9593
12
+ planar/config.py,sha256=6J42G9rEVUiOyCAY3EwUTU3PPmWthGTnrHMzST9TMcc,17809
27
13
  planar/data/__init__.py,sha256=LwrWl925w1CN0aW645Wpj_kDp0B8j5SsPzjr9iyrcmI,285
28
14
  planar/data/config.py,sha256=zp6ChI_2MUMbupEVQNY-BxzcdLvejXG33DCp0BujGVU,1209
29
15
  planar/data/dataset.py,sha256=P0NVE2OvJcXMKqVylYczY2lSGR0pSWlPAHM_upKoBWQ,9507
30
16
  planar/data/exceptions.py,sha256=AlhGQ_TReyEzfPSlqoXCjoZ1206Ut7dS4lrukVfGHaw,358
31
17
  planar/data/test_dataset.py,sha256=w2kay2PE-BhkryM3cOKX0nzSr2G0nCJxDuW1QCeFbyk,9985
32
18
  planar/db/__init__.py,sha256=SNgB6unQ1f1E9dB9O-KrsPsYM17KLsgOW1u0ajqs57I,318
19
+ planar/db/alembic/env.py,sha256=UlOrLBfFJ-WbNK0R1cgS2MC3yrqeE4-6rIirB3rGLYo,5344
20
+ planar/db/alembic/script.py.mako,sha256=BgXfi4ClINnJU-PaaWqh1-Sjqu4brkWpbVd-0rEPzLU,665
21
+ planar/db/alembic/versions/3476068c153c_initial_system_tables_migration.py,sha256=1FbzJyfapjegM-Mxd3HMMVA-8zVU6AnrnzEgIoc6eoQ,13204
33
22
  planar/db/alembic.ini,sha256=8G9IWbmF61Vwp1BXbkNOXTTgCEUMBQhOK_e-nnpnSYY,4309
34
23
  planar/db/db.py,sha256=VNpHH1R62tdWVLIV1I2ULmw3B8M6-RsM2ALG3VAVjSg,12790
35
- planar/db/alembic/env.py,sha256=cowI6O_4BMJPqDAukkbg69lzdsE44soi3ysxKGXbS_w,5207
36
- planar/db/alembic/script.py.mako,sha256=Cl7ixgLNtLk1gF5xFNXOnC9YYLX4cpFd8yHtEyY0_dY,699
37
- planar/db/alembic/versions/3476068c153c_initial_system_tables_migration.py,sha256=1FbzJyfapjegM-Mxd3HMMVA-8zVU6AnrnzEgIoc6eoQ,13204
24
+ planar/dependencies.py,sha256=PH78fGk3bQfGnz-AphxH49307Y0XVgl3EY0LdGJnoik,1008
38
25
  planar/files/__init__.py,sha256=fms64l32M8hPK0SINXxNCykr2EpjBTcdgnezVgaCwkc,120
39
26
  planar/files/models.py,sha256=zbZvMkoqoSnn7yOo26SRtEgtlHJbFIvwSht75APHQXk,6145
40
- planar/files/test_files.py,sha256=nclsbLnbijCWQ-Aj8Yvo06hs72PygL1Wps7uk7716sc,8957
41
27
  planar/files/storage/azure_blob.py,sha256=PzCm8ZpyAMH9-N6VscTlLpud-CBLcQX9qC6YjbOSfZg,12316
42
28
  planar/files/storage/base.py,sha256=KO7jyKwjKg5fNSLvhxJWE-lsypv6LXXf7bgA34aflwY,2495
43
29
  planar/files/storage/config.py,sha256=jE9Dn6cG_a4x9pdaZkasOxjyWkK6hmplLrPjEsRXGLM,3473
@@ -47,6 +33,7 @@ planar/files/storage/s3.py,sha256=1861rSw3kplXtugUWD7mdSD_EnPSHME1mGc82V69r5g,82
47
33
  planar/files/storage/test_azure_blob.py,sha256=OFYpns6JyeCCBHCoLz56uUHR6tWWeSZldUant5llczI,14200
48
34
  planar/files/storage/test_local_directory.py,sha256=KtzRfjtZUew1U-KETtD2mb6ywwX6HmjzaaeixOP0Ebg,5751
49
35
  planar/files/storage/test_s3.py,sha256=QG-CH7fiaRmQRwffnqG2mLRrw9LIlR2-xRyHs6Wuspo,10565
36
+ planar/files/test_files.py,sha256=nclsbLnbijCWQ-Aj8Yvo06hs72PygL1Wps7uk7716sc,8957
50
37
  planar/human/__init__.py,sha256=FwpV-FFssKKlvKSjWoI4gJB1XTMaNb1UNCSBxjAtIBw,147
51
38
  planar/human/human.py,sha256=-oRtN_8bCtSV7Sxku7yG4rof7T5pr4j18Cfm3u4Z3PM,14925
52
39
  planar/human/models.py,sha256=Cec1Y9NGGtuAl1ZhqNc9PWIq__BbiWVTh7IYKR4yl3w,2317
@@ -75,6 +62,9 @@ planar/modeling/orm/reexports.py,sha256=sP7nw8e1yp1cahpfsefO84P5n4TNnBRk1jVHuCuH
75
62
  planar/object_config/__init__.py,sha256=8LbI3teg3jCKoUznZ7cal22C1URnHtJMpBokCHZQUWo,352
76
63
  planar/object_config/models.py,sha256=nCyK82JitZwzGwbaBa-dZVxHPnL51ZJ6h87a-KEwHAw,3078
77
64
  planar/object_config/object_config.py,sha256=MgaL-jBFJJtP6ipZ2eJs-KMhj94V_sT3QCSoVTpYP3Y,13609
65
+ planar/object_registry.py,sha256=RMleX5XE8OKDxlnMeyLpJ1Y280duub-tx1smR1zTlDg,3219
66
+ planar/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ planar/registry_items.py,sha256=UhZRIpbSoa_CV9OTl17pJfRLxItYp4Pxd9f5ZbJkGaM,2055
78
68
  planar/routers/__init__.py,sha256=B_ZEbBuosX4ahPfvWZsyMIPmQm0rt6ail4nJA6NLfOk,379
79
69
  planar/routers/agents_router.py,sha256=trb1JPYVlaV7O2uoYvKIrLuTNGP_PmQSLZmXYFWrHkg,8251
80
70
  planar/routers/entity_router.py,sha256=7Y1LDSqI_ovoOGr9DGylGM8BmRxF-WSPQSwITJHc6NE,4841
@@ -97,7 +87,6 @@ planar/rules/decorator.py,sha256=nxT17n9uwfXMOlk5lliw_cRS7Y83gMI6CQdrf_pB5yk,666
97
87
  planar/rules/models.py,sha256=vC38JLeGzmU87L8BX4AyVJLJHmRYjWRmoHQ6S6ZlhPg,10186
98
88
  planar/rules/rule_configuration.py,sha256=B2G6mPnfxA277nF-Gr-B_Uely-ZOhz2jAhiwQMZuY-k,6508
99
89
  planar/rules/runner.py,sha256=KIPrt_ri50qotvDLOY9xly40bNTWRh8GVT2kEJFFtFo,1714
100
- planar/rules/test_rules.py,sha256=6M7CSg1bwn7O7DOoNi38vyVG4UmPQfRFxEO9qGE6rz0,52011
101
90
  planar/rules/test_data/account_dormancy_management.json,sha256=9aMMELZrF5DTBluMKUXJptxwULEcva4GHEyaapIeerY,4776
102
91
  planar/rules/test_data/airline_loyalty_points_calculator.json,sha256=7S1koMe60yR3h2VQys34oLy5ynhsEQ5wadMLPHCRQZA,5689
103
92
  planar/rules/test_data/applicant_risk_assessment.json,sha256=rj-Q13NczdNt00x5wrvGLalw5IfdT1j-_RvpwCZa7Fc,9994
@@ -112,13 +101,14 @@ planar/rules/test_data/order_consolidation_system.json,sha256=kWJuVHAfAqsDW2xVdx
112
101
  planar/rules/test_data/portfolio_risk_monitor.json,sha256=tTvQOJJLhakGxG4CnA9fdBIECstJnp0B8ogFADkdy8s,15168
113
102
  planar/rules/test_data/supply_chain_risk.json,sha256=fO0wV5ZnsZQpOP19Zp2troTMADaX0-KMpCxG_uHG198,7263
114
103
  planar/rules/test_data/warehouse_cross_docking.json,sha256=IPfcgNkY2sds301BeW6CjgFtK_zRyr27gI3UcqCB2Uo,5549
104
+ planar/rules/test_rules.py,sha256=6M7CSg1bwn7O7DOoNi38vyVG4UmPQfRFxEO9qGE6rz0,52011
105
+ planar/scaffold_templates/app/__init__.py.j2,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
+ planar/scaffold_templates/app/db/entities.py.j2,sha256=wg9O3JtRaRMKlDtoWHHodyNRL0s1UILvsr9fCQ_O2-4,279
107
+ planar/scaffold_templates/app/flows/process_invoice.py.j2,sha256=R3EII_O2DHV1kvffW_AApZyaS6rR9eikcpxI08XH9dI,1691
115
108
  planar/scaffold_templates/main.py.j2,sha256=HcV0PVzcyRDaJvNdDQIFiDR1MJlLquNQzNO9oNkCKDQ,322
116
109
  planar/scaffold_templates/planar.dev.yaml.j2,sha256=I5-IqX7GJm6qA91WtUMw43L4hKACqgnER_H2racim4c,998
117
110
  planar/scaffold_templates/planar.prod.yaml.j2,sha256=FahJ2atDtvVH7IUCatGq6h9hmyF8meeiWC8RLfWphOQ,867
118
111
  planar/scaffold_templates/pyproject.toml.j2,sha256=nFfHWLp0sFK8cqjkdwBm6Hi6xsPzTNkaBeSgdTWTS-Q,183
119
- planar/scaffold_templates/app/__init__.py.j2,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
- planar/scaffold_templates/app/db/entities.py.j2,sha256=wg9O3JtRaRMKlDtoWHHodyNRL0s1UILvsr9fCQ_O2-4,279
121
- planar/scaffold_templates/app/flows/process_invoice.py.j2,sha256=R3EII_O2DHV1kvffW_AApZyaS6rR9eikcpxI08XH9dI,1691
122
112
  planar/security/auth_context.py,sha256=i63JkHQ3oXNlTis7GIKRkZJbkcvZhD2jVDuO7blgbSc,5068
123
113
  planar/security/auth_middleware.py,sha256=Grrm0i2bstWZ83ukrNZsHvFbNzffN0rvbbCcb2OxRY0,5746
124
114
  planar/security/authorization.py,sha256=zoej88_VINVNSDXm7u2LJbwOpMqmXBKj_pmCaPTar7M,11721
@@ -129,11 +119,20 @@ planar/security/tests/test_authorization_context.py,sha256=cnsC3V13NBJwzyIwZaM9w
129
119
  planar/security/tests/test_cedar_basics.py,sha256=i1jLPjlJT1n_97onbeDYVpnwAzU2PmHvIPvaJSH1J2U,1026
130
120
  planar/security/tests/test_cedar_policies.py,sha256=-Vn_CQgCUAVg7YhdUd34FsOjNL1EmY_o92r-fzmknP8,4848
131
121
  planar/security/tests/test_jwt_principal_context.py,sha256=nGElTLtXbabkAxd3kXVpSFdH7kvSzHzSkp89g5Vu5Hc,4691
122
+ planar/session.py,sha256=xLS9WPvaiy9nr2Olju1-C-7_sU5VXK8RuNdjuKndul4,1020
132
123
  planar/sse/constants.py,sha256=jE3SooTEWPuuL_Bi6DisJYMR9pKOiHVfboU2h5QTJRg,22
133
124
  planar/sse/example.html,sha256=SgTJbdJ3B1F1DxLC2YWuX2F1XVwKcTjX34CbJCXoCTM,4144
134
125
  planar/sse/hub.py,sha256=5jhfk7zdCivau3TT1MxU2qtvETSskhqEiXzt-t0sRpE,6859
135
126
  planar/sse/model.py,sha256=fU_Fx9LS2ouS6-Dj1TIF-PLGul9YratKWafoWfZR1gc,123
136
127
  planar/sse/proxy.py,sha256=aJGo_-JIeQ0xSmE4HJdulZxIgCVRsBMMXqqSqtPvTvo,9177
128
+ planar/task_local.py,sha256=pyvT0bdzAn15HL2yQUs9YrU5MVXh9njQt9MH51AGljs,1102
129
+ planar/test_app.py,sha256=5dYhOW6lRbAx2X270DfqktkJ5IfuqfowX6bwxM1WQAM,4865
130
+ planar/test_cli.py,sha256=faR6CSuooHHyyB5Yt-p8CIr7mGtKrrU2TLQbc4Oe9bA,13834
131
+ planar/test_config.py,sha256=HcmDu1nwKZZhzHQLGVyP9oxje-_g_XubEsvzRj28QPg,14328
132
+ planar/test_object_config.py,sha256=izn4s2HmSDWpGtgpOTDmKeUYN2-63WDR1QtVQrT-x00,20135
133
+ planar/test_object_registry.py,sha256=R7IwbB2GACm2HUuVZTeVY4V12XB9_JgSSeppPxiCdfs,480
134
+ planar/test_sqlalchemy.py,sha256=QTloaipWiFmlLTBGH6YCRkwi1R27gmQZnwprO7lPLfU,7058
135
+ planar/test_utils.py,sha256=gKenXotj36SN_bb3bQpYPfD8t06IjnGBQqEgWpujHcA,3086
137
136
  planar/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
137
  planar/testing/fixtures.py,sha256=spK7iL1NSv-d8fd139ep-SDogZR2ZycGkD_voSAPPF4,8662
139
138
  planar/testing/memory_storage.py,sha256=apcuFisC3hW9KiU3kO8zwHQ6oK9Lu20NSX5fJ0LSZUY,2824
@@ -141,6 +140,7 @@ planar/testing/planar_test_client.py,sha256=qPkI_ZHZho_38PpdSmEjcRBO1iHcIx3dOwo7
141
140
  planar/testing/synchronizable_tracer.py,sha256=SWeta1CgwGsN5duC0FR8NyXOQ1b1L8nDpvGdjZVJ9Bg,4938
142
141
  planar/testing/test_memory_storage.py,sha256=So32XL0gbLDFMTl-WJN445x9jL6O8Qsqw8IRaiZnsPs,4797
143
142
  planar/testing/workflow_observer.py,sha256=0Q2xsYuZzNGXHZVwvXBqL9KXPsdIXuSZGBJAxHopzJw,2976
143
+ planar/utils.py,sha256=v7q9AJyWgQWl9VPSN_0qxw3rBvYe-_Pb_KcwqSsjOFU,3103
144
144
  planar/workflows/__init__.py,sha256=yFrrtKYUCx4jBPpHdEWDfKQgZXzGyr9voj5lFe9C-_w,826
145
145
  planar/workflows/context.py,sha256=93kPSmYniqjX_lv6--eUUPnzZEKZJi6IPaAjrT-hFRY,1271
146
146
  planar/workflows/contrib.py,sha256=b7WhCancxNCKO63mJCez9MahwMQc5_3zQxr_soJoXCY,6478
@@ -166,7 +166,7 @@ planar/workflows/test_suspend_deserialization.py,sha256=ddw2jToSJ-ebQ0RfT7KWTRMC
166
166
  planar/workflows/test_workflow.py,sha256=KArm9m44IBXKY9j4v_O74MAweFN6jEb7tVRomziaeFU,64011
167
167
  planar/workflows/tracing.py,sha256=E7E_kj2VBQisDqrllviIshbvOmB9QcEeRwMapunqio4,2732
168
168
  planar/workflows/wrappers.py,sha256=KON6RGg1D6yStboNbuMEeTXRpPTEa8S6Elh1tOnMAlM,1149
169
- planar-0.9.1.dist-info/METADATA,sha256=dXMHhfpYKGO-5bwwHaSSJLH2LyKxODUOwj0zTtT6gnY,12303
170
- planar-0.9.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
171
- planar-0.9.1.dist-info/entry_points.txt,sha256=ZtFgrZ0eeoVmhLA51ESipK0nHg2t_prjW0Cm8WhpP54,95
172
- planar-0.9.1.dist-info/RECORD,,
169
+ planar-0.9.2.dist-info/WHEEL,sha256=Jb20R3Ili4n9P1fcwuLup21eQ5r9WXhs4_qy7VTrgPI,79
170
+ planar-0.9.2.dist-info/entry_points.txt,sha256=L3T0w9u2UPKWXv6JbXFWKU1d5xyEAq1xVWbpYS6mLNg,96
171
+ planar-0.9.2.dist-info/METADATA,sha256=nF_zOc5hfhs8BYdm83nO8Fp480qDGfCuTbJpx8Yf5FE,12313
172
+ planar-0.9.2.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: uv 0.8.15
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
2
  generate-llm-prompt = docs.generate_llm_prompt:main
3
3
  planar = planar.cli:main
4
+
planar/_version.py DELETED
@@ -1 +0,0 @@
1
- VERSION = "0.9.1"
@@ -1,4 +0,0 @@
1
- Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
3
- Root-Is-Purelib: true
4
- Tag: py3-none-any