aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan200101 <sentrycraft123@gmail.com>2021-11-13 14:46:41 +0100
committerJan200101 <sentrycraft123@gmail.com>2021-11-13 14:46:41 +0100
commit3ec286334be08224ac7b35a06ef06b8995874568 (patch)
tree7be1a25ce31d1647b436853dc13f937c2a7fc036
parent73bc3ee9f77ffa4963cb7a00dcc0a3d035d185e9 (diff)
downloadunixreg-3ec286334be08224ac7b35a06ef06b8995874568.tar.gz
unixreg-3ec286334be08224ac7b35a06ef06b8995874568.zip
remove unused methods, implement more functions correctly, bump release0.1.1
-rw-r--r--unixreg/__init__.py10
-rw-r--r--unixreg/functions.py64
-rw-r--r--unixreg/key.py57
3 files changed, 74 insertions, 57 deletions
diff --git a/unixreg/__init__.py b/unixreg/__init__.py
index fdab30a..974ecec 100644
--- a/unixreg/__init__.py
+++ b/unixreg/__init__.py
@@ -1,10 +1,10 @@
-__version__ = "0.1.0"
+__version__ = "0.1.1"
# upwards compatibility with winreg
try:
- from winreg import *
+ from winreg import *
except ImportError:
- from .functions import *
- from .constants import *
- from .key import *
+ from .functions import *
+ from .constants import *
+ from .key import *
diff --git a/unixreg/functions.py b/unixreg/functions.py
index 50d4be5..65cd641 100644
--- a/unixreg/functions.py
+++ b/unixreg/functions.py
@@ -2,12 +2,12 @@ import os
from typing import Union
from .key import RegKey
-from .constants import KEY_WOW64_64KEY, KEY_WRITE, KEY_READ
+from .constants import STANDARD_RIGHTS_REQUIRED, KEY_WOW64_64KEY, KEY_WRITE, KEY_READ
KEY_TYPE = Union[str, RegKey]
SUBKEY_TYPE = KEY_TYPE | Union[None]
-_KEY_CACHE = {}
+_KEY_CACHE = []
_ENV_REPLACE = {
"USERPROFILE": os.getenv("HOME")
}
@@ -17,7 +17,7 @@ if not _CONFIG_DIR:
_CONFIG_DIR = os.path.join(os.getenv("HOME"), ".config")
_CONFIG_DIR = os.path.join(_CONFIG_DIR, "unixreg")
-def __init_values(key: KEY_TYPE, sub_key, access):
+def __init_values(key: KEY_TYPE, sub_key: SUBKEY_TYPE = None, access = STANDARD_RIGHTS_REQUIRED):
if isinstance(key, str):
key = RegKey(key)
@@ -32,9 +32,13 @@ def __create_key(key: RegKey):
os.makedirs(path, exist_ok=True)
-def CloseKey(key: KEY_TYPE):
- if isinstance(key, RegKey):
- key.Close()
+def CloseKey(key: RegKey):
+ key.Close()
+
+ try:
+ _KEY_CACHE.remove(key)
+ except ValueError:
+ pass
def ConnectRegistry(computer: SUBKEY_TYPE, key: str):
if not computer:
@@ -44,6 +48,11 @@ def ConnectRegistry(computer: SUBKEY_TYPE, key: str):
# any program that fails to catch this is to blame
raise OSError("Not Implemented")
+def OpenKeyEx(key: KEY_TYPE, sub_key: SUBKEY_TYPE, reserved=0, access=KEY_READ):
+ return CreateKeyEx(key, sub_key, reserved, access)
+
+OpenKey = OpenKeyEx
+
def CreateKey(key: KEY_TYPE, sub_key: SUBKEY_TYPE):
return CreateKeyEx(key, sub_key)
@@ -52,6 +61,8 @@ def CreateKeyEx(key: KEY_TYPE, sub_key: SUBKEY_TYPE, reserved=0, access=KEY_WRIT
__create_key(key)
+ _KEY_CACHE.append(key)
+
return key
@@ -66,7 +77,13 @@ def DeleteKeyEx(key: KEY_TYPE, sub_key: SUBKEY_TYPE, access=KEY_WOW64_64KEY, res
os.remove(path)
def DeleteValue(key: KEY_TYPE, value: str):
- raise NotImplementedError("Not Implemented")
+ key = __init_values(key)
+
+ filepath = os.path.join(_CONFIG_DIR, key.key, value)
+ try:
+ os.remove(filepath)
+ except FileNotFoundError:
+ pass
def EnumKey(key: KEY_TYPE, index: int):
raise NotImplementedError("Not Implemented")
@@ -83,30 +100,33 @@ def ExpandEnvironmentStrings(env: str):
def FlushKey(key: KEY_TYPE):
raise NotImplementedError("Not Implemented")
-def LoadKey(key: KEY_TYPE, sub_key: SUBKEY_TYPE, file_name: str):
+
+def QueryInfoKey(key: KEY_TYPE):
raise NotImplementedError("Not Implemented")
-def OpenKeyEx(key: KEY_TYPE, sub_key: SUBKEY_TYPE, reserved=0, access=KEY_READ):
- return CreateKeyEx(key, sub_key, reserved, access)
+def QueryValueEx(key: KEY_TYPE, sub_key: SUBKEY_TYPE) -> str:
+ key = __init_values(key, sub_key)
-OpenKey = OpenKeyEx
+ filepath = os.path.join(_CONFIG_DIR, key.key)
+ with open(filepath, "r") as file:
+ return file.read()
-def QueryInfoKey(key: KEY_TYPE):
- QueryValueEx(key, None)
+QueryValue = QueryValueEx
-def QueryValueEx(key: KEY_TYPE, sub_key: SUBKEY_TYPE):
- return "bla"
+def LoadKey(key: KEY_TYPE, sub_key: SUBKEY_TYPE, file_name: str):
+ # Not Implemented but keeping this functionality stubbed should not cause a problem
+ return
-QueryValue = QueryValueEx
+def SaveKey(key: KEY_TYPE, file_name: str) -> None:
+ # Not Implemented but keeping this functionality stubbed should not cause a problem
+ return
-def SaveKey(key: KEY_TYPE, file_name: str):
- raise NotImplementedError("Not Implemented")
+def SetValue(key: KEY_TYPE, sub_key: str, type: int, value: str):
+ return SetValueEx(key, sub_key, 0, type, value)
-def SetValue(key: KEY_TYPE, sub_key: str, typei: int, value: str):
- return SetValueEx(key, sub_key, 0, typei, value)
+def SetValueEx(key: KEY_TYPE, value_name: str, reserved: int, type: int, value: str) -> None:
+ key = __init_values(key)
-def SetValueEx(key: KEY_TYPE, value_name: str, reserved: int, type: int, value: str):
- print("BLABLABLA", key, value_name, value)
filepath = os.path.join(_CONFIG_DIR, key.key, value_name)
with open(filepath, "w") as file:
file.write(value)
diff --git a/unixreg/key.py b/unixreg/key.py
index e50415b..c4d5134 100644
--- a/unixreg/key.py
+++ b/unixreg/key.py
@@ -10,46 +10,43 @@ _HANDLE_COUNTER = 0
class RegKey:
- def __init__(self, key: str = "", access: int = STANDARD_RIGHTS_REQUIRED):
- global _HANDLE_COUNTER
- _HANDLE_COUNTER += 1
+ def __init__(self, key: str = "", access: int = STANDARD_RIGHTS_REQUIRED):
+ global _HANDLE_COUNTER
+ _HANDLE_COUNTER += 1
- self.key = key
- self.handle = _HANDLE_COUNTER
- self.access = access
+ self.key = key
+ self.handle = _HANDLE_COUNTER
+ self.access = access
- def __add__(self, other: Union[str, RegKeyT]) -> RegKeyT:
- if isinstance(other, __class__):
- other = other.key
+ def __add__(self, other: Union[str, RegKeyT]) -> RegKeyT:
+ if isinstance(other, __class__):
+ other = other.key
- if isinstance(other, str):
- other = other.replace("\\\\", "\\").replace("\\", os.path.sep)
- retval = deepcopy(self)
- retval.key = os.path.join(self.key, other)
- return retval
+ if isinstance(other, str):
+ other = other.replace("\\\\", "\\").replace("\\", os.path.sep)
+ retval = deepcopy(self)
+ retval.key = os.path.join(self.key, other)
+ return retval
- return None
+ return None
- def __access(self, access):
- self.access = access
+ def __enter__(self) -> RegKeyT:
+ return self
- def __enter__(self) -> RegKeyT:
- return self
+ def __exit__(self, *args, **kwargs):
+ pass
- def __exit__(self, *args, **kwargs):
- pass
+ def __repr__(self):
+ return __class__.__name__
- def __repr__(self):
- return __class__.__name__
+ def __str__(self):
+ return f"{__class__.__name__}({self.key}, {self.handle}, {self.access})"
- def __str__(self):
- return f"{__class__.__name__}({self.key}, {self.handle}, {self.access})"
+ def Close(self):
+ pass
- def Close(self):
- pass
-
- def Detach(self):
- pass
+ def Detach(self):
+ pass
PyHKEY = RegKey \ No newline at end of file