X7ROOT File Manager
Current Path:
/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/utils
opt
/
imunify360
/
venv
/
lib
/
python3.11
/
site-packages
/
defence360agent
/
utils
/
📁
..
📄
__init__.py
(52.55 KB)
📁
__pycache__
📄
_shutil.py
(795 B)
📄
antivirus_mode.py
(497 B)
📄
async_utils.py
(718 B)
📄
benchmark.py
(538 B)
📄
buffer.py
(1.24 KB)
📄
check_db.py
(7.35 KB)
📄
check_lock.py
(636 B)
📄
cli.py
(7.08 KB)
📄
common.py
(14.41 KB)
📄
config.py
(999 B)
📄
cronjob.py
(902 B)
📄
doctor.py
(1 KB)
📄
hyperscan.py
(149 B)
📄
importer.py
(2.67 KB)
📄
ipecho.py
(1.9 KB)
📄
json.py
(953 B)
📄
kwconfig.py
(1.56 KB)
📄
parsers.py
(11.12 KB)
📄
resource_limits.py
(2.29 KB)
📄
safe_fileops.py
(7.99 KB)
📄
safe_sequence.py
(363 B)
📄
serialization.py
(1.72 KB)
📄
sshutil.py
(7.94 KB)
📄
subprocess.py
(1.53 KB)
📄
support.py
(5.2 KB)
📄
threads.py
(1005 B)
📄
validate.py
(4.27 KB)
📄
whmcs.py
(7.6 KB)
📄
wordpress_mu_plugin.py
(1.41 KB)
Editing: kwconfig.py
import re from typing import Optional from defence360agent.utils import atomic_rewrite class KWConfig: """ Basic class for working with key-value configuration files Subclasses must define SEARCH_PATTERN and WRITE_PATTERN attributes """ SEARCH_PATTERN = DEFAULT_FILENAME = WRITE_PATTERN = "" ALLOW_EMPTY_CONFIG = True def __init__(self, name, filename=None): assert self.SEARCH_PATTERN self._pattern = re.compile( self.SEARCH_PATTERN.format(name), re.MULTILINE ) self._filename = filename or self.DEFAULT_FILENAME self._name = name def set(self, value) -> Optional[str]: assert self.WRITE_PATTERN with open(self._filename) as f: content = f.read() old_value = self._parse(content) if old_value is None: # If no variable found, just add to the bottom content += ( "\n" + self.WRITE_PATTERN.format(self._name, value) + "\n" ) else: content = self._pattern.sub( self.WRITE_PATTERN.format(self._name, value), content ) atomic_rewrite( self._filename, content, allow_empty_content=self.ALLOW_EMPTY_CONFIG, ) return old_value def get(self) -> Optional[str]: with open(self._filename) as f: content = f.read() return self._parse(content) def _parse(self, content) -> Optional[str]: match = self._pattern.search(content) return match and match.group(1)
Upload File
Create Folder