Last active
November 13, 2023 11:56
-
-
Save RimMirK/81b687cdf9c7d3335dcac0b797316387 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class TextFileDB: | |
| """ | |
| Text File DataBase v1 :) | |
| ---------- | |
| only supports simple data types (int, float, bool, NoneType), but does not require libraries | |
| + init ( path = "db.txt" ) | |
| + get ( key: str = None, default: any = None) -> dict[str, any] | |
| + update ( dict [str, any] ) -> any | |
| """ | |
| def __init__(self, path=f"db.txt"): | |
| self.path = path | |
| self.file = open(path, 'w+') | |
| self.data = self._read() | |
| def _read(self): | |
| self.file.seek(0) | |
| lines = self.file.readlines() | |
| data = {} | |
| for line in lines: | |
| _key, value = line.split(':',1) | |
| if value.isnumeric(): | |
| value = int(value) | |
| elif '.' in value: | |
| try: | |
| value = float(value) | |
| except ValueError: | |
| pass | |
| if value == 'True': | |
| value = True | |
| elif value == 'False': | |
| value = False | |
| elif value == 'None': | |
| value = None | |
| data[_key] = value | |
| return data | |
| def _write(self, data: dict[str, any]): | |
| text = '' | |
| for key, value in data.items(): | |
| value = str(value) | |
| key = str(key) | |
| if (':' or '\n') in key: | |
| raise ValueError("can't use symbols ':' or '\\n' in keys") | |
| if '\n' in value: | |
| raise ValueError("can't use symbol '\\n' in value") | |
| text += f'{key}:{value}\n' | |
| self.file.write(text) | |
| def _save(self): | |
| self._write(self.data) | |
| def update(self, data=dict[str, any]): | |
| """ | |
| updates a value in the database | |
| """ | |
| for key, value in data.items(): | |
| self.data[key] = value | |
| self._save() | |
| def get(self, key=None, default=None): | |
| """ | |
| Return the value for key if key is in the database, else default. | |
| """ | |
| return self._read() if key is None else self._read().get(key, default) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment