SILENT KILLERPanel

Current Path: > > > lib > python3.6 > site-packages > up2date_client


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: ///lib/python3.6/site-packages/up2date_client

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
__init__.py File 0 bytes May 29 2025 13:37:22.
capabilities.py File 7452 bytes May 29 2025 13:37:22.
clientCaps.py File 2208 bytes May 29 2025 13:37:22.
clpwd.py File 3643 bytes May 29 2025 13:37:22.
config.py File 14803 bytes May 29 2025 13:37:22.
debUtils.py File 2830 bytes May 29 2025 13:37:22.
getMethod.py File 4302 bytes May 29 2025 13:37:22.
haltree.py File 4642 bytes May 29 2025 13:37:22.
hardware.py File 32675 bytes May 29 2025 13:37:22.
hardware_gudev.py File 13216 bytes May 29 2025 13:37:22.
hardware_hal.py File 11604 bytes May 29 2025 13:37:22.
hardware_udev.py File 13300 bytes May 29 2025 13:37:22.
pkgUtils.py File 295 bytes May 29 2025 13:37:22.
pkgplatform.py File 309 bytes May 29 2025 13:47:19.
pmPlugin.py File 2859 bytes May 29 2025 13:37:22.
rhnChannel.py File 5031 bytes May 29 2025 13:37:22.
rhnHardware.py File 328 bytes May 29 2025 13:37:22.
rhnPackageInfo.py File 2396 bytes May 29 2025 13:37:22.
rhncli.py File 9335 bytes May 29 2025 13:37:22.
rhnreg.py File 32101 bytes May 29 2025 13:37:22.
rhnreg_constants.py File 18569 bytes May 29 2025 13:37:22.
rhnserver.py File 9531 bytes May 29 2025 13:37:22.
rpcServer.py File 11999 bytes May 29 2025 13:37:22.
rpmUtils.py File 5321 bytes May 29 2025 13:37:22.
transaction.py File 4193 bytes May 29 2025 13:37:22.
tui.py File 44749 bytes May 29 2025 13:37:22.
up2dateAuth.py File 10944 bytes May 29 2025 13:37:22.
up2dateErrors.py File 10502 bytes May 29 2025 13:37:22.
up2dateLog.py File 2108 bytes May 29 2025 13:37:22.
up2dateUtils.py File 5180 bytes May 29 2025 13:47:19.

Reading File: ///lib/python3.6/site-packages/up2date_client/haltree.py

# HalTree Purpose:
#
# HalTree is a way to organize the mess of data you get from hal.  In general,
# if you want to get all the information about every device in the system, you
# end up with a list of dicts, where each dict contains the property name/values
# for a device.  This list isn't very useful as the hal data is actually
# organized into a tree.  For example, you have the computer as the head, then
# there may be a scsi card plugged in.  That in turn will have scsi channels
# and luns, which scsi devices may be connected to.  So this module will help
# you reorganize your hal data back to the way they were intended.
#
# HalTree Usage:
#
# The tree gets built one device at a time.  Once you've created a HalTree
# object, devices get added to the tree with HalTree.add(hw_dev_dict).  The
# devices can be added in any particular order, and the tree gets properly
# structured as the devices get added.  But the tree structure isn't likely
# to be ready until all the devices have been added.  Those devices without a
# parent get stuck in the no_parent_yet list.
#
# When a device gets added, it is no longer a plain dict.  It is stored in a
# HalDevice.  The original dict can be found in HalDevice.properties.

try: # python2
    from types import StringType, IntType
except ImportError: # python3
    StringType = bytes
    IntType = int


class HalDevice:
    "An object containing its udi, properties and children"
    def __init__ (self, properties):
        self.udi = properties['info.udi']

        self.properties = properties
        self.children = []
        self.classification = None

        if 'info.parent' in properties:
            self.parent_udi = properties['info.parent']
        else:
            self.parent_udi = None

        self.parent = None

    def print_properties(self):
        print(self.udi, ":")
        for property, value in self.properties.items():
            print("    ", property," ==> ",  value)




class HalTree:
    def __init__ (self):
        self.head = None
        self.no_parent_yet = []


    def add(self, hal_device):
        if hal_device.parent_udi:
            parent = self.__find_node(hal_device.parent_udi)
            if parent:
                parent.children.append(hal_device)
                hal_device.parent = parent
            else:  #parent isn't in the main tree yet, stick it in waiting
                self.no_parent_yet.append(hal_device)
        else: #if it doesn't have a parent, it must be the head 'computer'
            self.head = hal_device

        #check to see if there are any children waiting for this dev
        self.__get_lost_children(hal_device)


    def __get_lost_children(self, hal_device):
        found_list = []
        indexes = []
        no_parent_yet_copy = self.no_parent_yet[:]
        for dev in no_parent_yet_copy:
            if dev.parent_udi == hal_device.udi:
                dev.parent = hal_device
                hal_device.children.append(dev)
                self.no_parent_yet.remove(dev)

    def __find_node(self, udi):
        """
        This takes a node in the HalDevice tree and returns the HalDevice with
        the given udi.
        """
        if self.head:
            node = HalTree.__find_node_worker(self.head, udi)
            if node:
                return node

        for node in self.no_parent_yet:
            found_node = HalTree.__find_node_worker(node, udi)
            if found_node:
                return found_node
        return None

    @staticmethod
    def __find_node_worker(node, udi):
        if node.udi == udi:
            return node
        for device in node.children:
            res = HalTree.__find_node_worker(device, udi)
            if res:
                return res
        return None

    def print_tree(self):
        self.__print_dev_tree(self.head, "")

    def __print_dev_tree(self, node, indent):
        print(indent, node.udi)
        print(indent, "CLASS:", node.classification)
        for name, property in node.properties.items():
            if (type(property) == StringType):
                if property.isdigit():
                    print(indent + "    ", "%-20s ==> %s" % (name, hex(int(property))))
                else:
                    print(indent + "    ", "%-20s ==> %s" % (name, property))
            elif (type(property) == IntType):
                print(indent + "    ", "%-20s ==> %s" % (name, hex(int(property))))
            else:
                print(indent + "    ", "%-20s ==> %s" % (name, property))
        print
        for child in node.children:
            self.__print_dev_tree(child, indent + "    ")

SILENT KILLER Tool