langchain-trigger-server 0.2.1__tar.gz → 0.2.3__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.2.1 → langchain_trigger_server-0.2.3}/PKG-INFO +1 -1
  2. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/langchain_triggers/app.py +4 -14
  3. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/langchain_triggers/core.py +1 -8
  4. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/langchain_triggers/cron_manager.py +9 -4
  5. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/langchain_triggers/database/interface.py +1 -2
  6. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/langchain_triggers/database/supabase.py +4 -6
  7. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/pyproject.toml +1 -1
  8. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/uv.lock +828 -826
  9. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/.github/workflows/release.yml +0 -0
  10. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/.vscode/settings.json +0 -0
  11. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/README.md +0 -0
  12. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/langchain_triggers/__init__.py +0 -0
  13. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/langchain_triggers/database/__init__.py +0 -0
  14. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/langchain_triggers/decorators.py +0 -0
  15. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/langchain_triggers/triggers/__init__.py +0 -0
  16. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/langchain_triggers/triggers/cron_trigger.py +0 -0
  17. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.2.3}/test_framework.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langchain-trigger-server
3
- Version: 0.2.1
3
+ Version: 0.2.3
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
@@ -181,7 +181,6 @@ class TriggerServer:
181
181
  name=trigger.name,
182
182
  description=trigger.description,
183
183
  registration_schema=trigger.registration_model.model_json_schema(),
184
- require_display_name=getattr(trigger.registration_model, 'require_display_name', False)
185
184
  )
186
185
  logger.info(f"✓ Successfully created trigger template: {trigger.name} ({trigger.id})")
187
186
  else:
@@ -217,7 +216,6 @@ class TriggerServer:
217
216
  "path": "/api/triggers/registrations",
218
217
  "method": "POST",
219
218
  "payloadSchema": template.get("registration_schema", {}),
220
- "requireDisplayName": template.get("require_display_name", False),
221
219
  })
222
220
 
223
221
  return {
@@ -263,7 +261,7 @@ class TriggerServer:
263
261
  try:
264
262
  payload = await request.json()
265
263
  logger.info(f"Registration payload received: {payload}")
266
-
264
+
267
265
  user_id = current_user["identity"]
268
266
  trigger_id = payload.get("type")
269
267
  if not trigger_id:
@@ -272,7 +270,7 @@ class TriggerServer:
272
270
  trigger = next((t for t in self.triggers if t.id == trigger_id), None)
273
271
  if not trigger:
274
272
  raise HTTPException(status_code=400, detail=f"Unknown trigger type: {trigger_id}")
275
-
273
+
276
274
  # Parse payload into registration model first
277
275
  try:
278
276
  registration_instance = trigger.registration_model(**payload)
@@ -289,15 +287,12 @@ class TriggerServer:
289
287
  template_id=trigger.id,
290
288
  resource_data=resource_dict
291
289
  )
292
-
290
+
293
291
  if existing_registration:
294
292
  raise HTTPException(
295
293
  status_code=400,
296
294
  detail=f"You already have a registration with this configuration for trigger type '{trigger.id}'. Registration ID: {existing_registration.get('id')}"
297
295
  )
298
-
299
-
300
- # Call the trigger's registration handler with parsed registration model
301
296
  result = await trigger.registration_handler(user_id, self.langchain_auth_client, registration_instance)
302
297
 
303
298
  # Check if handler requested to skip registration (e.g., for OAuth or URL verification)
@@ -311,12 +306,7 @@ class TriggerServer:
311
306
  media_type="application/json"
312
307
  )
313
308
 
314
- resource_dict = registration_instance.model_dump(exclude={'require_display_name'})
315
-
316
- # Remove display_name if it's null/None and not required
317
- if (not getattr(trigger.registration_model, 'require_display_name', False) and
318
- resource_dict.get('display_name') is None):
319
- resource_dict.pop('display_name', None)
309
+ resource_dict = registration_instance.model_dump()
320
310
 
321
311
  registration = await self.database.create_trigger_registration(
322
312
  user_id=user_id,
@@ -75,11 +75,4 @@ 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
-
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")
78
+ pass
@@ -170,7 +170,10 @@ class CronTriggerManager:
170
170
  """Execute a scheduled cron job with full monitoring and error handling."""
171
171
  registration_id = registration["id"]
172
172
  cron_pattern = registration["resource"]["crontab"]
173
-
173
+
174
+ # Log immediately when callback is invoked to verify APScheduler is calling us
175
+ logger.info(f"Cron callback invoked for job {registration_id}")
176
+
174
177
  execution = CronJobExecution(
175
178
  registration_id=registration_id,
176
179
  cron_pattern=cron_pattern,
@@ -178,8 +181,8 @@ class CronTriggerManager:
178
181
  actual_start_time=datetime.utcnow(),
179
182
  status="running"
180
183
  )
181
-
182
- logger.info(f"🕐 Executing cron job {registration_id} with pattern '{cron_pattern}'")
184
+
185
+ logger.info(f"Executing cron job {registration_id} with pattern '{cron_pattern}'")
183
186
 
184
187
  try:
185
188
  agents_invoked = await self._execute_cron_job(registration)
@@ -202,8 +205,10 @@ class CronTriggerManager:
202
205
  user_id = registration["user_id"]
203
206
 
204
207
  # Get agent links
208
+ logger.info(f"Querying database for agents linked to cron job {registration_id}")
205
209
  agent_links = await self.trigger_server.database.get_agents_for_trigger(registration_id)
206
-
210
+ logger.info(f"Found {len(agent_links) if agent_links else 0} agent links for cron job {registration_id}")
211
+
207
212
  if not agent_links:
208
213
  logger.warning(f"No agents linked to cron job {registration_id}")
209
214
  return 0
@@ -16,8 +16,7 @@ class TriggerDatabaseInterface(ABC):
16
16
  provider: str,
17
17
  name: str,
18
18
  description: str = None,
19
- registration_schema: Dict = None,
20
- require_display_name: bool = False
19
+ registration_schema: Dict = None
21
20
  ) -> Optional[Dict[str, Any]]:
22
21
  """Create a new trigger template."""
23
22
  pass
@@ -75,8 +75,7 @@ class SupabaseTriggerDatabase(TriggerDatabaseInterface):
75
75
  provider: str,
76
76
  name: str,
77
77
  description: str = None,
78
- registration_schema: Dict = None,
79
- require_display_name: bool = False
78
+ registration_schema: Dict = None
80
79
  ) -> Optional[Dict[str, Any]]:
81
80
  """Create a new trigger template."""
82
81
  try:
@@ -85,8 +84,7 @@ class SupabaseTriggerDatabase(TriggerDatabaseInterface):
85
84
  "provider": provider,
86
85
  "name": name,
87
86
  "description": description,
88
- "registration_schema": registration_schema or {},
89
- "require_display_name": require_display_name
87
+ "registration_schema": registration_schema or {}
90
88
  }
91
89
 
92
90
  response = self.client.table("trigger_templates").insert(data).execute()
@@ -261,7 +259,7 @@ class SupabaseTriggerDatabase(TriggerDatabaseInterface):
261
259
  # Build query to match against trigger_registrations with template_id filter
262
260
  query = self.client.table("trigger_registrations").select(
263
261
  "*, trigger_templates(id, name, description)"
264
- ).eq("trigger_templates.id", template_id)
262
+ ).eq("template_id", template_id)
265
263
 
266
264
  # Add resource field matches
267
265
  for field, value in resource_data.items():
@@ -288,7 +286,7 @@ class SupabaseTriggerDatabase(TriggerDatabaseInterface):
288
286
  # Build query to match against trigger_registrations with template_id and user_id filter
289
287
  query = self.client.table("trigger_registrations").select(
290
288
  "*, trigger_templates(id, name, description)"
291
- ).eq("trigger_templates.id", template_id).eq("user_id", user_id)
289
+ ).eq("template_id", template_id).eq("user_id", user_id)
292
290
 
293
291
  # Add resource field matches
294
292
  for field, value in resource_data.items():
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "langchain-trigger-server"
7
- version = "0.2.1"
7
+ version = "0.2.3"
8
8
  description = "Generic event-driven triggers framework"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"