Skip to content

Commit 7ad7b9a

Browse files
committed
feat: added session encryption
1 parent 50a909a commit 7ad7b9a

File tree

4 files changed

+666
-157
lines changed

4 files changed

+666
-157
lines changed

pyproject.toml

Lines changed: 143 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -1,142 +1,143 @@
1-
[project]
2-
name = "openai-agents"
3-
version = "0.2.11"
4-
description = "OpenAI Agents SDK"
5-
readme = "README.md"
6-
requires-python = ">=3.9"
7-
license = "MIT"
8-
authors = [{ name = "OpenAI", email = "[email protected]" }]
9-
dependencies = [
10-
"openai>=1.104.1,<2",
11-
"pydantic>=2.10, <3",
12-
"griffe>=1.5.6, <2",
13-
"typing-extensions>=4.12.2, <5",
14-
"requests>=2.0, <3",
15-
"types-requests>=2.0, <3",
16-
"mcp>=1.11.0, <2; python_version >= '3.10'",
17-
]
18-
classifiers = [
19-
"Typing :: Typed",
20-
"Intended Audience :: Developers",
21-
"Programming Language :: Python :: 3",
22-
"Programming Language :: Python :: 3.9",
23-
"Programming Language :: Python :: 3.10",
24-
"Programming Language :: Python :: 3.11",
25-
"Programming Language :: Python :: 3.12",
26-
"Programming Language :: Python :: 3.13",
27-
"Operating System :: OS Independent",
28-
"Topic :: Software Development :: Libraries :: Python Modules",
29-
"License :: OSI Approved :: MIT License",
30-
]
31-
32-
[project.urls]
33-
Homepage = "https://openai.github.io/openai-agents-python/"
34-
Repository = "https://github.com/openai/openai-agents-python"
35-
36-
[project.optional-dependencies]
37-
voice = ["numpy>=2.2.0, <3; python_version>='3.10'", "websockets>=15.0, <16"]
38-
viz = ["graphviz>=0.17"]
39-
litellm = ["litellm>=1.67.4.post1, <2"]
40-
realtime = ["websockets>=15.0, <16"]
41-
sqlalchemy = ["SQLAlchemy>=2.0", "asyncpg>=0.29.0"]
42-
43-
[dependency-groups]
44-
dev = [
45-
"mypy",
46-
"ruff==0.9.2",
47-
"pytest",
48-
"pytest-asyncio",
49-
"pytest-mock>=3.14.0",
50-
"rich>=13.1.0, <14",
51-
"mkdocs>=1.6.0",
52-
"mkdocs-material>=9.6.0",
53-
"mkdocstrings[python]>=0.28.0",
54-
"mkdocs-static-i18n",
55-
"coverage>=7.6.12",
56-
"playwright==1.50.0",
57-
"inline-snapshot>=0.20.7",
58-
"pynput",
59-
"types-pynput",
60-
"sounddevice",
61-
"textual",
62-
"websockets",
63-
"graphviz",
64-
"mkdocs-static-i18n>=1.3.0",
65-
"eval-type-backport>=0.2.2",
66-
"fastapi >= 0.110.0, <1",
67-
"aiosqlite>=0.21.0",
68-
]
69-
70-
[tool.uv.workspace]
71-
members = ["agents"]
72-
73-
[tool.uv.sources]
74-
agents = { workspace = true }
75-
76-
[build-system]
77-
requires = ["hatchling"]
78-
build-backend = "hatchling.build"
79-
80-
[tool.hatch.build.targets.wheel]
81-
packages = ["src/agents"]
82-
83-
84-
[tool.ruff]
85-
line-length = 100
86-
target-version = "py39"
87-
88-
[tool.ruff.lint]
89-
select = [
90-
"E", # pycodestyle errors
91-
"W", # pycodestyle warnings
92-
"F", # pyflakes
93-
"I", # isort
94-
"B", # flake8-bugbear
95-
"C4", # flake8-comprehensions
96-
"UP", # pyupgrade
97-
]
98-
isort = { combine-as-imports = true, known-first-party = ["agents"] }
99-
100-
[tool.ruff.lint.pydocstyle]
101-
convention = "google"
102-
103-
[tool.ruff.lint.per-file-ignores]
104-
"examples/**/*.py" = ["E501"]
105-
106-
[tool.mypy]
107-
strict = true
108-
disallow_incomplete_defs = false
109-
disallow_untyped_defs = false
110-
disallow_untyped_calls = false
111-
112-
[[tool.mypy.overrides]]
113-
module = "sounddevice.*"
114-
ignore_missing_imports = true
115-
116-
[tool.coverage.run]
117-
source = ["tests", "src/agents"]
118-
119-
[tool.coverage.report]
120-
show_missing = true
121-
sort = "-Cover"
122-
exclude_also = [
123-
# This is only executed while typechecking
124-
"if TYPE_CHECKING:",
125-
"@abc.abstractmethod",
126-
"raise NotImplementedError",
127-
"logger.debug",
128-
]
129-
130-
[tool.pytest.ini_options]
131-
asyncio_mode = "auto"
132-
asyncio_default_fixture_loop_scope = "session"
133-
filterwarnings = [
134-
# This is a warning that is expected to happen: we have an async filter that raises an exception
135-
"ignore:coroutine 'test_async_input_filter_fails.<locals>.invalid_input_filter' was never awaited:RuntimeWarning",
136-
]
137-
markers = [
138-
"allow_call_model_methods: mark test as allowing calls to real model implementations",
139-
]
140-
141-
[tool.inline-snapshot]
142-
format-command = "ruff format --stdin-filename {filename}"
1+
[project]
2+
name = "openai-agents"
3+
version = "0.2.11"
4+
description = "OpenAI Agents SDK"
5+
readme = "README.md"
6+
requires-python = ">=3.9"
7+
license = "MIT"
8+
authors = [{ name = "OpenAI", email = "[email protected]" }]
9+
dependencies = [
10+
"openai>=1.104.1,<2",
11+
"pydantic>=2.10, <3",
12+
"griffe>=1.5.6, <2",
13+
"typing-extensions>=4.12.2, <5",
14+
"requests>=2.0, <3",
15+
"types-requests>=2.0, <3",
16+
"mcp>=1.11.0, <2; python_version >= '3.10'",
17+
]
18+
classifiers = [
19+
"Typing :: Typed",
20+
"Intended Audience :: Developers",
21+
"Programming Language :: Python :: 3",
22+
"Programming Language :: Python :: 3.9",
23+
"Programming Language :: Python :: 3.10",
24+
"Programming Language :: Python :: 3.11",
25+
"Programming Language :: Python :: 3.12",
26+
"Programming Language :: Python :: 3.13",
27+
"Operating System :: OS Independent",
28+
"Topic :: Software Development :: Libraries :: Python Modules",
29+
"License :: OSI Approved :: MIT License",
30+
]
31+
32+
[project.urls]
33+
Homepage = "https://openai.github.io/openai-agents-python/"
34+
Repository = "https://github.com/openai/openai-agents-python"
35+
36+
[project.optional-dependencies]
37+
voice = ["numpy>=2.2.0, <3; python_version>='3.10'", "websockets>=15.0, <16"]
38+
viz = ["graphviz>=0.17"]
39+
litellm = ["litellm>=1.67.4.post1, <2"]
40+
realtime = ["websockets>=15.0, <16"]
41+
sqlalchemy = ["SQLAlchemy>=2.0", "asyncpg>=0.29.0"]
42+
encrypt = ["cryptography>=45.0, <46"]
43+
44+
[dependency-groups]
45+
dev = [
46+
"mypy",
47+
"ruff==0.9.2",
48+
"pytest",
49+
"pytest-asyncio",
50+
"pytest-mock>=3.14.0",
51+
"rich>=13.1.0, <14",
52+
"mkdocs>=1.6.0",
53+
"mkdocs-material>=9.6.0",
54+
"mkdocstrings[python]>=0.28.0",
55+
"mkdocs-static-i18n",
56+
"coverage>=7.6.12",
57+
"playwright==1.50.0",
58+
"inline-snapshot>=0.20.7",
59+
"pynput",
60+
"types-pynput",
61+
"sounddevice",
62+
"textual",
63+
"websockets",
64+
"graphviz",
65+
"mkdocs-static-i18n>=1.3.0",
66+
"eval-type-backport>=0.2.2",
67+
"fastapi >= 0.110.0, <1",
68+
"aiosqlite>=0.21.0",
69+
]
70+
71+
[tool.uv.workspace]
72+
members = ["agents"]
73+
74+
[tool.uv.sources]
75+
agents = { workspace = true }
76+
77+
[build-system]
78+
requires = ["hatchling"]
79+
build-backend = "hatchling.build"
80+
81+
[tool.hatch.build.targets.wheel]
82+
packages = ["src/agents"]
83+
84+
85+
[tool.ruff]
86+
line-length = 100
87+
target-version = "py39"
88+
89+
[tool.ruff.lint]
90+
select = [
91+
"E", # pycodestyle errors
92+
"W", # pycodestyle warnings
93+
"F", # pyflakes
94+
"I", # isort
95+
"B", # flake8-bugbear
96+
"C4", # flake8-comprehensions
97+
"UP", # pyupgrade
98+
]
99+
isort = { combine-as-imports = true, known-first-party = ["agents"] }
100+
101+
[tool.ruff.lint.pydocstyle]
102+
convention = "google"
103+
104+
[tool.ruff.lint.per-file-ignores]
105+
"examples/**/*.py" = ["E501"]
106+
107+
[tool.mypy]
108+
strict = true
109+
disallow_incomplete_defs = false
110+
disallow_untyped_defs = false
111+
disallow_untyped_calls = false
112+
113+
[[tool.mypy.overrides]]
114+
module = "sounddevice.*"
115+
ignore_missing_imports = true
116+
117+
[tool.coverage.run]
118+
source = ["tests", "src/agents"]
119+
120+
[tool.coverage.report]
121+
show_missing = true
122+
sort = "-Cover"
123+
exclude_also = [
124+
# This is only executed while typechecking
125+
"if TYPE_CHECKING:",
126+
"@abc.abstractmethod",
127+
"raise NotImplementedError",
128+
"logger.debug",
129+
]
130+
131+
[tool.pytest.ini_options]
132+
asyncio_mode = "auto"
133+
asyncio_default_fixture_loop_scope = "session"
134+
filterwarnings = [
135+
# This is a warning that is expected to happen: we have an async filter that raises an exception
136+
"ignore:coroutine 'test_async_input_filter_fails.<locals>.invalid_input_filter' was never awaited:RuntimeWarning",
137+
]
138+
markers = [
139+
"allow_call_model_methods: mark test as allowing calls to real model implementations",
140+
]
141+
142+
[tool.inline-snapshot]
143+
format-command = "ruff format --stdin-filename {filename}"
Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
2-
"""Session memory backends living in the extensions namespace.
3-
4-
This package contains optional, production-grade session implementations that
5-
introduce extra third-party dependencies (database drivers, ORMs, etc.). They
6-
conform to the :class:`agents.memory.session.Session` protocol so they can be
7-
used as a drop-in replacement for :class:`agents.memory.session.SQLiteSession`.
8-
"""
9-
from __future__ import annotations
10-
11-
from .sqlalchemy_session import SQLAlchemySession # noqa: F401
12-
13-
__all__: list[str] = [
14-
"SQLAlchemySession",
15-
]
1+
"""Session memory backends living in the extensions namespace.
2+
3+
This package contains optional, production-grade session implementations that
4+
introduce extra third-party dependencies (database drivers, ORMs, etc.). They
5+
conform to the :class:`agents.memory.session.Session` protocol so they can be
6+
used as a drop-in replacement for :class:`agents.memory.session.SQLiteSession`.
7+
"""
8+
9+
from __future__ import annotations
10+
11+
from .encrypt_session import EncryptedSession # noqa: F401
12+
from .sqlalchemy_session import SQLAlchemySession # noqa: F401
13+
14+
__all__: list[str] = [
15+
"EncryptedSession",
16+
"SQLAlchemySession",
17+
]

0 commit comments

Comments
 (0)