mirror of
https://github.com/beshu-tech/deltaglider.git
synced 2026-04-20 07:21:27 +02:00
Initial commit: DeltaGlider - 99.9% compression for S3 storage
DeltaGlider reduces storage costs by storing only binary deltas between similar files. Achieves 99.9% compression for versioned artifacts. Key features: - Intelligent file type detection (delta for archives, direct for others) - Drop-in S3 replacement with automatic compression - SHA256 integrity verification on every operation - Clean hexagonal architecture - Full test coverage - Production tested with 200K+ files Case study: ReadOnlyREST reduced 4TB to 5GB (99.9% compression)
This commit is contained in:
151
pyproject.toml
Normal file
151
pyproject.toml
Normal file
@@ -0,0 +1,151 @@
|
||||
[project]
|
||||
name = "deltaglider"
|
||||
version = "0.1.0"
|
||||
description = "Store 4TB in 5GB: S3-compatible storage with 99.9% compression for versioned files"
|
||||
authors = [
|
||||
{name = "Beshu Tech", email = "info@beshu.tech"},
|
||||
]
|
||||
maintainers = [
|
||||
{name = "Beshu Tech Team", email = "support@beshu.tech"},
|
||||
]
|
||||
readme = "README.md"
|
||||
license = {text = "MIT"}
|
||||
requires-python = ">=3.11"
|
||||
keywords = [
|
||||
"s3",
|
||||
"compression",
|
||||
"delta",
|
||||
"storage",
|
||||
"backup",
|
||||
"deduplication",
|
||||
"xdelta3",
|
||||
"binary-diff",
|
||||
"artifact-storage",
|
||||
"version-control",
|
||||
"minio",
|
||||
"aws",
|
||||
"cost-optimization",
|
||||
"devops",
|
||||
]
|
||||
classifiers = [
|
||||
"Development Status :: 4 - Beta",
|
||||
"Intended Audience :: Developers",
|
||||
"Intended Audience :: System Administrators",
|
||||
"License :: OSI Approved :: MIT License",
|
||||
"Operating System :: OS Independent",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
"Topic :: System :: Archiving :: Backup",
|
||||
"Topic :: System :: Archiving :: Compression",
|
||||
"Topic :: System :: Filesystems",
|
||||
"Topic :: Internet",
|
||||
"Environment :: Console",
|
||||
]
|
||||
|
||||
dependencies = [
|
||||
"boto3>=1.35.0",
|
||||
"click>=8.1.0",
|
||||
"python-dateutil>=2.9.0",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://github.com/beshu-tech/deltaglider"
|
||||
Documentation = "https://github.com/beshu-tech/deltaglider#readme"
|
||||
Repository = "https://github.com/beshu-tech/deltaglider"
|
||||
Issues = "https://github.com/beshu-tech/deltaglider/issues"
|
||||
Changelog = "https://github.com/beshu-tech/deltaglider/releases"
|
||||
"Case Study" = "https://github.com/beshu-tech/deltaglider/blob/main/docs/case-study-readonlyrest.md"
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = [
|
||||
"pytest>=8.0.0",
|
||||
"pytest-mock>=3.14.0",
|
||||
"pytest-asyncio>=0.24.0",
|
||||
"moto[s3]>=5.0.0",
|
||||
"ruff>=0.8.0",
|
||||
"mypy>=1.13.0",
|
||||
"boto3-stubs[s3]>=1.35.0",
|
||||
"types-python-dateutil>=2.9.0",
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
deltaglider = "deltaglider.app.cli.main:main"
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["src/deltaglider"]
|
||||
|
||||
[tool.hatch.build.targets.sdist]
|
||||
include = [
|
||||
"/src",
|
||||
"/tests",
|
||||
"/docs",
|
||||
"README.md",
|
||||
"LICENSE",
|
||||
"CONTRIBUTING.md",
|
||||
"pyproject.toml",
|
||||
]
|
||||
exclude = [
|
||||
"*.pyc",
|
||||
"__pycache__",
|
||||
".git",
|
||||
".pytest_cache",
|
||||
"*.delta",
|
||||
"reference.bin",
|
||||
"1.66.1/",
|
||||
]
|
||||
|
||||
[tool.uv]
|
||||
dev-dependencies = [
|
||||
"pytest>=8.0.0",
|
||||
"pytest-mock>=3.14.0",
|
||||
"pytest-asyncio>=0.24.0",
|
||||
"moto[s3]>=5.0.0",
|
||||
"ruff>=0.8.0",
|
||||
"mypy>=1.13.0",
|
||||
"boto3-stubs[s3]>=1.35.0",
|
||||
"types-python-dateutil>=2.9.0",
|
||||
]
|
||||
|
||||
[tool.ruff]
|
||||
target-version = "py311"
|
||||
line-length = 100
|
||||
select = [
|
||||
"E", # pycodestyle errors
|
||||
"W", # pycodestyle warnings
|
||||
"F", # pyflakes
|
||||
"I", # isort
|
||||
"B", # flake8-bugbear
|
||||
"UP", # pyupgrade
|
||||
]
|
||||
ignore = ["E501"] # line too long
|
||||
|
||||
[tool.ruff.format]
|
||||
quote-style = "double"
|
||||
indent-style = "space"
|
||||
|
||||
[tool.mypy]
|
||||
python_version = "3.11"
|
||||
warn_return_any = true
|
||||
warn_unused_configs = true
|
||||
disallow_untyped_defs = true
|
||||
disallow_any_unimported = false
|
||||
no_implicit_optional = true
|
||||
check_untyped_defs = true
|
||||
namespace_packages = true
|
||||
explicit_package_bases = true
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
minversion = "8.0"
|
||||
testpaths = ["tests"]
|
||||
markers = [
|
||||
"e2e: end-to-end tests requiring LocalStack",
|
||||
"integration: integration tests",
|
||||
"unit: unit tests",
|
||||
]
|
||||
Reference in New Issue
Block a user