Skip to content

Instantly share code, notes, and snippets.

@RimMirK
Last active November 13, 2023 11:56
Show Gist options
  • Select an option

  • Save RimMirK/81b687cdf9c7d3335dcac0b797316387 to your computer and use it in GitHub Desktop.

Select an option

Save RimMirK/81b687cdf9c7d3335dcac0b797316387 to your computer and use it in GitHub Desktop.
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