initial commit
This commit is contained in:
parent
69d0f7498e
commit
32d18c880b
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
.idea/
|
||||||
|
**/__pycache__/
|
34
examples.py
Normal file
34
examples.py
Normal 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
0
pseudodb/__init__.py
Normal file
0
pseudodb/default/__init__.py
Normal file
0
pseudodb/default/__init__.py
Normal file
16
pseudodb/default/data.py
Normal file
16
pseudodb/default/data.py
Normal 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
51
pseudodb/pseudodb.py
Normal 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
0
utils/__init__.py
Normal file
21
utils/file_utils.py
Normal file
21
utils/file_utils.py
Normal 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
16
utils/misc_utils.py
Normal 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
36
utils/str_utils.py
Normal 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
|
Loading…
Reference in New Issue
Block a user