\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/

Viewing File: clselectprint.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

from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import csv
import simplejson
import sys
from xml.sax.saxutils import escape as _escape
from past.builtins import basestring  # noqa
from future.utils import iteritems


HTML_ESCAPE_TABLE = {
    '"': "&quot;",
    "'": "&apos;"
}

# F-21: characters that spreadsheet clients (Excel, LibreOffice Calc, Google
# Sheets) interpret as a formula leader when they appear at the start of a
# CSV cell. Tab (\t) and CR (\r) are included because spreadsheets strip them
# before evaluating the next character.
_CSV_FORMULA_LEADERS = ("=", "+", "-", "@", "\t", "\r")


def _csv_neutralize(value):
    """
    Prefix a single quote when the cell starts with a spreadsheet formula
    leader, so Excel/LibreOffice render the literal text instead of executing
    it. Returns the value unchanged when it is not a leader-prefixed string.
    Non-string scalars are passed through (numbers and booleans cannot be
    formula leaders once the csv writer stringifies them).
    """
    if isinstance(value, basestring) and value.startswith(_CSV_FORMULA_LEADERS):
        return "'" + value
    return value


def escape_string(data):
    if isinstance(data, basestring):
        return _escape(data, HTML_ESCAPE_TABLE)
    elif isinstance(data, (tuple, list)):
        new_data = []
        for value in data:
            new_data.append(escape_string(value))
        return new_data
    elif isinstance(data, dict):
        new_dict = {}
        for k, v in iteritems(data):
            new_dict[k] = escape_string(v)
        return new_dict
    return data


def validate_json_message(data):
    # copies message from 'details' to 'message'
    # in case there is no 'message' in json
    if not 'message' in data:
        data['message'] = data['details']


class clprint(object):
    def print_data(cls, fmt, data, escape=None):
        """
        Dispatches data to corresponing routine for printing
        @param fmt: string
        @param data: dict
        """
        dispatcher = {
            'json': cls.print_json,
            'perl': cls.print_perl,
            'csv': cls.print_csv,
            'text': cls.print_text
        }
        try:
            dispatcher[fmt](data, escape=escape)
        except KeyError:
            dispatcher['text'](data)
    print_data = classmethod(print_data)

    def print_diag(cls, fmt, data):
        """
        Dispatches data to corresponing routine for printing
        @param fmt: string
        @param data: dict
        """
        dispatcher = {
            'json': cls.print_diag_json,
            'perl': cls.print_diag_perl,
            'csv': cls.print_diag_csv,
            'text': cls.print_diag_text
        }
        try:
            dispatcher[fmt](data)
        except KeyError:
            dispatcher['text'](data)
    print_diag = classmethod(print_diag)

    def print_csv(data, escape=None):
        """
        Prints data as comma separated values
        @param data: dict
        """
        csv_out = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL)
        for opt in sorted(data.keys()):
            flat_array = [_csv_neutralize(opt)]
            for key, value in iteritems(data[opt]):
                if escape:
                    value = escape_string(value)
                flat_array.extend([_csv_neutralize(key), _csv_neutralize(value)])
            csv_out.writerow(flat_array)
    print_csv = staticmethod(print_csv)

    def print_diag_csv(data):
        """
        Prints diagnostic messages as comma separated values
        @param data: dict
        """
        validate_json_message(data)
        csv_out = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL)
        csv_out.writerow([_csv_neutralize(data['status']), _csv_neutralize(data['message'])])
    print_diag_csv = staticmethod(print_diag_csv)

    def print_json(data, escape=None):
        """
        Prints data as JSON
        @param data: dict
        """
        if data:
            if escape:
                data = escape_string(data)
            print(simplejson.dumps({
                'status': 'OK',
                'data': data}))
        else:
            print(simplejson.dumps({'status': 'OK'}))
    print_json = staticmethod(print_json)

    def print_diag_json(data):
        """
        Prints diagnostic messages as JSON
        @param data: dict
        """
        print(simplejson.dumps(data))
    print_diag_json = staticmethod(print_diag_json)

    def print_text(data, escape=None):
        """
        Prints data as plain text
        @param data: dict
        """
        for opt in sorted(data.keys()):
            print("TITLE:%s" % (opt,))
            for key, v in iteritems(data[opt]):
                if escape:
                    v = escape_string(v)
                print('%s:%s' % (key.upper(), v))
            print('')
    print_text = staticmethod(print_text)

    @staticmethod
    def print_diag_text(data):
        """
        Prints diagnostic messages as plain text
        @param data: dict
        """
        validate_json_message(data)
        print("%s:%s" % (data['status'], data['message']), file=sys.stderr)
        if data.get('details'):
            print("Details:", file=sys.stderr)
            print(data.get('details', '') % data.get('context', {}), file=sys.stderr)

    def print_diag_perl(data):
        """
        Prints diagnostic messages as perl data structure
        @param data: dict
        """
        validate_json_message(data)
        print("{status=>%s,message=>%s}" % (data['status'], data['message']))
    print_diag_perl = staticmethod(print_diag_perl)

    def print_perl(data, escape=None):
        """
        Prints data as perl data structure
        @param data: dict
        """
        out = []
        for opt in sorted(data.keys()):
            structure = []
            structure.append("title=>'%s'" % (opt, ))
            for k, v in iteritems(data[opt]):
                if escape:
                    v = escape_string(v)
                structure.append("%s=>'%s'" % (k, v))
            out.append("{%s}" % (','.join(structure)))
        print('[%s]' % (','.join(out),))
    print_perl = staticmethod(print_perl)