langchain-trigger-server 0.1.16__tar.gz → 0.1.18__tar.gz

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.

Potentially problematic release.


This version of langchain-trigger-server might be problematic. Click here for more details.

Files changed (17) hide show
  1. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/PKG-INFO +1 -1
  2. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/langchain_triggers/app.py +31 -1
  3. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/langchain_triggers/core.py +8 -1
  4. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/langchain_triggers/database/interface.py +2 -1
  5. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/langchain_triggers/database/supabase.py +4 -2
  6. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/pyproject.toml +1 -1
  7. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/.github/workflows/release.yml +0 -0
  8. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/.vscode/settings.json +0 -0
  9. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/README.md +0 -0
  10. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/langchain_triggers/__init__.py +0 -0
  11. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/langchain_triggers/cron_manager.py +0 -0
  12. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/langchain_triggers/database/__init__.py +0 -0
  13. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/langchain_triggers/decorators.py +0 -0
  14. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/langchain_triggers/triggers/__init__.py +0 -0
  15. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/langchain_triggers/triggers/cron_trigger.py +0 -0
  16. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/test_framework.py +0 -0
  17. {langchain_trigger_server-0.1.16 → langchain_trigger_server-0.1.18}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langchain-trigger-server
3
- Version: 0.1.16
3
+ Version: 0.1.18
4
4
  Summary: Generic event-driven triggers framework
5
5
  Project-URL: Homepage, https://github.com/langchain-ai/open-agent-platform
6
6
  Project-URL: Repository, https://github.com/langchain-ai/open-agent-platform
@@ -72,6 +72,9 @@ class TriggerServer:
72
72
  self,
73
73
  auth_handler: Callable,
74
74
  ):
75
+ # Configure uvicorn logging to use consistent formatting
76
+ self._configure_uvicorn_logging()
77
+
75
78
  self.app = FastAPI(
76
79
  title="Triggers Server",
77
80
  description="Event-driven triggers framework",
@@ -123,6 +126,31 @@ class TriggerServer:
123
126
  async def shutdown_event():
124
127
  await self.cron_manager.shutdown()
125
128
 
129
+ def _configure_uvicorn_logging(self) -> None:
130
+ """Configure uvicorn loggers to use consistent formatting for production deployments."""
131
+ formatter = logging.Formatter("%(levelname)s: %(name)s - %(message)s")
132
+
133
+ # Configure uvicorn access logger
134
+ uvicorn_access_logger = logging.getLogger("uvicorn.access")
135
+ uvicorn_access_logger.handlers.clear()
136
+ access_handler = logging.StreamHandler()
137
+ access_handler.setFormatter(formatter)
138
+ uvicorn_access_logger.addHandler(access_handler)
139
+
140
+ # Configure uvicorn error logger
141
+ uvicorn_error_logger = logging.getLogger("uvicorn.error")
142
+ uvicorn_error_logger.handlers.clear()
143
+ error_handler = logging.StreamHandler()
144
+ error_handler.setFormatter(formatter)
145
+ uvicorn_error_logger.addHandler(error_handler)
146
+
147
+ # Configure uvicorn main logger
148
+ uvicorn_logger = logging.getLogger("uvicorn")
149
+ uvicorn_logger.handlers.clear()
150
+ main_handler = logging.StreamHandler()
151
+ main_handler.setFormatter(formatter)
152
+ uvicorn_logger.addHandler(main_handler)
153
+
126
154
  def add_trigger(self, trigger: TriggerTemplate) -> None:
127
155
  """Add a trigger template to the app."""
128
156
  # Check for duplicate IDs
@@ -152,7 +180,8 @@ class TriggerServer:
152
180
  provider=trigger.provider,
153
181
  name=trigger.name,
154
182
  description=trigger.description,
155
- registration_schema=trigger.registration_model.model_json_schema()
183
+ registration_schema=trigger.registration_model.model_json_schema(),
184
+ require_display_name=getattr(trigger.registration_model, 'require_display_name', False)
156
185
  )
157
186
  logger.info(f"✓ Successfully created trigger template: {trigger.name} ({trigger.id})")
158
187
  else:
@@ -188,6 +217,7 @@ class TriggerServer:
188
217
  "path": "/api/triggers/registrations",
189
218
  "method": "POST",
190
219
  "payloadSchema": template.get("registration_schema", {}),
220
+ "requireDisplayName": template.get("require_display_name", False),
191
221
  })
192
222
 
193
223
  return {
@@ -75,4 +75,11 @@ class TriggerRegistrationResult(BaseModel):
75
75
 
76
76
  class TriggerRegistrationModel(BaseModel):
77
77
  """Base class for trigger resource models that define how webhooks are matched to registrations."""
78
- pass
78
+
79
+ require_display_name: bool = False # Class attribute to indicate if display_name is required
80
+ display_name: Optional[str] = Field(default=None, description="Optional display name for this registration")
81
+
82
+ def model_post_init(self, __context) -> None:
83
+ """Validate that display_name is provided when require_display_name is True."""
84
+ if self.require_display_name and not self.display_name:
85
+ raise ValueError(f"{self.__class__.__name__} requires display_name to be set")
@@ -16,7 +16,8 @@ class TriggerDatabaseInterface(ABC):
16
16
  provider: str,
17
17
  name: str,
18
18
  description: str = None,
19
- registration_schema: Dict = None
19
+ registration_schema: Dict = None,
20
+ require_display_name: bool = False
20
21
  ) -> Optional[Dict[str, Any]]:
21
22
  """Create a new trigger template."""
22
23
  pass
@@ -75,7 +75,8 @@ class SupabaseTriggerDatabase(TriggerDatabaseInterface):
75
75
  provider: str,
76
76
  name: str,
77
77
  description: str = None,
78
- registration_schema: Dict = None
78
+ registration_schema: Dict = None,
79
+ require_display_name: bool = False
79
80
  ) -> Optional[Dict[str, Any]]:
80
81
  """Create a new trigger template."""
81
82
  try:
@@ -84,7 +85,8 @@ class SupabaseTriggerDatabase(TriggerDatabaseInterface):
84
85
  "provider": provider,
85
86
  "name": name,
86
87
  "description": description,
87
- "registration_schema": registration_schema or {}
88
+ "registration_schema": registration_schema or {},
89
+ "require_display_name": require_display_name
88
90
  }
89
91
 
90
92
  response = self.client.table("trigger_templates").insert(data).execute()
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "langchain-trigger-server"
7
- version = "0.1.16"
7
+ version = "0.1.18"
8
8
  description = "Generic event-driven triggers framework"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"