[build-system] requires = ["setuptools>=69", "setuptools-scm>=8"] build-backend = "setuptools.build_meta" [project] name = "hate_crack" dynamic = ["version"] description = "Menu driven Python wrapper for hashcat" readme = "README.md" requires-python = ">=3.13" dependencies = [ "requests>=2.31.0", "beautifulsoup4>=4.12.0", "openpyxl>=3.0.0", "packaging>=21.0", ] [project.scripts] hate_crack = "hate_crack.__main__:main" [project.optional-dependencies] dev = [ "ty==0.0.17", "ruff==0.15.1", "pytest==9.0.2", "pytest-cov==7.0.0", ] [tool.setuptools.packages.find] include = ["hate_crack*"] [tool.setuptools.package-data] hate_crack = [ "config.json.example", ] [tool.setuptools_scm] version_file = "hate_crack/_version.py" version_scheme = "no-guess-dev" [tool.ruff] exclude = [ "build", "dist", "PACK", "hashcat-utils", "omen", "princeprocessor", "wordlists", "rules", ] [tool.ty.src] exclude = [ "build/", "dist/", "PACK/", "wordlists/", "HashcatRosetta/", "hashcat-utils/", "omen/", "princeprocessor/", ] [tool.ty.rules] # Module-level globals in main.py are assigned at runtime unresolved-reference = "warn" # Optional deps (hashcat_rosetta) not always installed unresolved-import = "warn" # BeautifulSoup union types and module-level globals unresolved-attribute = "warn" invalid-argument-type = "warn" [tool.pytest.ini_options] testpaths = [ "tests", ]