$22 GRAYBYTE WORDPRESS FILE MANAGER $82

SERVER : vnpttt-amd7f72-h1.vietnix.vn #1 SMP Fri May 24 12:42:50 UTC 2024
SERVER IP : 103.200.23.149 | ADMIN IP 216.73.216.22
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/

HOME
Current File : /opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon//evr_utils.py
# coding=utf-8
#
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2019 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
#
# author: Ruslan Pisarev  <rpisarev@cloudlinux.com>
# created: 25.07.13  12:36
# description: alternatives,rpm_compare: hash-string for coding EVR

# Examples of serialization you can look at tests/test_evr_utils.py

from typing import Union, List, Tuple, Optional

__all__ = [
    'serialize_evr'
]


def encode_int_to_real_numbers_segment(intgr: int) -> List[int]:
    """
    Encode int in real-numbers segment.
    See http://en.wikipedia.org/wiki/Arithmetic_coding.

    @param intgr:       int for coding in Float an segment [seg_begin, seg_end]
    @return:            list encoding segment
    """
    lst = []
    number = intgr
    while number > 0:
        number, remainder = divmod(number, 256)
        lst.append(remainder)
    lst.append(128 + len(lst))
    lst.reverse()
    return lst


def evr_to_float(rpm_data: List[str]) -> str:
    """
    Encode List of parts of Version or Epoch or Release in real-numbers segment.
    See http://en.wikipedia.org/wiki/Arithmetic_coding.

    @param rpm_data:    list to convert in double
    @return:            Converted string
    """
    evr = []
    for elem in rpm_data:
        if isinstance(elem, int):
            evr.extend(encode_int_to_real_numbers_segment(elem))
        elif isinstance(elem, str) and elem.isdigit():
            evr.extend(encode_int_to_real_numbers_segment(int(elem)))
        elif isinstance(elem, str):
            evr.extend(ord(ch) for ch in elem)
        else:
            raise NameError(f'ThisStrange: {elem}')
        evr.append(0)
    converted_str = "".join([f"{n:02x}" for n in evr])
    return converted_str


def serialize_evr(evr: Union[List[str], Tuple[str], str]) -> str:
    """
    Converts epoch, version and release of package to unique string.

    Ex:
    ['1', '2.4.4', '34'] -> '810100008102008104008104000081220000'
    ['0', '2.2.3', '76.el5_9.cloudlinux'] -> 80000081020081020081030000814c00656c00810500810900636c6f75646c696e75780000

    @param evr:         List from epoch, version and release
    @return:            str for given list
    """
    ret = ''
    if not isinstance(evr, (list, tuple)):
        evr = [evr]
    for i in evr:
        ret += evr_to_float(split_segments(i)) + '00'
    return ret


def split_segments(string: Optional[str]) -> List[str]:
    """
    Split str of epoch or version or release to numbers and strings.

    Ex:
    '76.el5_9.cloudlinux.2' -> ['76', 'el', '5', '9', 'cloudlinux', '2']

    @param string:           str of epoch or version or release
    @return:            List strings and numbers from EVR
    """

    if string is None:
        return []
    prev_symb = string[0]
    begin_index = 0
    segments = []
    for i, el in enumerate(string):
        # Continue loop if a type of current symbol is equal to a type of previous symbol
        # Ex: In string 'el7' symbols 'e' and 'l' have the same type (alphabetic) and
        # we should take the part of string 'el' as whole
        if str(prev_symb + el).isdigit() or str(prev_symb + el).isalpha():
            prev_symb = el
            continue
        # skip segement if it is't alpha/numeric
        if string[begin_index:i].isalnum():
            segments.append(string[begin_index:i])
        begin_index = i
        prev_symb = string[begin_index]
    # skip end of a string if it isn't alpha/numeric
    if string[begin_index:].isalnum():
        segments.append(string[begin_index:])
    return segments

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
17 Dec 2025 3.08 AM
root / root
0755
__pycache__
--
16 Dec 2025 9.25 PM
root / root
0755
cpapi
--
16 Dec 2025 9.25 PM
root / root
0755
lib
--
16 Dec 2025 9.25 PM
root / root
0755
public_hooks
--
16 Dec 2025 9.25 PM
root / root
0755
__init__.py
1.373 KB
15 Sep 2025 6.05 PM
root / root
0644
clcagefs.py
10.991 KB
15 Sep 2025 6.05 PM
root / root
0644
clcaptain.py
1.956 KB
15 Sep 2025 6.05 PM
root / root
0644
clconfig.py
1.684 KB
15 Sep 2025 6.05 PM
root / root
0644
clconfpars.py
12.086 KB
15 Sep 2025 6.05 PM
root / root
0644
clcustomscript.py
1.156 KB
15 Sep 2025 6.05 PM
root / root
0644
cldebug.py
0.884 KB
15 Sep 2025 6.05 PM
root / root
0644
clemail.py
1.653 KB
15 Sep 2025 6.05 PM
root / root
0644
clexception.py
1.138 KB
15 Sep 2025 6.05 PM
root / root
0644
clfunc.py
6.468 KB
15 Sep 2025 6.05 PM
root / root
0644
clhook.py
3.863 KB
15 Sep 2025 6.05 PM
root / root
0644
cllog.py
1.453 KB
15 Sep 2025 6.05 PM
root / root
0644
cloutput.py
0.46 KB
15 Sep 2025 6.05 PM
root / root
0644
clproc.py
4.049 KB
15 Sep 2025 6.05 PM
root / root
0644
clpwd.py
7.743 KB
15 Sep 2025 6.05 PM
root / root
0644
clquota.py
1.266 KB
15 Sep 2025 6.05 PM
root / root
0644
clsec.py
0.642 KB
15 Sep 2025 6.05 PM
root / root
0644
clwpos_lib.py
16.604 KB
15 Sep 2025 6.05 PM
root / root
0644
const.py
0.271 KB
15 Sep 2025 6.05 PM
root / root
0644
evr_utils.py
3.553 KB
15 Sep 2025 6.05 PM
root / root
0644
features.py
5.01 KB
15 Sep 2025 6.05 PM
root / root
0644
group_info_reader.py
5.286 KB
15 Sep 2025 6.05 PM
root / root
0644
lock.py
1.017 KB
15 Sep 2025 6.05 PM
root / root
0644
mail_helper.py
4.45 KB
15 Sep 2025 6.05 PM
root / root
0644
mysql_lib.py
5.844 KB
15 Sep 2025 6.05 PM
root / root
0644
php_conf_reader.py
9.766 KB
15 Sep 2025 6.05 PM
root / root
0644
sysctl.py
7.609 KB
15 Sep 2025 6.05 PM
root / root
0644
ui_config.py
3.123 KB
15 Sep 2025 6.05 PM
root / root
0644
utils.py
32.909 KB
15 Sep 2025 6.05 PM
root / root
0644
utils_cmd.py
2.706 KB
15 Sep 2025 6.05 PM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF