Skip to content
This repository was archived by the owner on Apr 17, 2026. It is now read-only.

Commit 463562a

Browse files
committed
docs: expand README with detailed setup and usage guide
1 parent c36dae9 commit 463562a

1 file changed

Lines changed: 168 additions & 105 deletions

File tree

docs/README.md

Lines changed: 168 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -1,170 +1,233 @@
1-
Welcome to DBase documentation. For the latest documentation, visit our [GitHub repository](https://github.com/Danex-Exe/dbase).
1+
# DBase
22

3-
## Quick Links
3+
Лёгкая JSON-based библиотека для хранения данных с интерфейсом, похожим на словарь и атрибуты объекта.
44

5-
- [Full Documentation](https://github.com/Danex-Exe/dbase#readme)
6-
- [API Reference](#api-reference)
7-
- [Examples](#examples)
8-
- [Changelog](https://github.com/Danex-Exe/dbase/blob/main/docs/CHANGELOG.md)
5+
- Простая запись: `db.user = "alice"` или `db["user"] = "alice"`
6+
- Автосохранение в файл JSON
7+
- Контекстный менеджер (`with DataBase(...) as db:`)
8+
- Временные БД (`is_temp=True`)
9+
- Опциональное простое шифрование при сохранении (`encryption_key`)
910

10-
## Installation
11+
---
12+
13+
## Содержание
14+
15+
1. [Установка](#установка)
16+
2. [Быстрый старт](#быстрый-старт)
17+
3. [Как работает хранение](#как-работает-хранение)
18+
4. [Шифрование данных](#шифрование-данных)
19+
5. [Основной API](#основной-api)
20+
6. [Практические примеры](#практические-примеры)
21+
7. [Запуск тестов и CI/CD](#запуск-тестов-и-cicd)
22+
8. [Docker и docker-compose](#docker-и-docker-compose)
23+
9. [Ограничения и рекомендации](#ограничения-и-рекомендации)
24+
25+
---
26+
27+
## Установка
28+
29+
### 1) Установка из PyPI
1130

1231
```bash
1332
pip install dbase
1433
```
1534

16-
## Basic Example
35+
Проверка, что модуль установлен:
1736

18-
```python
19-
from dbase import DataBase
37+
```bash
38+
python -c "from dbase import DataBase; print(DataBase)"
39+
```
2040

21-
# Create or open a database
22-
db = DataBase(file_path="data.json")
41+
### 2) Установка для разработки (из исходников)
42+
43+
```bash
44+
git clone https://github.com/Danex-Exe/dbase.git
45+
cd dbase
46+
python -m pip install -e .[dev]
47+
```
2348

24-
# Store data
25-
db["name"] = "Alice"
26-
db.score = 95
49+
Что это даёт:
50+
- `-e` — editable mode (изменения в коде сразу доступны без переустановки)
51+
- `.[dev]` — устанавливает dev-зависимости (pytest, black, flake8, mypy)
2752

28-
# Retrieve data
29-
print(db["name"]) # Alice
30-
print(db.score) # 95
53+
### 3) Установка в виртуальном окружении (рекомендуется)
3154

32-
# Use as context manager
33-
with DataBase(file_path="session.json") as session:
34-
session.user = "admin"
35-
session.timestamp = "2024-01-01"
55+
```bash
56+
python -m venv .venv
57+
source .venv/bin/activate # Linux/macOS
58+
# .venv\Scripts\activate # Windows PowerShell
59+
pip install --upgrade pip
60+
pip install dbase
3661
```
3762

38-
## API Reference
63+
---
3964

40-
### DataBase Class
65+
## Быстрый старт
4166

4267
```python
43-
class DataBase(file_path=None, show_logs=True, is_temp=False)
68+
from dbase import DataBase
69+
70+
# Создать или открыть БД
71+
with DataBase(file_path="data.json", show_logs=False) as db:
72+
db.user = "alice"
73+
db["score"] = 95
74+
75+
# Повторно открыть и прочитать
76+
with DataBase(file_path="data.json", show_logs=False) as db:
77+
print(db.user) # alice
78+
print(db["score"]) # 95
4479
```
4580

46-
**Parameters:**
47-
- `file_path` (str, optional): Path to JSON file for persistent storage
48-
- `show_logs` (bool): Enable/disable logging (default: True)
49-
- `is_temp` (bool): Create temporary in-memory database (default: False)
81+
---
5082

51-
**Methods:**
52-
- `get(key, default=None)`: Get value with fallback
53-
- `pop(key, default=None)`: Remove and return value
54-
- `update(**kwargs)`: Update multiple values
55-
- `clear()`: Remove all data
56-
- `items()`: Return key-value pairs
57-
- `keys()`: Return all keys
58-
- `values()`: Return all values
83+
## Как работает хранение
5984

60-
## Examples
85+
- Библиотека хранит публичные ключи/атрибуты в JSON-файле.
86+
- Защищённые служебные поля (внутренние) не сериализуются.
87+
- При каждом изменении значения данные сохраняются в файл.
88+
- Сохранение выполняется атомарно (через временный файл и замену), чтобы уменьшить риск повреждения данных.
6189

62-
### Example 1: Basic CRUD Operations
90+
---
6391

64-
```python
65-
db = DataBase("users.json")
92+
## Шифрование данных
6693

67-
# Create
68-
db["user1"] = {"name": "Alice", "age": 30}
94+
Можно включить простое шифрование при сохранении:
6995

70-
# Read
71-
user = db["user1"]
96+
```python
97+
from dbase import DataBase
7298

73-
# Update
74-
db["user1"]["age"] = 31
99+
db = DataBase(
100+
file_path="secure.json",
101+
encryption_key="my-secret-key",
102+
show_logs=False,
103+
)
75104

76-
# Delete
77-
del db["user1"]
105+
db.api_token = "token-123"
106+
db.close()
78107
```
79108

80-
### Example 2: Configuration Storage
109+
Что важно:
110+
- Шифрование включается **только** если указан `encryption_key`.
111+
- Для чтения зашифрованного файла нужно открыть БД с тем же ключом.
112+
- Текущая схема — lightweight (XOR + Base64): подходит для базовой обфускации, но не для хранения высокочувствительных данных.
81113

82-
```python
83-
config = DataBase("config.json")
114+
---
115+
116+
## Основной API
84117

85-
# Set configuration
86-
config.database.host = "localhost"
87-
config.database.port = 5432
88-
config.app.debug = True
118+
### Инициализация
89119

90-
# Get configuration
91-
host = config.database.host
120+
```python
121+
DataBase(
122+
file_path: str | None = None,
123+
show_logs: bool = True,
124+
is_temp: bool = False,
125+
encryption_key: str | None = None,
126+
auto_cleanup_temp: bool = True,
127+
)
92128
```
93129

94-
### Example 3: Temporary Data
130+
### Полезные методы
95131

96-
```python
97-
# Temporary in-memory database
98-
cache = DataBase(is_temp=True)
132+
- `get(key, default=None)` — безопасное чтение с fallback
133+
- `update(**kwargs)` — массовое обновление
134+
- `pop(key, default=None)` — извлечение и удаление
135+
- `clear()` — очистка всех пользовательских ключей
136+
- `items()`, `keys()`, `values()` — как у словаря
137+
- `close()` — явное закрытие файла (и cleanup temp-файла для `is_temp=True`)
99138

100-
# Store temporary data
101-
cache.session_token = "abc123"
102-
cache.timestamp = "2024-01-01T12:00:00"
139+
### Поддерживаемые операции
103140

104-
# Data is lost when program ends
105-
```
141+
- `db.key = value`
142+
- `db["key"] = value`
143+
- `value = db.key`
144+
- `value = db["key"]`
145+
- `"key" in db`
146+
- `len(db)`
147+
- `del db["key"]`
106148

107-
## Best Practices
149+
---
108150

109-
1. **Use context managers** for automatic cleanup:
110-
```python
111-
with DataBase("data.json") as db:
112-
# Work with database
113-
```
151+
## Практические примеры
114152

115-
2. **Handle missing keys** safely:
116-
```python
117-
value = db.get("missing_key", default="default_value")
118-
```
153+
### 1) Настройки приложения
119154

120-
3. **Use appropriate storage**:
121-
- Persistent files for long-term storage
122-
- Temporary databases for caching
155+
```python
156+
from dbase import DataBase
123157

124-
4. **Enable logging** during development:
125-
```python
126-
db = DataBase("data.json", show_logs=True)
127-
```
158+
cfg = DataBase("config.json", show_logs=False)
159+
cfg.app_name = "my-service"
160+
cfg.debug = True
161+
cfg.port = 8080
162+
cfg.close()
163+
```
128164

165+
### 2) Временное хранилище
166+
167+
```python
168+
from dbase import DataBase
169+
170+
with DataBase(is_temp=True, show_logs=False) as cache:
171+
cache.session_id = "abc123"
172+
cache.ttl = 300
173+
```
129174

130-
## Encryption (simple)
175+
### 3) Работа как со словарём
131176

132177
```python
133178
from dbase import DataBase
134179

135-
secure_db = DataBase(file_path="secure.json", encryption_key="my-secret-key")
136-
secure_db.api_token = "token-123"
180+
db = DataBase("users.json", show_logs=False)
181+
db["u1"] = {"name": "Alice", "age": 30}
182+
print(db.get("u1"))
183+
print(db.keys())
137184
```
138185

139-
When `encryption_key` is provided, payload is stored in encrypted form using a lightweight XOR+Base64 scheme (sufficient for basic obfuscation, not for high-security storage).
186+
---
140187

141-
## Docker
188+
## Запуск тестов и CI/CD
189+
190+
Локально:
142191

143192
```bash
144-
docker compose up --build
193+
python -m pip install -e .[dev]
194+
pytest -q
145195
```
146196

147-
This runs the test suite inside a container.
197+
В репозитории настроены GitHub Actions:
198+
- **CI**: запускает тесты для Python 3.8 / 3.11 / 3.12
199+
- **CD**: собирает wheel/sdist по тегам `v*`
200+
201+
---
148202

149-
## Troubleshooting
203+
## Docker и docker-compose
150204

151-
### Common Issues
205+
### Docker build + test
206+
207+
```bash
208+
docker build -t dbase:local .
209+
docker run --rm dbase:local
210+
```
211+
212+
### docker-compose
213+
214+
```bash
215+
docker compose up --build
216+
```
152217

153-
1. **File not found errors**: Ensure the directory exists before creating database
154-
2. **Permission errors**: Check file permissions
155-
3. **JSON decode errors**: Verify file contains valid JSON
156-
4. **Type errors**: Ensure you're using string keys
218+
Команда запускает тесты проекта в контейнере.
157219

158-
### Getting Help
220+
---
159221

160-
- Check the [GitHub Issues](https://github.com/Danex-Exe/dbase/issues)
161-
- Review the source code
162-
- Submit a bug report with reproduction steps
222+
## Ограничения и рекомендации
163223

164-
## License
224+
1. Храните только JSON-сериализуемые значения.
225+
2. Для production-секретов используйте полноценную криптографию (а не lightweight-обфускацию).
226+
3. Используйте `with DataBase(...)` или `close()` для корректного завершения работы с файлами.
227+
4. Для больших объёмов/конкурентной записи рассмотрите переход на СУБД.
165228

166-
MIT License - see LICENSE file for details.
229+
---
167230

168-
## Support
231+
## Лицензия
169232

170-
This project is maintained by Daniil Alekseev. For support, please open an issue on GitHub.
233+
MIT License. Подробности в файле `LICENSE`.

0 commit comments

Comments
 (0)