Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
4dc3665
Creating unimplemented API shell for Google Tasks impl.
faithvillarr Oct 29, 2025
2f83b6e
feat: adding implementation for GTasks DI
faithvillarr Oct 29, 2025
76aefd0
feat: adding implementation for GTasks DI
faithvillarr Oct 29, 2025
fd3460e
feat: update insert tasklist param to str for simplier api calls
gsiri-code Oct 29, 2025
8ba8869
chore: add template task_client_service dir and integrate with root p…
gsiri-code Oct 29, 2025
b998c77
feat: implement base fastapi service with get and create tasklists
gsiri-code Oct 29, 2025
6b5ba85
feat: impl delete tasklist and change param in gtask impl to str
gsiri-code Oct 29, 2025
badc9b2
feat: add list tasks
gsiri-code Oct 30, 2025
02ea8e7
feat: fix list tasks sync with gtask impl and create task to dict func
gsiri-code Oct 30, 2025
31c0157
feat: organize task and tasklist methods in fastapi file
gsiri-code Oct 30, 2025
09e99d8
Add delete_task and get_task methods
Rachelcrm Oct 30, 2025
e68a036
refactor: change insert task param from task to dict[str,str|bool], a…
gsiri-code Oct 30, 2025
85944b7
feat: impl insert task endpoint
gsiri-code Oct 30, 2025
ee3ba7b
refactor: organize endpoints into routers task and tasklist
gsiri-code Oct 30, 2025
af7576e
refactor: remove due field valdation from gtask impl insert_task
gsiri-code Oct 30, 2025
552073f
Fix ruff check errors
Rachelcrm Oct 30, 2025
f13106b
Fix mypy errors
Rachelcrm Oct 31, 2025
a2be13d
feat: adding implementation for GTasks DI
faithvillarr Oct 29, 2025
4952a84
refactor: change insert task param from task to dict[str,str|bool], a…
gsiri-code Oct 30, 2025
4721bbf
Fix ruff check errors
Rachelcrm Oct 30, 2025
239b7a4
Fix mypy errors
Rachelcrm Oct 31, 2025
ef0e3b9
refactor: ruff fix
gsiri-code Oct 31, 2025
674767e
Add conftest.py
Rachelcrm Oct 31, 2025
e03d0cd
add faiths changes
gsiri-code Oct 31, 2025
ce878b3
fix: resolve import errors task-client-service
gsiri-code Oct 31, 2025
b0d6a9c
fix: remove extra class
gsiri-code Nov 3, 2025
2572cde
refactor: conftest imports adjustment
gsiri-code Nov 3, 2025
5db52b5
fix: remove init files for service tests to fix build error
gsiri-code Nov 3, 2025
2e71782
config: add lint ignore for init file in testing dir to ensure build …
gsiri-code Nov 3, 2025
2d69023
feat: add task endpoint tests
gsiri-code Nov 4, 2025
2761c3f
Add unit test for delete/insert/list tasklists
Rachelcrm Nov 4, 2025
a1cdd0c
Modified tasklists test files for a higher coverage
Rachelcrm Nov 5, 2025
0fc54b2
feat: add openapi generated code for task-client-service
gsiri-code Nov 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ build/
.vscode/
.idea/

# macOS system files
.DS_Store

# MkDocs build artifacts
site/

Expand Down
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
def main() -> None:
"""Initialize the client and demonstrate all mail client methods."""
# Now, get_client() returns a GmailClient instance...
client = mail_client_api.get_client(interactive=False)
client = mail_client_api.get_client(interactive=True)

# Test 1: Get messages (existing functionality)
messages = list(client.get_messages(max_results=3))
Expand Down
25 changes: 23 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ members = [
"src/mail_client_service",
"src/mail_client_adapter",
"src/mail_client_service_client",
"src/task_client_api",
"src/gtask_client_impl",
"src/task_client_service",
]

[tool.ruff]
Expand All @@ -43,13 +46,29 @@ ignore = [
"D213", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible. Ignoring `multi-line-summary-second-line`.
"S101", # Use of `assert` detected --> Asserts are good in our opinion. Tests use asserts profusely.
]
per-file-ignores = { "**/test_*.py" = ["TRY300", "BLE001", "ANN401", "SLF001", "E501", "S105", "ARG001", "ARG002", "S106", "INP001", "PLC0415"] }

[tool.ruff.lint.per-file-ignores]
"**/test_*.py" = [
"TRY300", "BLE001", "ANN401", "SLF001", "E501",
"S105", "ARG001", "ARG002", "S106", "INP001",
"PLC0415", "ERA001"
]
"**/tests/conftest.py" = ["INP001"] # Adding __init__.py causes pytest namespace conflicts with --import-mode=importlib

[tool.mypy]
strict = true
explicit_package_bases = true # Required for src layout

mypy_path = ["src/mail_client_api/src", "src/gmail_client_impl/src", "src/mail_client_service/src", "src/mail_client_adapter/src", "src/mail_client_service_client/src"]
mypy_path = [
"src/mail_client_api/src",
"src/gmail_client_impl/src",
"src/mail_client_service/src",
"src/mail_client_adapter/src",
"src/mail_client_service_client/src",
"src/task_client_api/src",
"src/gtask_client_impl/src",
"src/task_client_service/src",
]

ignore_missing_imports = false
warn_unused_ignores = false
Expand All @@ -64,6 +83,8 @@ module = [
"mail_client_service.*",
"mail_client_adapter.*",
"mail_client_service_client.*",
"task_client_api.*",
"gtask_client_impl.*",

]
ignore_missing_imports = true
Expand Down
Empty file added src/gtask_client_impl/README.md
Empty file.
58 changes: 58 additions & 0 deletions src/gtask_client_impl/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
[project]
name = "gtask-client-impl"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"dotenv>=0.9.9",
"google-api-python-client>=2.177.0",
"google-auth>=2.40.3",
"google-auth-oauthlib>=1.2.2",
"task-client-api",
]

[project.optional-dependencies]
test = [
"pytest>=7.0.0",
"pytest-mock>=3.10.0",
]

[tool.pytest.ini_options]
pythonpath = [".", "src"]
testpaths = ["tests", "src"]
addopts = ["--cov", "--cov-report=term-missing"]

[tool.coverage.run]
source = ["src"]
omit = ["*/tests/*", ]

[tool.coverage.report]
fail_under = 85 # Justification: A high threshold ensures most code is tested.
exclude_lines = [
"pragma: no cover",
"raise NotImplementedError",
"if TYPE_CHECKING:",
]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["src/gtask_client_impl"]

[tool.hatch.build.targets.wheel.force-include]
"src/gtask_client_impl/py.typed" = "gtask_client_impl/py.typed"

[tool.ruff]
line-length = 100 # Default formatting width
target-version = "py311" # Adjust based on actual Python version
extend = "../../pyproject.toml"

[tool.ruff.lint]
ignore = []

[tool.uv.sources]
task-client-api = { workspace = true }

44 changes: 44 additions & 0 deletions src/gtask_client_impl/src/gtask_client_impl/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
"""Public exports for the Google Tasks client implementation package."""

from gtask_client_impl.gtask_impl import (
GTaskClient,
get_client_impl,
)
from gtask_client_impl.gtask_impl import (
register as _register_client,
)
from gtask_client_impl.task_impl import (
GTask,
get_task_impl,
)
from gtask_client_impl.task_impl import (
register as _register_task,
)
from gtask_client_impl.tasklist_impl import (
GTaskList,
get_tasklist_impl,
)
from gtask_client_impl.tasklist_impl import (
register as _register_tasklist,
)

__all__ = [
"GTask",
"GTaskClient",
"GTaskList",
"get_client_impl",
"get_task_impl",
"get_tasklist_impl",
"register",
]


def register() -> None:
"""Register the Google Tasks client, task, and tasklist implementations."""
_register_client()
_register_task()
_register_tasklist()


# Dependency Injection happens at import time
register()
Loading