langchain-trigger-server 0.2.1__tar.gz → 0.3.13__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.
Files changed (40) hide show
  1. langchain_trigger_server-0.3.13/.github/actions/uv_setup/action.yml +21 -0
  2. langchain_trigger_server-0.3.13/.github/workflows/_lint.yml +44 -0
  3. langchain_trigger_server-0.3.13/.github/workflows/_test.yml +45 -0
  4. langchain_trigger_server-0.3.13/.github/workflows/ci.yml +61 -0
  5. langchain_trigger_server-0.3.13/.github/workflows/release.yml +124 -0
  6. langchain_trigger_server-0.3.13/.gitignore +134 -0
  7. langchain_trigger_server-0.3.13/Makefile +48 -0
  8. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.3.13}/PKG-INFO +4 -6
  9. langchain_trigger_server-0.3.13/README.md +3 -0
  10. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.3.13}/langchain_triggers/__init__.py +9 -6
  11. langchain_trigger_server-0.3.13/langchain_triggers/app.py +637 -0
  12. langchain_trigger_server-0.3.13/langchain_triggers/auth/__init__.py +3 -0
  13. langchain_trigger_server-0.3.13/langchain_triggers/core.py +59 -0
  14. langchain_trigger_server-0.3.13/langchain_triggers/cron_manager.py +329 -0
  15. langchain_trigger_server-0.3.13/langchain_triggers/database/__init__.py +5 -0
  16. langchain_trigger_server-0.3.13/langchain_triggers/database/interface.py +100 -0
  17. langchain_trigger_server-0.3.13/langchain_triggers/decorators.py +135 -0
  18. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.3.13}/langchain_triggers/triggers/__init__.py +1 -1
  19. langchain_trigger_server-0.3.13/langchain_triggers/triggers/cron_trigger.py +161 -0
  20. langchain_trigger_server-0.3.13/langchain_triggers/util.py +85 -0
  21. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.3.13}/pyproject.toml +19 -8
  22. langchain_trigger_server-0.3.13/tests/__init__.py +1 -0
  23. langchain_trigger_server-0.3.13/tests/unit/__init__.py +1 -0
  24. langchain_trigger_server-0.3.13/tests/unit/test_cron_manager_polling_filter.py +130 -0
  25. langchain_trigger_server-0.3.13/tests/unit/test_cron_manager_schedule_validation.py +48 -0
  26. langchain_trigger_server-0.3.13/tests/unit/test_trigger_server_api.py +488 -0
  27. {langchain_trigger_server-0.2.1 → langchain_trigger_server-0.3.13}/uv.lock +588 -929
  28. langchain_trigger_server-0.3.13/version_comparison.txt +1 -0
  29. langchain_trigger_server-0.2.1/.github/workflows/release.yml +0 -38
  30. langchain_trigger_server-0.2.1/.vscode/settings.json +0 -3
  31. langchain_trigger_server-0.2.1/README.md +0 -3
  32. langchain_trigger_server-0.2.1/langchain_triggers/app.py +0 -565
  33. langchain_trigger_server-0.2.1/langchain_triggers/core.py +0 -85
  34. langchain_trigger_server-0.2.1/langchain_triggers/cron_manager.py +0 -262
  35. langchain_trigger_server-0.2.1/langchain_triggers/database/__init__.py +0 -16
  36. langchain_trigger_server-0.2.1/langchain_triggers/database/interface.py +0 -153
  37. langchain_trigger_server-0.2.1/langchain_triggers/database/supabase.py +0 -415
  38. langchain_trigger_server-0.2.1/langchain_triggers/decorators.py +0 -71
  39. langchain_trigger_server-0.2.1/langchain_triggers/triggers/cron_trigger.py +0 -98
  40. langchain_trigger_server-0.2.1/test_framework.py +0 -155
@@ -0,0 +1,21 @@
1
+ # TODO: https://docs.astral.sh/uv/guides/integration/github/#caching
2
+
3
+ name: uv-install
4
+ description: Set up Python and uv
5
+
6
+ inputs:
7
+ python-version:
8
+ description: Python version, supporting MAJOR.MINOR only
9
+ required: true
10
+
11
+ env:
12
+ UV_VERSION: "0.5.25"
13
+
14
+ runs:
15
+ using: composite
16
+ steps:
17
+ - name: Install uv and set the python version
18
+ uses: astral-sh/setup-uv@v5
19
+ with:
20
+ version: ${{ env.UV_VERSION }}
21
+ python-version: ${{ inputs.python-version }}
@@ -0,0 +1,44 @@
1
+ name: lint
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ working-directory:
7
+ required: true
8
+ type: string
9
+ description: "From which folder this pipeline executes"
10
+ python-version:
11
+ required: true
12
+ type: string
13
+ description: "Python version to use"
14
+
15
+ env:
16
+ WORKDIR: ${{ inputs.working-directory == '' && '.' || inputs.working-directory }}
17
+
18
+ # This env var allows us to get inline annotations when ruff has complaints.
19
+ RUFF_OUTPUT_FORMAT: github
20
+
21
+ UV_FROZEN: "true"
22
+
23
+ jobs:
24
+ build:
25
+ name: "make lint #${{ inputs.python-version }}"
26
+ runs-on: ubuntu-latest
27
+ timeout-minutes: 20
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+
31
+ - name: Set up Python ${{ inputs.python-version }} + uv
32
+ uses: "./.github/actions/uv_setup"
33
+ with:
34
+ python-version: ${{ inputs.python-version }}
35
+
36
+ - name: Install dependencies
37
+ working-directory: ${{ inputs.working-directory }}
38
+ run: |
39
+ uv sync --group dev
40
+
41
+ - name: Analysing the code with our lint
42
+ working-directory: ${{ inputs.working-directory }}
43
+ run: |
44
+ make lint
@@ -0,0 +1,45 @@
1
+ name: test
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ on:
7
+ workflow_call:
8
+ inputs:
9
+ working-directory:
10
+ required: true
11
+ type: string
12
+ description: "From which folder this pipeline executes"
13
+ python-version:
14
+ required: true
15
+ type: string
16
+ description: "Python version to use"
17
+
18
+ env:
19
+ UV_FROZEN: "true"
20
+ UV_NO_SYNC: "true"
21
+
22
+ jobs:
23
+ build:
24
+ defaults:
25
+ run:
26
+ working-directory: ${{ inputs.working-directory }}
27
+ runs-on: ubuntu-latest
28
+ timeout-minutes: 20
29
+ name: "make test #${{ inputs.python-version }}"
30
+ steps:
31
+ - uses: actions/checkout@v4
32
+
33
+ - name: Set up Python ${{ inputs.python-version }} + uv
34
+ uses: "./.github/actions/uv_setup"
35
+ id: setup-python
36
+ with:
37
+ python-version: ${{ inputs.python-version }}
38
+ - name: Install dependencies
39
+ shell: bash
40
+ run: uv sync --group dev
41
+
42
+ - name: Run core tests
43
+ shell: bash
44
+ run: |
45
+ make test
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: Run CI Tests
3
+
4
+ on:
5
+ push:
6
+ branches: [ main ]
7
+ pull_request:
8
+ workflow_dispatch: # Allows to trigger the workflow manually in GitHub UI
9
+
10
+ # If another push to the same PR or branch happens while this workflow is still running,
11
+ # cancel the earlier run in favor of the next run.
12
+ #
13
+ # There's no point in testing an outdated version of the code. GitHub only allows
14
+ # a limited number of job runners to be active at the same time, so it's better to cancel
15
+ # pointless jobs early so that more useful jobs can run sooner.
16
+ concurrency:
17
+ group: ${{ github.workflow }}-${{ github.ref }}
18
+ cancel-in-progress: true
19
+
20
+ jobs:
21
+ lint:
22
+ strategy:
23
+ matrix:
24
+ # Only lint on the min and max supported Python versions.
25
+ # It's extremely unlikely that there's a lint issue on any version in between
26
+ # that doesn't show up on the min or max versions.
27
+ #
28
+ # GitHub rate-limits how many jobs can be running at any one time.
29
+ # Starting new jobs is also relatively slow,
30
+ # so linting on fewer versions makes CI faster.
31
+ python-version:
32
+ - "3.12"
33
+ uses:
34
+ ./.github/workflows/_lint.yml
35
+ with:
36
+ working-directory: "."
37
+ python-version: ${{ matrix.python-version }}
38
+ secrets: inherit
39
+ test:
40
+ strategy:
41
+ matrix:
42
+ # Test on min and max supported Python versions
43
+ python-version:
44
+ - "3.11"
45
+ - "3.12"
46
+ uses:
47
+ ./.github/workflows/_test.yml
48
+ with:
49
+ working-directory: "."
50
+ python-version: ${{ matrix.python-version }}
51
+ secrets: inherit
52
+
53
+ # Summary job that depends on all other jobs
54
+ # This provides a single check that branch protection can depend on
55
+ ci-success:
56
+ name: "CI Success"
57
+ runs-on: ubuntu-latest
58
+ needs: [lint, test]
59
+ steps:
60
+ - name: Mark CI as successful
61
+ run: echo "All CI checks passed!"
@@ -0,0 +1,124 @@
1
+ name: Build and publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ release:
7
+ types: [published]
8
+ workflow_dispatch:
9
+
10
+ env:
11
+ PYTHON_VERSION: "3.11"
12
+ UV_FROZEN: "true"
13
+ UV_NO_SYNC: "true"
14
+
15
+ jobs:
16
+ # First, run lint and test to ensure quality
17
+ lint-and-test:
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ matrix:
21
+ python-version: ["3.11", "3.12"]
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+
25
+ - name: Set up Python + uv
26
+ uses: "./.github/actions/uv_setup"
27
+ with:
28
+ python-version: ${{ matrix.python-version }}
29
+
30
+ - name: Install dependencies
31
+ run: uv sync --group dev
32
+
33
+ - name: Run lint
34
+ run: uv run ruff check .
35
+
36
+ - name: Run tests
37
+ run: uv run pytest tests/
38
+
39
+ # Check version and publish package
40
+ build-and-publish:
41
+ needs: lint-and-test
42
+ name: Build and publish Python distribution to PyPI
43
+ runs-on: ubuntu-latest
44
+ environment:
45
+ name: pypi
46
+ url: https://pypi.org/p/langchain-trigger-server
47
+ permissions:
48
+ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
49
+ contents: read # Required for private repository access
50
+
51
+ steps:
52
+ - uses: actions/checkout@v4
53
+ with:
54
+ token: ${{ secrets.GITHUB_TOKEN }}
55
+
56
+ - name: Set up Python + uv
57
+ uses: "./.github/actions/uv_setup"
58
+ with:
59
+ python-version: ${{ env.PYTHON_VERSION }}
60
+
61
+ - name: Get current version from pyproject.toml
62
+ id: get-version
63
+ run: |
64
+ VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
65
+ echo "current_version=$VERSION" >> $GITHUB_OUTPUT
66
+ echo "Current version: $VERSION"
67
+
68
+ - name: Get latest PyPI version
69
+ id: get-pypi-version
70
+ run: |
71
+ PYPI_VERSION=$(python -c "
72
+ import json, urllib.request, urllib.error
73
+ try:
74
+ with urllib.request.urlopen('https://pypi.org/pypi/langchain-trigger-server/json') as response:
75
+ data = json.loads(response.read())
76
+ print(data['info']['version'])
77
+ except urllib.error.HTTPError as e:
78
+ if e.code == 404:
79
+ print('0.0.0') # Package doesn't exist yet
80
+ else:
81
+ raise
82
+ ")
83
+ echo "pypi_version=$PYPI_VERSION" >> $GITHUB_OUTPUT
84
+ echo "PyPI version: $PYPI_VERSION"
85
+
86
+ - name: Compare versions
87
+ id: compare-versions
88
+ run: |
89
+ python -c "
90
+ from distutils.version import LooseVersion
91
+ current = LooseVersion('${{ steps.get-version.outputs.current_version }}')
92
+ pypi = LooseVersion('${{ steps.get-pypi-version.outputs.pypi_version }}')
93
+ should_publish = current > pypi
94
+ print(f'Current: {current}, PyPI: {pypi}, Should publish: {should_publish}')
95
+ " > version_comparison.txt
96
+ cat version_comparison.txt
97
+
98
+ SHOULD_PUBLISH=$(python -c "
99
+ from distutils.version import LooseVersion
100
+ current = LooseVersion('${{ steps.get-version.outputs.current_version }}')
101
+ pypi = LooseVersion('${{ steps.get-pypi-version.outputs.pypi_version }}')
102
+ print('true' if current > pypi else 'false')
103
+ ")
104
+ echo "should_publish=$SHOULD_PUBLISH" >> $GITHUB_OUTPUT
105
+
106
+ - name: Build package
107
+ if: steps.compare-versions.outputs.should_publish == 'true'
108
+ run: uv build
109
+
110
+ - name: Publish package distributions to PyPI
111
+ if: steps.compare-versions.outputs.should_publish == 'true'
112
+ uses: pypa/gh-action-pypi-publish@release/v1
113
+ with:
114
+ verbose: true
115
+ print-hash: true
116
+ attestations: false
117
+
118
+ - name: Create summary
119
+ run: |
120
+ if [ "${{ steps.compare-versions.outputs.should_publish }}" = "true" ]; then
121
+ echo "✅ Published langchain-trigger-server v${{ steps.get-version.outputs.current_version }} to PyPI" >> $GITHUB_STEP_SUMMARY
122
+ else
123
+ echo "⏭️ Skipped langchain-trigger-server: v${{ steps.get-version.outputs.current_version }} not newer than PyPI v${{ steps.get-pypi-version.outputs.pypi_version }}" >> $GITHUB_STEP_SUMMARY
124
+ fi
@@ -0,0 +1,134 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ *.manifest
32
+ *.spec
33
+
34
+ # Installer logs
35
+ pip-log.txt
36
+ pip-delete-this-directory.txt
37
+
38
+ # Unit test / coverage reports
39
+ htmlcov/
40
+ .tox/
41
+ .nox/
42
+ .coverage
43
+ .coverage.*
44
+ .cache
45
+ nosetests.xml
46
+ coverage.xml
47
+ *.cover
48
+ *.py,cover
49
+ .hypothesis/
50
+ .pytest_cache/
51
+
52
+ # Translations
53
+ *.mo
54
+ *.pot
55
+
56
+ # Django stuff:
57
+ *.log
58
+ local_settings.py
59
+ db.sqlite3
60
+ db.sqlite3-journal
61
+
62
+ # Flask stuff:
63
+ instance/
64
+ .webassets-cache
65
+
66
+ # Scrapy stuff:
67
+ .scrapy
68
+
69
+ # Sphinx documentation
70
+ docs/_build/
71
+
72
+ # PyBuilder
73
+ target/
74
+
75
+ # Jupyter Notebook
76
+ .ipynb_checkpoints
77
+
78
+ # IPython
79
+ profile_default/
80
+ ipython_config.py
81
+
82
+ # pyenv
83
+ .python-version
84
+
85
+ # pipenv
86
+ Pipfile.lock
87
+
88
+ # PEP 582
89
+ __pypackages__/
90
+
91
+ # Celery stuff
92
+ celerybeat-schedule
93
+ celerybeat.pid
94
+
95
+ # SageMath parsed files
96
+ *.sage.py
97
+
98
+ # Environments
99
+ .env
100
+ .venv
101
+ env/
102
+ venv/
103
+ ENV/
104
+ env.bak/
105
+ venv.bak/
106
+
107
+ # Spyder project settings
108
+ .spyderproject
109
+ .spyproject
110
+
111
+ # Rope project settings
112
+ .ropeproject
113
+
114
+ # mkdocs documentation
115
+ /site
116
+
117
+ # mypy
118
+ .mypy_cache/
119
+ .dmypy.json
120
+ dmypy.json
121
+
122
+ # Pyre type checker
123
+ .pyre/
124
+
125
+ # IDEs
126
+ .vscode/
127
+ .idea/
128
+ *.swp
129
+ *.swo
130
+ *~
131
+
132
+ # OS
133
+ .DS_Store
134
+ Thumbs.db
@@ -0,0 +1,48 @@
1
+ .PHONY: all lint format lint-fix test help
2
+
3
+ # Default target executed when no arguments are given to make
4
+ all: help
5
+
6
+ ######################
7
+ # TESTING AND COVERAGE
8
+ ######################
9
+
10
+ # Define a variable for the test file path.
11
+ TEST ?= tests/unit
12
+
13
+ test:
14
+ uv run pytest $(TEST) -v
15
+
16
+ ######################
17
+ # LINTING AND FORMATTING
18
+ ######################
19
+
20
+ # Define a variable for Python and notebook files.
21
+ lint format: PYTHON_FILES=.
22
+ lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=. --name-only --diff-filter=d main | grep -E '\.py$$|\.ipynb$$')
23
+
24
+ lint lint_diff:
25
+ [ "$(PYTHON_FILES)" = "" ] || uv run ruff format $(PYTHON_FILES) --check
26
+ [ "$(PYTHON_FILES)" = "" ] || uv run ruff check $(PYTHON_FILES)
27
+
28
+ format format_diff:
29
+ [ "$(PYTHON_FILES)" = "" ] || uv run ruff format $(PYTHON_FILES)
30
+ [ "$(PYTHON_FILES)" = "" ] || uv run ruff check --fix $(PYTHON_FILES)
31
+
32
+ lint-fix:
33
+ uv run ruff format $(PYTHON_FILES)
34
+ uv run ruff check --fix $(PYTHON_FILES)
35
+
36
+ ######################
37
+ # HELP
38
+ ######################
39
+
40
+ help:
41
+ @echo '===================='
42
+ @echo '-- LINTING --'
43
+ @echo 'format - run code formatters'
44
+ @echo 'lint - run linters'
45
+ @echo 'lint-fix - run linters and fix issues'
46
+ @echo '-- TESTS --'
47
+ @echo 'test - run tests'
48
+ @echo 'test TEST=<test_file> - run specific test file'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langchain-trigger-server
3
- Version: 0.2.1
3
+ Version: 0.3.13
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
@@ -11,19 +11,17 @@ Classifier: Development Status :: 3 - Alpha
11
11
  Classifier: Intended Audience :: Developers
12
12
  Classifier: License :: OSI Approved :: MIT License
13
13
  Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.9
15
- Classifier: Programming Language :: Python :: 3.10
16
14
  Classifier: Programming Language :: Python :: 3.11
17
15
  Classifier: Programming Language :: Python :: 3.12
18
- Requires-Python: >=3.9
16
+ Requires-Python: >=3.11
19
17
  Requires-Dist: apscheduler>=3.10.0
20
18
  Requires-Dist: croniter>=1.4.0
21
19
  Requires-Dist: cryptography>=3.0.0
22
20
  Requires-Dist: fastapi>=0.100.0
23
21
  Requires-Dist: httpx>=0.24.0
22
+ Requires-Dist: langchain-auth>=0.0.1
24
23
  Requires-Dist: langgraph-sdk>=0.2.6
25
24
  Requires-Dist: pydantic>=2.0.0
26
- Requires-Dist: python-jose[cryptography]>=3.3.0
27
25
  Requires-Dist: python-multipart>=0.0.6
28
26
  Requires-Dist: supabase>=2.0.0
29
27
  Requires-Dist: uvicorn[standard]>=0.20.0
@@ -37,4 +35,4 @@ Description-Content-Type: text/markdown
37
35
 
38
36
  # LangChain Trigger Server
39
37
 
40
- TODO
38
+ Framework for developing triggers for use in the LangSmith Agent Builder
@@ -0,0 +1,3 @@
1
+ # LangChain Trigger Server
2
+
3
+ Framework for developing triggers for use in the LangSmith Agent Builder
@@ -1,18 +1,21 @@
1
1
  """LangChain Triggers Framework - Event-driven triggers for AI agents."""
2
2
 
3
- from .core import UserAuthInfo, TriggerRegistrationModel, TriggerHandlerResult, TriggerRegistrationResult
4
- from .decorators import TriggerTemplate
5
3
  from .app import TriggerServer
4
+ from .core import (
5
+ TriggerRegistrationModel,
6
+ TriggerRegistrationResult,
7
+ )
8
+ from .decorators import TriggerTemplate
6
9
  from .triggers.cron_trigger import cron_trigger
10
+ from .util import get_langgraph_url
7
11
 
8
- __version__ = "0.1.0"
12
+ __version__ = "0.3.11"
9
13
 
10
14
  __all__ = [
11
- "UserAuthInfo",
12
15
  "TriggerRegistrationModel",
13
- "TriggerHandlerResult",
14
16
  "TriggerRegistrationResult",
15
17
  "TriggerTemplate",
16
18
  "TriggerServer",
19
+ "get_langgraph_url",
17
20
  "cron_trigger",
18
- ]
21
+ ]