[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@18.220.222.188: ~ $
# 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, AnyStr, Tuple, Optional

__all__ = [
    'serialize_evr'
]


def encode_int_to_real_numbers_segment(intgr: Union[int]) -> List[Union[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[Union[int, AnyStr]]) -> AnyStr:
    """
    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)
    return "".join([f"{n:02x}" for n in evr])


def serialize_evr(evr: Union[List[AnyStr], Tuple[AnyStr], AnyStr]) -> AnyStr:
    """
    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[AnyStr]) -> List[AnyStr]:
    """
    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

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
cpapi Folder 0755
lib Folder 0755
public_hooks Folder 0755
__init__.py File 1.37 KB 0644
clcagefs.py File 10.01 KB 0644
clcaptain.py File 1.96 KB 0644
clconfig.py File 1.68 KB 0644
clconfpars.py File 10.13 KB 0644
clcustomscript.py File 1.16 KB 0644
cldebug.py File 905 B 0644
clemail.py File 1.65 KB 0644
clexception.py File 1.14 KB 0644
clfunc.py File 6.47 KB 0644
clhook.py File 3.86 KB 0644
cllog.py File 1.45 KB 0644
cloutput.py File 471 B 0644
clproc.py File 4.05 KB 0644
clpwd.py File 7.74 KB 0644
clquota.py File 1.27 KB 0644
clsec.py File 657 B 0644
clwpos_lib.py File 15.4 KB 0644
const.py File 277 B 0644
evr_utils.py File 3.58 KB 0644
features.py File 5.04 KB 0644
group_info_reader.py File 5.29 KB 0644
lock.py File 1.02 KB 0644
mail_helper.py File 4.45 KB 0644
mysql_lib.py File 5.84 KB 0644
php_conf_reader.py File 9.77 KB 0644
sysctl.py File 7.61 KB 0644
ui_config.py File 3.12 KB 0644
utils.py File 30.28 KB 0644
utils_cmd.py File 2.71 KB 0644