tdatabase 1.0.0__py3-none-any.whl → 2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
tdatabase/__init__.py CHANGED
@@ -1 +1,9 @@
1
- from .core import create_db, append_cell, read_cell, read_all
1
+ from .core import (
2
+ db_open,
3
+ set_lang,
4
+ total_db,
5
+ _TDB
6
+ )
7
+
8
+ __version__ = "1.0.0"
9
+ __all__ = ['db_open', 'set_lang', 'total_db', '_TDB']
tdatabase/core.py CHANGED
@@ -1,44 +1,152 @@
1
- import struct
1
+ from pathlib import Path
2
+ import getpass
3
+ import re
2
4
 
3
- MAGIC = b'PXDB'
5
+ username = getpass.getuser()
6
+ address = Path(f"C:/Users/{username}/AppData/Roaming/..Tdatabase/data")
7
+ address.mkdir(parents=True, exist_ok=True)
4
8
 
5
- def create_db(filename, rows, cols):
6
- with open(filename, 'wb') as f:
7
- f.write(MAGIC)
8
- f.write(struct.pack('<HH', rows, cols))
9
+ lg = 'en'
10
+
11
+ def set_lang(lang=None):
12
+ global lg
13
+ if lang == 'fa':
14
+ lg = 'fa'
15
+ print('Zaban Farsi Shod.')
16
+ elif lang == 'en':
17
+ lg = 'en'
18
+ print('Language Is English.')
19
+ else:
20
+ if lg == 'en':
21
+ print('Language Is Not Defined \n Languages :\n fa/en')
22
+ if lg == 'fa':
23
+ print('Zaban Mord Nazar Yaft Nashod \n Zaban ha : \n fa/en')
24
+
25
+ class _TDB:
26
+ def __init__(self, file_path, db_name):
27
+ self.path = file_path
28
+ self.name = db_name
29
+ self.lang = lg
30
+
31
+ def _parse(self):
32
+ if not self.path.exists():
33
+ return {}
34
+ with open(self.path, 'r', encoding='utf-8') as f:
35
+ content = f.read()
36
+
37
+ match = re.search(r'DATABASE\s+(\w+)\s*\{([\s\S]*)\}', content)
38
+ if not match:
39
+ return {}
40
+
41
+ body = match.group(2)
42
+ data = {}
43
+ for line in body.split('\n'):
44
+ line = line.strip()
45
+ if not line or line in ['{', '}']:
46
+ continue
47
+ if line.startswith(','):
48
+ line = line[1:]
49
+
50
+ if ':' in line:
51
+ key, values_str = line.split(':', 1)
52
+ key = key.strip()
53
+ values = [v.strip() for v in values_str.split(',') if v.strip()]
54
+ data[key] = values
55
+ return data
56
+
57
+ def _write(self, data):
58
+ lines = [f"DATABASE {self.name} {{"]
59
+ for key, values in data.items():
60
+ val_str = ", ".join(values) + ","
61
+ lines.append(f" {key} : {val_str}")
62
+ lines.append("}")
9
63
 
10
- def append_cell(filename, row, col, text):
11
- data = text.encode('utf-8')
12
- with open(filename, 'ab') as f:
13
- f.write(struct.pack('<HHH', row, col, len(data)))
14
- f.write(data)
64
+ with open(self.path, 'w', encoding='utf-8') as f:
65
+ f.write("\n".join(lines))
66
+
67
+ def add_val(self, key=None, val=None):
68
+ if not key or not val:
69
+ msg = "Error: Key and Value are required!" if self.lang == 'en' else "Khata: Key va Value lazem ast!"
70
+ print(msg)
71
+ return
72
+
73
+ data = self._parse()
74
+ if key not in data:
75
+ data[key] = []
76
+ data[key].append(val)
77
+ self._write(data)
78
+
79
+ msg = f"Value '{val}' added to '{key}'." if self.lang == 'en' else f"Value '{val}' be '{key}' ezafe shod."
80
+ print(msg)
81
+
82
+ def read_cat(self):
83
+ data = self._parse()
84
+ return list(data.keys())
85
+
86
+ def read_content(self, key=None):
87
+ if not key:
88
+ return None
89
+ data = self._parse()
90
+ return data.get(key)
91
+
92
+ def read_user(self, search_key, search_value):
93
+ data = self._parse()
94
+ if search_key not in data:
95
+ return None
96
+
97
+ try:
98
+ index = data[search_key].index(search_value)
99
+ except ValueError:
100
+ return None
101
+
102
+ user_info = {}
103
+ for key, values in data.items():
104
+ if index < len(values):
105
+ user_info[key] = values[index]
106
+ return user_info
107
+
108
+ def del_val(self, key, val):
109
+ data = self._parse()
110
+ if key not in data or val not in data[key]:
111
+ print("Item not found.")
112
+ return
113
+
114
+ index = data[key].index(val)
115
+ for k in data:
116
+ if index < len(data[k]):
117
+ data[k].pop(index)
118
+
119
+ self._write(data)
120
+ print(f"Item '{val}' deleted.")
121
+
122
+ def update_val(self, key, old_val, new_val):
123
+ data = self._parse()
124
+ if key not in data or old_val not in data[key]:
125
+ print("Old value not found.")
126
+ return
127
+
128
+ index = data[key].index(old_val)
129
+ data[key][index] = new_val
130
+
131
+ self._write(data)
132
+ print(f"Updated '{old_val}' to '{new_val}'.")
133
+
134
+ def db_open(filename):
135
+ file_path = address / filename
136
+ db_name = filename.replace(".tdb", "")
15
137
 
16
- def read_cell(filename, row, col):
17
- with open(filename, 'rb') as f:
18
- magic = f.read(4)
19
- if magic != b'PXDB':
20
- raise Exception("File is not exiting")
21
- rows, cols = struct.unpack('<HH', f.read(4))
22
- while True:
23
- chunk = f.read(6)
24
- if not chunk:
25
- break
26
- r, c, length = struct.unpack('<HHH', chunk)
27
- data = f.read(length).decode('utf-8')
28
- if r == row and c == col:
29
- return data
30
- return None
31
- def read_all(filename):
32
- data = {}
33
- with open(filename, 'rb') as f:
34
- if f.read(4) != MAGIC:
35
- raise Exception("❌ Invalid file")
36
- rows, cols = struct.unpack('<HH', f.read(4))
37
- while True:
38
- chunk = f.read(6)
39
- if not chunk:
40
- break
41
- r, c, length = struct.unpack('<HHH', chunk)
42
- text = f.read(length).decode('utf-8')
43
- data[(r, c)] = text
44
- return data, rows, cols
138
+ if file_path.exists():
139
+ if lg == 'en':
140
+ print("Hello , Tdatabase Ready")
141
+ else:
142
+ print('Salam, Tdatabase Amade Ast')
143
+ return _TDB(file_path, db_name)
144
+ else:
145
+ if lg == 'en':
146
+ print("ERROR 404 : Database Not Found")
147
+ else:
148
+ print('Khata 404 : Database Morede Nazar Peida Nashod')
149
+ return None
150
+
151
+ def total_db():
152
+ return [file.stem for file in address.glob("*.tdb")]
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Taha Gaga
3
+ Copyright (c) 2026 Taha Gaga
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,35 @@
1
+ Metadata-Version: 2.1
2
+ Name: tdatabase
3
+ Version: 2
4
+ Summary: Base Database Made In Iran
5
+ Author: Tahagaga
6
+ License: MIT
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Operating System :: OS Independent
10
+ Requires-Python: >=3.6
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+
14
+ # TDatabase 🇮🇷
15
+
16
+ **اولین دیتابیس مستقل و بومی ایران**
17
+
18
+ یک کتابخانه سبک، سریع و فایل‌محور برای مدیریت داده‌ها در پایتون، بدون نیاز به نصب سرورهای پیچیده.
19
+
20
+ ---
21
+
22
+ ## ✨ ویژگی‌ها
23
+
24
+ * 🇮🇷 **بومی و مستقل:** طراحی و توسعه یافته توسط برنامه‌نویس ایرانی.
25
+ * 📂 **بدون نیاز به سرور:** داده‌ها در فایل‌های متنی با فرمت اختصاصی `.tdb` ذخیره می‌شوند.
26
+ * 🚀 **نصب آسان:** کافیست پوشه کتابخانه را به پروژه اضافه کنید.
27
+ * 🌍 **چندزبانه:** پشتیبانی از زبان فارسی و انگلیسی در پیام‌های سیستم.
28
+ * 🛠️ **مدیریت کامل :** قابلیت ایجاد، خواندن، بروزرسانی و حذف داده‌ها.
29
+ * 👤 **مدیریت کاربران:** توابع اختصاصی برای جستجو و مدیریت اطلاعات کاربران.
30
+
31
+ ---
32
+
33
+ ## 📦 نصب (Installation)
34
+
35
+ ``` pip install tdatabase ```
@@ -0,0 +1,7 @@
1
+ tdatabase/__init__.py,sha256=jYDoCepMik3eHAei8DQG4b7cxMnjyxu7wfvUjH-i77Q,158
2
+ tdatabase/core.py,sha256=sxOhP17IXTvITV1FkYwbGCvI3hK1c63ZjdNLU4bgClE,4552
3
+ tdatabase-2.dist-info/LICENSE,sha256=0b1VnsIxaUzTa8F9oKfuqExntM_Tsy2WYRct3vies88,1085
4
+ tdatabase-2.dist-info/METADATA,sha256=RCTxv8IcLG6k1p8Z55rqBEkVz4ksllIwodlnhfwQR6c,1529
5
+ tdatabase-2.dist-info/WHEEL,sha256=WnJ8fYhv8N4SYVK2lLYNI6N0kVATA7b0piVUNvqIIJE,91
6
+ tdatabase-2.dist-info/top_level.txt,sha256=CXAUQMDT0KdI-SLSkEaxn5JZkRjAbs44qJuT8OB3c8A,10
7
+ tdatabase-2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.2)
2
+ Generator: setuptools (75.3.3)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,29 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: tdatabase
3
- Version: 1.0.0
4
- Summary: Data Base Made In iran
5
- Author: Tahagaga
6
- License: MIT
7
- Classifier: Programming Language :: Python :: 3
8
- Classifier: License :: OSI Approved :: MIT License
9
- Classifier: Operating System :: OS Independent
10
- Requires-Python: >=3.6
11
- Description-Content-Type: text/markdown
12
- License-File: LICENSE
13
-
14
- # TDatabase - اولین دیتابیس ایرانی مستقل 🇮🇷💥
15
-
16
- **TDatabase** یک دیتابیس ایرانی مستقل است که به شما امکان می‌دهد داده‌ها را **ذخیره، ویرایش، لود و مدیریت** کنید، بدون نیاز به SQL یا دیتابیس‌های خارجی.
17
- همراه با **GUI حرفه‌ای** و **کتابخانه پایتون** برای کار راحت توسعه‌دهندگان.
18
-
19
- ## ویژگی‌ها ✨
20
- - کاملاً مستقل و بومی ✅
21
- - فایل‌های دیتابیس با پسوند `.px` 📦
22
- - مدیریت داده‌ها با **GUI زیبا و ساده** 🖥️
23
- - کتابخانه پایتون برای عملیات CRUD سریع 🐍
24
- - ایجاد، باز کردن، ذخیره و لود دیتابیس جدید بدون دردسر 💾
25
- - سبک و سریع ⚡
26
-
27
- ## نصب 🛠️
28
- ```bash
29
- pip install tdatabase
@@ -1,7 +0,0 @@
1
- tdatabase/__init__.py,sha256=hRmgmPGM9_aqh2FNGk2ZzUSa1ddcYLDti8EFnlGMsio,63
2
- tdatabase/core.py,sha256=vwiJ3YxY_pDP3YWGLWBhli87iU2Kvp6bMdOUvMsKrHg,1411
3
- tdatabase-1.0.0.dist-info/LICENSE,sha256=nvLs3RkjYOu_Pl1RlXLybmEnIMEssQG8h8uSUR7D8iM,1085
4
- tdatabase-1.0.0.dist-info/METADATA,sha256=IU_WM279r-SQKfGy-zxXCzpwlLoETsaiES2-9fp6VXg,1302
5
- tdatabase-1.0.0.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
6
- tdatabase-1.0.0.dist-info/top_level.txt,sha256=CXAUQMDT0KdI-SLSkEaxn5JZkRjAbs44qJuT8OB3c8A,10
7
- tdatabase-1.0.0.dist-info/RECORD,,