|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
# Copyright 2015-2016 Mir Calculate. http://www.calculate-linux.org
|
|
|
#
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
# You may obtain a copy of the License at
|
|
|
#
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
#
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
# See the License for the specific language governing permissions and
|
|
|
# limitations under the License.
|
|
|
from calculate.lib.datavars import DataVars
|
|
|
import calculate.contrib
|
|
|
from spyne import Service
|
|
|
|
|
|
class CoreServiceInterface(object):
|
|
|
########
|
|
|
# Fields
|
|
|
########
|
|
|
|
|
|
##############
|
|
|
# baseClass.py
|
|
|
##############
|
|
|
Common = object
|
|
|
glob_process_dict = None
|
|
|
process_pid = None
|
|
|
glob_progress_dict = None
|
|
|
glob_table_dict = None
|
|
|
glob_frame_list = None
|
|
|
manager = None
|
|
|
|
|
|
data_path = None
|
|
|
certbase = None
|
|
|
rights = None
|
|
|
sids = None
|
|
|
pids = None
|
|
|
sids_file = None
|
|
|
ssl_certificate = None
|
|
|
ssl_private_key = None
|
|
|
cachedict = None
|
|
|
|
|
|
# set_paths
|
|
|
sids_pids = None
|
|
|
cert_path = None
|
|
|
serv_certbase = None
|
|
|
group_rights = None
|
|
|
max_sid = None
|
|
|
max_pid = None
|
|
|
log_filename = None
|
|
|
pids_file = None
|
|
|
|
|
|
#workaround: Spyne won't let us use self ref in @rpc,
|
|
|
# and ctx leads to original service class (Basic in this case)
|
|
|
# but some methods are gathered from CoreWsdl classes, so we need
|
|
|
# a ref to combined class
|
|
|
comb_class_ref = None
|
|
|
|
|
|
############
|
|
|
# gen_sid.py
|
|
|
############
|
|
|
sid_locker = None
|
|
|
|
|
|
#########
|
|
|
# Methods
|
|
|
#########
|
|
|
|
|
|
##############
|
|
|
# baseClass.py
|
|
|
##############
|
|
|
def get_cache(sid, meth_name, obj_name):
|
|
|
"""
|
|
|
Получить значение кэша
|
|
|
:param sid: id сессии
|
|
|
:param meth_name: имя метода
|
|
|
:param obj_name: имя объекта
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def clear_cache(sid, meth_name=None, obj_name=None):
|
|
|
"""
|
|
|
Удалить объект из кэша, если не указан метод - очищается весь кэш
|
|
|
для указанной сессий, если не указано имя объекта - очищается весь
|
|
|
кэш для метода сессии
|
|
|
:param sid: id сессии
|
|
|
:param meth_name: имя метода
|
|
|
:param obj_name: имя объекта
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def clear_cache_method(method=None):
|
|
|
"""
|
|
|
Удалить из всех сессий для указанного метода
|
|
|
:param meth_name: имя метода
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def set_cache(sid, meth_name, obj_name, obj, smart=True):
|
|
|
"""
|
|
|
Установить кэш для метода, если используется smart, то происходит
|
|
|
корриктровка атрибутов предыдущего объекта
|
|
|
:param sid: id сессии
|
|
|
:param meth_name: имя метода
|
|
|
:param obj_name: имя объекта
|
|
|
:param obj: кэшируемый объект
|
|
|
:param smart: корректировка предыдущего значения
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def set_comb_class_ref(cls, comb_class_ref):
|
|
|
cls.comb_class_ref = comb_class_ref
|
|
|
|
|
|
#########
|
|
|
# func.py
|
|
|
#########
|
|
|
def startprocess(cls, sid, target=None, method=None, method_name=None,
|
|
|
auto_delete=False, args_proc=()):
|
|
|
"""
|
|
|
Запустить задачу
|
|
|
:param sid: id сессии
|
|
|
:param target: объект с методом
|
|
|
:param method: метод
|
|
|
:param method_name: название метода
|
|
|
:param auto_delete: отслеживание процесса (нигде не используется)
|
|
|
:param args_proc: параметры для метода
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def install_vars(cls, dv=None):
|
|
|
"""
|
|
|
Метод описания параметров метода install (создаётся автоматически
|
|
|
через метакласс (datavarsConstructor.wrapper)
|
|
|
:param dv: объект переменных
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def serv_get_methods(cls, client_type):
|
|
|
"""
|
|
|
Получить доступные методы
|
|
|
:param client_type: тип клиента (console или gui или None)
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def serv_get_sessions(cls):
|
|
|
"""
|
|
|
Получить текущие сессии
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def active_clients(cls, sid):
|
|
|
"""
|
|
|
Зафиксировать активность клиента и проверить рабочая ли сессия
|
|
|
:param sid: id сессии
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def serv_view_cert_right(cls, cert_id, data_path, client_type=None):
|
|
|
"""
|
|
|
Получить права указанного сертификата
|
|
|
:param cert_id: id сертификата
|
|
|
:param data_path: база сертификатов
|
|
|
:param client_type: тип клиента (console или gui, или None)
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
############
|
|
|
# gen_pid.py
|
|
|
############
|
|
|
|
|
|
def check_sid_cert(cls, sid):
|
|
|
"""
|
|
|
Проверить сертификат в указанной сессии
|
|
|
:param sid: id сессии
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def find_sid_pid_file(cls, sid):
|
|
|
"""
|
|
|
Найти id процессов указанной сессии
|
|
|
:param sid: id сессии
|
|
|
:return: список pid
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def serv_pid_kill(cls, pid, sid):
|
|
|
"""
|
|
|
Заверишить процесс
|
|
|
:param pid:
|
|
|
:param sid:
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def del_pid(cls, pid):
|
|
|
"""
|
|
|
Удалить процесс из списка процессов
|
|
|
:param pid: id процесса
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def gen_pid(cls):
|
|
|
"""
|
|
|
Сгенерировать идентификатор процесса
|
|
|
:return:
|
|
|
"""
|
|
|
|
|
|
##########
|
|
|
# clean.py
|
|
|
##########
|
|
|
def delete_pid(cls, sid, pid):
|
|
|
"""
|
|
|
Удалить сохранённые данные указанного процесса у сессии
|
|
|
:param sid: id сессии
|
|
|
:param pid: id процесса
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def watcher_pid_proc(cls, sid, pid):
|
|
|
"""
|
|
|
Функция для потока для наблюдение за процессом сессии
|
|
|
:param sid: id сессии
|
|
|
:param pid: id процесса
|
|
|
:return:
|
|
|
"""
|
|
|
|
|
|
###########
|
|
|
# gen_sid.py
|
|
|
###########
|
|
|
def sid_cmp(cls, sid, cert_id, lang):
|
|
|
"""
|
|
|
Найти указанную сессию в сервере или создать новую
|
|
|
:param sid: 0 или id сессии
|
|
|
:param cert_id: id сертификата
|
|
|
:param lang: язык
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def serv_init_session(cls, sid, lang):
|
|
|
"""
|
|
|
Инициализация сессии
|
|
|
:param sid: 0 или id сессии
|
|
|
:param lang: язык
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def del_sid_from_file(cls, sid):
|
|
|
"""
|
|
|
Удалить сессию из файла (закрыть сессию)
|
|
|
:param sid: id сессии
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def serv_sid_info(cls, sid):
|
|
|
"""
|
|
|
Получить информацию о сессии
|
|
|
:param sid: id сессии
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def find_sid_in_file(cls, sid):
|
|
|
"""
|
|
|
Найти идентификатор сессии в файле
|
|
|
:param sid: id сессии
|
|
|
:return:
|
|
|
"""
|
|
|
|
|
|
#################
|
|
|
# sid_pid_file.py
|
|
|
#################
|
|
|
def del_sid_pid(cls, sid):
|
|
|
"""
|
|
|
Удалить сессию и все её процессы
|
|
|
:param sid: id сессии
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def serv_pid_info(cls, sid, pid):
|
|
|
"""
|
|
|
Получить информацию о процессе
|
|
|
:param sid: id сессии
|
|
|
:param pid: id процесса
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def del_pid_from_sid_pid(cls, pid):
|
|
|
"""
|
|
|
Удалить информацию о процессе из sid_pid файла
|
|
|
:param pid: id процесса
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def add_sid_pid(cls, sid, pid):
|
|
|
"""
|
|
|
Добавить запись соответивия процесса сессии
|
|
|
:param sid: id сессии
|
|
|
:param pid: id процесса
|
|
|
:return:
|
|
|
"""
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
|
class MethodsInterface(object):
|
|
|
clVars = DataVars()
|
|
|
method_name = None
|
|
|
|
|
|
def applyTemplates(self, *args, **kw):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def dispatchConf(self, *args, **kw):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def pauseProcess(self):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def resumeProcess(self):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def writeFile(self):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def setProgress(self, perc, short_message=None, long_message=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def setStatus(self, stat):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def setData(self, dat):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def getStatus(self):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def getProgress(self):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def getAnswer(self):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def addProgress(self, message=""):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def printTable(self, table_name, head, body, fields=None,
|
|
|
onClick=None, addAction=None, step=None,
|
|
|
records=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def addMessage(self, type='normal', message=None, id=None,
|
|
|
onlyShow='', default=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def printSUCCESS(self, message='', onlyShow=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def printPre(self, message='', onlyShow=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def printDefault(self, message='', onlyShow=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def printWARNING(self, message, onlyShow=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def printERROR(self, message='', onlyShow=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def startTask(self, message, progress=False, num=1):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def setTaskNumber(self, number=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def endTask(self, result=None, progress_message=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def askConfirm(self, message, default="yes"):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def isInteractive(self):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def askChoice(self, message, answers=(("yes", "Yes"), ("no", "No"))):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def askQuestion(self, message):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def askPassword(self, message, twice=False):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def beginFrame(self, message=None):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def endFrame(self):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def startGroup(self, message):
|
|
|
raise NotImplementedError
|
|
|
|
|
|
def endGroup(self):
|
|
|
raise NotImplementedError
|