initial commit

This commit is contained in:
Greg Gauthier 2024-07-17 22:30:12 +01:00
parent 69d0f7498e
commit 32d18c880b
10 changed files with 176 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.idea/
**/__pycache__/

34
examples.py Normal file
View File

@ -0,0 +1,34 @@
from pseudodb import pseudodb
from utils.file_utils import search_path
from utils.str_utils import obscure, unobscure, get_random_string, get_dash_suffix
from utils.misc_utils import immutable_to_list
if __name__ == '__main__':
db = pseudodb.PseudoDB('pseudodb.default.data')
print("Collections in Pseudodb: "+str(db.data_list()))
for collection in db.data_list():
print("Collection: "+collection)
for key in db.get_keys(collection):
print(key+": "+str(db.get_values(collection, key)))
immutable_list = ('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine')
print("Immutable: "+str(immutable_list))
shuffled_list = immutable_to_list(immutable_list, scramble=True)
print("Shuffled Mutable: "+str(shuffled_list))
files = search_path("./utils", "misc")
print("Search Results: "+str(files))
rando_string = get_random_string(30, caps=True, numbers=True, specials=True)
print("Random: "+rando_string)
obscured = obscure(rando_string)
print("Obscured: "+str(obscured))
unobscured = unobscure(obscured)
print("Unobscured: "+unobscured)
dash_suffix = get_dash_suffix("example-silly-string-with-dashes-"+get_random_string(10))
print("Suffix found: "+dash_suffix)

0
pseudodb/__init__.py Normal file
View File

View File

16
pseudodb/default/data.py Normal file
View File

@ -0,0 +1,16 @@
names = {
"male": ["Greg", "John", "Edward", "Francis", "Charles", "Luke", "Thomas"],
"female": ["Doreen", "Janice", "Sue", "Mary", "Lisa", "Janine", "Doris"]
}
cars = {
"chevy": ["Blazer", "Tahoe", "Caprice", "Suburban", "Silverado"],
"ford": ["Mustang", "Bronco", "Focus", "Taurus", "Escape"],
"chrysler": ["Sebring", "Crossfire", "Pacifica", "Voyager"]
}
languages = {
"compiled": ["C++", "C#", "C", "Assembler", "Rust", "Go"],
"interpreted": ["Ruby", "Rexx", "Perl"],
"bytecode": ["Java", "Python", "VisualBasic"]
}

51
pseudodb/pseudodb.py Normal file
View File

@ -0,0 +1,51 @@
import importlib
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 data_list(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('__'):
attr_names.append(attr_name)
return attr_names
else:
return []
def collections(self, attr_name):
if self.data is not None:
return getattr(self.data, attr_name)
else:
return None
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):
if self.data is not None:
collection = getattr(self.data, attr_name)
if isinstance(collection, dict):
return list(collection[key])
else:
return collection
else:
return None

0
utils/__init__.py Normal file
View File

21
utils/file_utils.py Normal file
View File

@ -0,0 +1,21 @@
import os
def search_path(path, substring):
"""
given a search substring, retrieve all the files in the Store
that have that substring in them.
Args:
path (string): path to search
substring (string): the string to be matched against
Returns:
list: a pythonized list of all the files in which the search
substring is contained.
"""
matched_files = [matched_file
for matched_file in os.listdir(path)
if substring in matched_file]
return matched_files

16
utils/misc_utils.py Normal file
View File

@ -0,0 +1,16 @@
from random import shuffle
def immutable_to_list(immutable, scramble=False, prune=0):
indices = list(range(len(immutable)))
if scramble:
shuffle(indices)
python_list = [immutable[i] for i in indices]
if prune > 0:
del python_list[prune:]
return python_list

36
utils/str_utils.py Normal file
View File

@ -0,0 +1,36 @@
import random
import string
import base64
def obscure(content):
data = content.encode('utf-8')
return base64.b64encode(data)
def unobscure(content):
data = content.decode('utf-8')
return str(base64.b64decode(data))
def get_random_string(length, caps=False, numbers=False, specials=False):
letters = string.ascii_lowercase
if caps:
letters += string.ascii_uppercase
if numbers:
letters += string.digits
if specials:
letters += string.punctuation
return ''.join(random.choice(letters) for _ in range(length))
def get_colon_prefix(content):
split_string = content.split(":", 1)
return split_string[0].strip()
def get_dash_suffix(content):
last_dash = content.rfind("-")
rando = content[last_dash + 1:]
return rando