# Skuf

Minimal Dependency Injection & Configuration Framework for Python
## 🚀 Features
- ⚡️ Lightweight and zero-dependency
- 🧩 Simple Dependency Injection container
- 🔐 Type-safe `.env`-based configuration loader (like `pydantic.BaseSettings`)
- 🧱 Suitable for scripts, CLI tools, microservices
## 📦 Installation
```bash
pip install skuf
```
## 🧰 Dependency Injection
```python
from skuf import DIContainer, Dependency
# Define a Logger
class Logger:
def log(self, msg: str):
print(msg)
DIContainer.register(Logger) # Register the class
logger = DIContainer.resolve(Logger)
def test_func(logger = Dependency(Logger)):
logger.log("Hello, World! From a function!")
logger.log("Hello, World!")
test_func()
# Output:
# Hello, World!
# Hello, World! From a function!
```
## ⚙️ Environment Settings
```python
# .env
API_KEY=supersecret
TIMEOUT=5
DEBUG=true
RETRIES=3
ADMINS=123|456
# settings.py
from skuf import BaseSettings
from typing import List
class Settings(BaseSettings):
api_key: str
timeout: int
debug: bool
retries: int
admins: List[int]
settings = Settings()
print(settings.api_key) # supersecret
print(settings.timeout) # 5
print(settings.debug) # True
print(settings.admins) # [123, 456]
```
✅ Supports types:
* str, int, float, bool
* List[str], List[int], List[float] (via pipe-separated values like A|B|C)
Raw data
{
"_id": null,
"home_page": null,
"name": "skuf",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "di, dependency-injection, container, python, env",
"author": "MentorSisek",
"author_email": "n3m0_22@mail.ru",
"download_url": "https://files.pythonhosted.org/packages/bc/83/e0ccd05b471b60b640beb5df3f9af7ed57ce63d08060ee54f43297d8ea5d/skuf-0.2.0.tar.gz",
"platform": null,
"description": "# Skuf \n\n\nMinimal Dependency Injection & Configuration Framework for Python\n\n## \ud83d\ude80 Features\n\n- \u26a1\ufe0f Lightweight and zero-dependency\n- \ud83e\udde9 Simple Dependency Injection container\n- \ud83d\udd10 Type-safe `.env`-based configuration loader (like `pydantic.BaseSettings`)\n- \ud83e\uddf1 Suitable for scripts, CLI tools, microservices\n\n## \ud83d\udce6 Installation\n\n```bash\npip install skuf\n```\n\n## \ud83e\uddf0 Dependency Injection\n```python\nfrom skuf import DIContainer, Dependency\n\n# Define a Logger\nclass Logger:\n def log(self, msg: str):\n print(msg)\n\n\nDIContainer.register(Logger) # Register the class\n\nlogger = DIContainer.resolve(Logger)\n\ndef test_func(logger = Dependency(Logger)):\n logger.log(\"Hello, World! From a function!\")\n\nlogger.log(\"Hello, World!\")\ntest_func()\n\n# Output:\n# Hello, World!\n# Hello, World! From a function!\n```\n\n\n## \u2699\ufe0f Environment Settings\n```python\n# .env\nAPI_KEY=supersecret\nTIMEOUT=5\nDEBUG=true\nRETRIES=3\nADMINS=123|456\n\n# settings.py\nfrom skuf import BaseSettings\nfrom typing import List\n\nclass Settings(BaseSettings):\n api_key: str\n timeout: int\n debug: bool\n retries: int\n admins: List[int]\n\nsettings = Settings()\n\nprint(settings.api_key) # supersecret\nprint(settings.timeout) # 5\nprint(settings.debug) # True\nprint(settings.admins) # [123, 456]\n```\n\n\u2705 Supports types:\n* str, int, float, bool\n* List[str], List[int], List[float] (via pipe-separated values like A|B|C)\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Minimal Dependency Injection & Configuration Framework for Python",
"version": "0.2.0",
"project_urls": {
"Homepage": "https://github.com/Tsunami43/skuf.git"
},
"split_keywords": [
"di",
" dependency-injection",
" container",
" python",
" env"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7efecd513ab7c8d78db8751c6c983578d0dee40069d84385debc73bcd0d154e2",
"md5": "72674cb39bf06f0ae2a4832541e78fc4",
"sha256": "b06b84786087b39d16ae64d30258eb3bcfaf2a1a47f9e6b042dfee16a3366201"
},
"downloads": -1,
"filename": "skuf-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "72674cb39bf06f0ae2a4832541e78fc4",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 5927,
"upload_time": "2025-07-04T23:10:00",
"upload_time_iso_8601": "2025-07-04T23:10:00.889234Z",
"url": "https://files.pythonhosted.org/packages/7e/fe/cd513ab7c8d78db8751c6c983578d0dee40069d84385debc73bcd0d154e2/skuf-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bc83e0ccd05b471b60b640beb5df3f9af7ed57ce63d08060ee54f43297d8ea5d",
"md5": "082d1577110c1acb1f76615da8d53358",
"sha256": "050390705c6ccda6d456bba58e56937ec6d3ec4a3335fca00e0bb20875bde3a6"
},
"downloads": -1,
"filename": "skuf-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "082d1577110c1acb1f76615da8d53358",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 4910,
"upload_time": "2025-07-04T23:10:02",
"upload_time_iso_8601": "2025-07-04T23:10:02.384190Z",
"url": "https://files.pythonhosted.org/packages/bc/83/e0ccd05b471b60b640beb5df3f9af7ed57ce63d08060ee54f43297d8ea5d/skuf-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-04 23:10:02",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Tsunami43",
"github_project": "skuf",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "skuf"
}