[project] name = "gam7" dynamic = [ "version", ] authors = [ { name = "Jay Lee", email = "jay0lee@gmail.com" }, { name = "Ross Scroggs", email = "Ross.Scroggs@gmail.com" }, ] dependencies = [ "arrow==1.4.0", "chardet==7.4.3", "cryptography==48.0.1", "distro==1.9.0 ; sys_platform=='linux'", "filelock==3.29.4", "google-api-python-client==2.197.0", "google-auth-httplib2==0.4.0", "google-auth-oauthlib==1.4.0", "google-auth==2.55.1", "httplib2==0.31.2", "lxml==6.1.1", "passlib==1.7.4", "pathvalidate==3.3.1", "pysocks==1.7.1", ] description = "CLI tool to manage Google Workspace" readme = "README.md" requires-python = ">=3.11" classifiers = [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Operating System :: OS Independent", ] license-files = [ "LICEN[CS]E*", ] [project.license] text = "Apache License (2.0)" [project.optional-dependencies] yubikey = [ "yubikey-manager==5.9.1", ] [project.scripts] gam = "gam.__main__:main" [project.urls] Homepage = "https://github.com/GAM-team/GAM" Issues = "https://github.com/GAM-team/GAM/issues" Discussion = "https://groups.google.com/group/google-apps-manager" Chat = "https://git.io/gam-chat" [tool.hatch.version] path = "src/gam/__init__.py" [tool.hatch.build.targets.wheel] packages = [ "src/gam", ] [build-system] requires = [ "hatchling", ] build-backend = "hatchling.build" # Ruff linter configuration — https://docs.astral.sh/ruff/ [tool.ruff] target-version = "py311" src = ["src", "tests"] [tool.ruff.lint] # Focused rules that catch real bugs without overwhelming noise. select = [ "F", # Pyflakes — unused imports, undefined names, etc. "E711", # Comparison to None (use `is` / `is not`) "E713", # Not-in test (use `not in` operator) "UP", # pyupgrade — modernize syntax for Python 3.11+ ] ignore = [ # Pyflakes rules suppressed for GAM's architecture "F402", # Import shadowed by loop variable — GAM reuses `entity` in loops "F403", # Star import — GAM uses `from gam.constants import *` "F405", # Undefined from star import — GAM uses `from gam.constants import *` "F811", # Redefined while unused — GAM reassigns variables in arg-parsing loops "F841", # Local variable assigned but never used — some GAM patterns use this intentionally # pyupgrade rules that would be too noisy right now "UP009", # UTF-8 encoding declaration — harmless, not worth a 17-file churn "UP024", # os.error alias — 37 occurrences, low priority "UP030", # Format literals — would change string formatting style "UP031", # printf-string-formatting — 200+ occurrences, too noisy right now "UP032", # f-string — auto-conversion can break complex expressions ] fixable = [] # Don't auto-fix — we want to review changes manually [tool.ruff.lint.per-file-ignores] # __init__.py re-exports cmd/ functions for dispatch tables "src/gam/__init__.py" = ["F401", "E402", "F821"] # cmd/ files use `from gam.constants import *` "src/gam/cmd/**" = ["F821"] # util/ modules have ordered imports and re-exports "src/gam/util/**" = ["E402", "F821"] # gamlib modules "src/gam/gamlib/**" = ["F821"] # Test files can be more relaxed "tests/**" = ["F401", "F811"]