python-snippets/pseudodb/pseudodb.py

56 lines
1.9 KiB
Python

import importlib
from array import array
class PseudoDB:
def __init__(self, datasource="default.data"):
self.datasource = datasource
self.data = self.load_data()
def load_data(self):
module_name = self.datasource.replace('.py', '')
try:
module = importlib.import_module(module_name)
return module
except ImportError:
print(f"Data module '{module_name}' not found.")
return None
def get_collections(self):
# Check if default has been successfully loaded
if self.data is not None:
attr_names = []
for attr_name in dir(self.data):
if not attr_name.startswith('__') and attr_name != 'ar':
collection = getattr(self.data, attr_name)
attr_names.append((attr_name, type(collection)))
# Sort the collections by their name before returning
return sorted(attr_names, key=lambda x: x[0])
else:
return []
def get_keys(self, attr_name):
if self.data is not None:
collection = getattr(self.data, attr_name)
if isinstance(collection, dict):
return list(collection.keys())
else:
return {}
def get_values(self, attr_name, key=None):
if self.data is not None:
collection = getattr(self.data, attr_name)
if isinstance(collection, dict):
return list(collection[key])
elif isinstance(collection, list):
return collection
elif isinstance(collection, array):
return collection
elif isinstance(collection, tuple):
return collection
else: # assume it's a string
return str(collection)
else:
return None