OXIESEC PANEL
- Current Dir:
/
/
snap
/
core24
/
988
/
usr
/
lib
/
python3
/
dist-packages
/
cloudinit
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📄
__init__.py
0 bytes
01/15/2025 03:24:11 PM
rw-r--r--
📁
__pycache__
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📁
analyze
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📄
apport.py
8.27 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
atomic_helper.py
2.79 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
cloud.py
3.71 KB
01/15/2025 03:24:11 PM
rw-r--r--
📁
cmd
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📁
config
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📁
distros
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📄
dmi.py
7.86 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
event.py
2 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
features.py
5.27 KB
04/02/2025 03:09:15 PM
rw-r--r--
📁
filters
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📄
gpg.py
7.99 KB
01/15/2025 03:24:11 PM
rw-r--r--
📁
handlers
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📄
helpers.py
16.16 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
importer.py
2.43 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
lifecycle.py
7.79 KB
01/15/2025 03:24:11 PM
rw-r--r--
📁
log
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📁
mergers
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📁
net
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📄
netinfo.py
24.02 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
performance.py
3.1 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
persistence.py
2.52 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
registry.py
1022 bytes
01/15/2025 03:24:11 PM
rw-r--r--
📁
reporting
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📄
safeyaml.py
10.11 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
settings.py
2.12 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
signal_handler.py
3.92 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
simpletable.py
1.93 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
socket.py
5.93 KB
01/15/2025 03:24:11 PM
rw-r--r--
📁
sources
-
05/04/2025 04:37:50 PM
rwxr-xr-x
📄
ssh_util.py
22.22 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
stages.py
41.53 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
subp.py
12.43 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
temp_utils.py
2.94 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
templater.py
7.8 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
type_utils.py
703 bytes
01/15/2025 03:24:11 PM
rw-r--r--
📄
url_helper.py
38.16 KB
04/02/2025 03:09:15 PM
rw-r--r--
📄
user_data.py
14.44 KB
01/15/2025 03:24:11 PM
rw-r--r--
📄
util.py
90.78 KB
04/02/2025 03:09:15 PM
rw-r--r--
📄
version.py
568 bytes
04/02/2025 03:09:15 PM
rw-r--r--
📄
warnings.py
3.76 KB
01/15/2025 03:24:11 PM
rw-r--r--
Editing: importer.py
Close
# Copyright (C) 2012 Canonical Ltd. # Copyright (C) 2012 Hewlett-Packard Development Company, L.P. # Copyright (C) 2012 Yahoo! Inc. # # Author: Scott Moser <scott.moser@canonical.com> # Author: Juerg Haefliger <juerg.haefliger@hp.com> # Author: Joshua Harlow <harlowja@yahoo-inc.com> # # This file is part of cloud-init. See LICENSE file for license information. import importlib from types import ModuleType from typing import Optional, Sequence from cloudinit import util def import_module(module_name: str) -> ModuleType: return importlib.import_module(module_name) def _count_attrs( module_name: str, attrs: Optional[Sequence[str]] = None ) -> int: found_attrs = 0 if not attrs: return found_attrs mod = importlib.import_module(module_name) for attr in attrs: if hasattr(mod, attr): found_attrs += 1 return found_attrs def match_case_insensitive_module_name(mod_name: str) -> Optional[str]: """Check the importable datasource modules for a case-insensitive match.""" # nocloud-net is the only datasource that requires matching on a name that # does not match its python module - canonicalize it here if "nocloud-net" == mod_name.lower(): mod_name = mod_name[:-4] if not mod_name.startswith("DataSource"): mod_name = f"DataSource{mod_name}" modules = {} spec = importlib.util.find_spec("cloudinit.sources") if spec and spec.submodule_search_locations: for dir in spec.submodule_search_locations: modules.update(util.get_modules_from_dir(dir)) for module in modules.values(): if module.lower() == mod_name.lower(): return module return mod_name def find_module( base_name: str, search_paths: Sequence[str], required_attrs: Optional[Sequence[str]] = None, ) -> tuple: """Finds specified modules""" if not required_attrs: required_attrs = [] lookup_paths = [] found_paths = [] for path in search_paths: # Add base name to search paths. Filter out empty paths. full_path = ".".join(filter(None, [path, base_name])) lookup_paths.append(full_path) if not importlib.util.find_spec(full_path): continue # Check that required_attrs are all present within the module. if _count_attrs(full_path, required_attrs) == len(required_attrs): found_paths.append(full_path) return (found_paths, lookup_paths)