Mſ% ( d dl mZ d dlmZmZmZmZmZmZ d dl m Z d dlmZm Z d dlmZmZmZmZmZ d dlmZmZmZmZmZ edg d Z ed g d Z edg d Z ed ddg ZdZdZdZ dZ!dZ"dZ# G d d Z$dS ) ) namedtuple)DictIteratorListOptionalTupleUnion)ClPwd)NotSupported resellers)DEFAULT_PROVIDEREMPTY_LIMITSInheritedLimitsLimitsXmlConfigReader)DEFAULT_PACKAGELVE_DEFAULTLVP_DEFAULTpanelpackagesdictpaneluserslistPackagenameproviderlimitsResellerr defaultsr Useridpackager reseller is_panel_user IneritedLimitvaluesourceDEFAULTSownr" r# globalbuiltinc e Zd ZdZ eedd Z eeed Z ddZ ed Zd Z ed Zd Zd Zd Zd Zed Zed Zed Zed Zd Zd Zd Zd Zd Zd ZdS )LimitsDataStoragea This class is designed to merge data from xml config & control panel and provide user-friendy interface to work with lve limits (packages, resellers, defaults) What this class can do: - process information from xml config and control panel - re-pack structures for easy data access What this class should not do: - set limits in kernel - know anything about kernel limits Nr r c t | _ |p t | _ d | _ d | _ d | _ d | _ d | _ d S N) r _pwdr _xml_source_panel_resellers_list _packages_users _resellers _defaults)self_xml_config_readers py/cllimitslib_v2/lve_storage.py__init__zLimitsDataStorage.__init__@ sH GG -B1B1B%)" c ( | dk rd} n| dk rd} | S )z2 Convert mem to vmem and reversed vmemmem ) limit_names r9 _limit_name_convertz%LimitsDataStorage._limit_name_convertI s, JJ 5 Jr; c v | j , t | _ n# t $ r g | _ Y nw xY w| j S )z Get list of names of panel resellers. If cpapi panel plugin don't support that method, we return empty list )r2 r r r7 s r9 _get_panel_resellersz&LimitsDataStorage._get_panel_resellersW