56 lines
1.9 KiB
Python
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 not 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
|