예제 #1
0
    def init(self,
             title=u'',
             label=u'',
             default_txt=u'',
             mask=u'',
             reg_exp=r''):
        """
        Инициализация диалогового окна.
        @param title: Заголовок диалогового окна.
        @param label: Текст сообщения.
        @param default_txt: Строка заполняемая по умолчанию.
        @param mask: Маска.
        @param reg_exp: Регулярное выражение.
        """
        # Проверка входных параметров
        if default_txt is None:
            default_txt = u''

        self.edit_text = u''

        self.SetTitle(title)
        self.label_staticText.SetLabelText(label)
        log.debug(u'Установка значения по умолчанию <%s> для редактирования' %
                  default_txt)
        self.masked_textCtrl.SetMaskParameters(mask=mask, validRegex=reg_exp)
        # ВНИМАНИЕ! Установка значения м.б. только после
        # установки парамеров маски.
        # SetValue производит дополнительный контроль значения
        self.masked_textCtrl.SetValue(default_txt)
예제 #2
0
    def read_value(self, address):
        """
        Чтение значения по адресу.
        @param address: Адрес значения в узле.
        @return: Запрашиваемое значение или None в случае ошибки чтения.
        """
        opc = None

        opc_host = self.getHost()
        opc_server = self.getOPCServer()
        topic = self.getTopic()

        try:
            # Создание клиента OPC
            opc = self.connect(opc_host)
            if opc is None:
                return None

            # Прочитать из OPC сервера
            val = opc.read(address)
            result = val[0] if val and val[1] == 'Good' else None

            self.disconnect(opc)

            log.debug(u'Адрес <%s>. Результат чтения данных %s' %
                      (address, result))
            return result
        except:
            self.disconnect()
            log.fatal(u'Ошибка чтения значения по адресу <%s> в <%s>' %
                      (address, self.__class__.__name__))
        return None
예제 #3
0
    def GetAssociateFld(self, key, fld_name):
        """
        Возвращает значение определенного поля ассоциации.
        
        @type key: C{tuple}
        @param key: Ключ объекта в словаре.
        @type fld_name: C{string}
        @param fld_name: Имя поля.
        """
        if key in self._model:
            vals = self._model[key][0]

            #   Определяем индекс поля
            try:
                indx = list(self.assc_val).index(fld_name)
                value = vals[indx]
                log.debug(u'>>> IN GetAssociateFld FIND FIELD Value = %s' %
                          value)
                return value
            except:
                log.error(
                    u'>>> fld_name value ERROR in GetAssociateFld fld_name: %s'
                    % fld_name)
                log.fatal(u'>>> asscDict = %s' % self._model)

        return None
예제 #4
0
    def addPage(self, Page_, Title_, Select_=False, Image_=None, not_dublicate=True):
        """
        Добавить страницу.
        @param Page_: Страница-объект наследник wx.Window.
        @param Title_: Заголовок страницы.
        @param Select_: Выбирается по умолчанию эта страница?
        @param Image_: Файл образа или сам образ в заголовке страницы.
        @param not_dublicate: Не открывать страницу с таким же именем?
        """
        if Page_ is None:
            log.warning(u'Не определена страница для добавления в главный нотебук')
            return

        if not_dublicate:
            # Запретить открытие страницы с таким же заголовком
            page_titles = [page['title'] for page in self.getPages()]
            if Title_ in page_titles:
                msg = u'Страница <%s> уже открыта' % Title_
                log.warning(msg)
                Page_.Destroy()
                ic_dlg.icWarningBox(u'ВНИМАНИЕ!', msg)
                return None

        # У объекта страницы поменять хозяина
        # Чтобы органайзер синхронно переразмеривался с главным окном
        if Page_.GetParent() != self:
            log.debug(u'Смена родителя <%s> страницы <%s>' % (Page_.GetParent(), Page_.__class__.__name__))
            Page_.Reparent(self)
        return self.AddPage(Page_, Title_, Select_, Image_)
예제 #5
0
    def updateValues(self):
        """
        Обновить значения контролов.
        """
        try:
            log.debug(u'Старт процедуры обновления значений контролов')
            obj_addresses = self.get_panel_obj_addresses()
            # obj_addresses_names = [ctrl.getName() for ctrl, address in obj_addresses]
            # log.debug(u'Список обрабатываемых контролов %s' % obj_addresses_names)

            for ctrl, address in obj_addresses:
                engine_name, obj_name = address
                engine = self.findSCADAEngine(engine_name)
                if engine:
                    obj = engine.FindObjectByName(obj_name)
                    if obj:
                        value = obj.getCurValue()
                        # ctrl = self.FindObjectByName(ctrlname)
                        ctrl.setValue(value)
                    else:
                        log.warning(u'Объект <%s> не найден в движке <%s>' %
                                    (obj_name, engine_name))
            log.debug(u'Конец процедуры обновления значений контролов')
        except:
            log.fatal(
                u'Ошибка обновления значений контролов формы SCADA системы')
예제 #6
0
    def start(self, update_panels=None):
        """
        Запуск основного цикла обработки тегов.
        @param update_panels: Принудительно обновить панели.
            Может задаваться как списком так и объектом.
        @return: True/False.
        """
        self.init_scan_objects()

        self.exit_run = False
        thread.start_new(self.run, ())

        # Ожидание запуска движка
        start_time = time.time()
        stop_time = start_time + ENGINE_START_TIMEOUT
        cur_time = time.time()

        log.debug(u'Начало ожидания запуска')
        while not self.is_running and cur_time < stop_time:
            cur_time = time.time()
        log.debug(u'Окончание ожидания запуска. Ожидание %s секунд.' %
                  (cur_time - start_time))

        # После удачного запуска движка принудительно обновить панели вызывающие их
        self.update_panels(update_panels)

        return self.is_running
예제 #7
0
    def __init__(self, parent, Context_=None, ProjectRoot_=None):
        """
        Конструктор интерфейса.
        """
        #   Вызываем конструктор базового класса
        icobjectinterface.icObjectInterface.__init__(self, parent, resource)

        try:
            viewer = self.GetNameObj('view_treectrl')
            if Context_ is None:
                Context_ = ic_user.getKernel().GetContext()
            variables = self._contextConvert(Context_)
            viewer.LoadTree(variables)
        except:
            log.error(
                u'Ошибка инициализации дерева просмотра хранилища переменных.')

        self._project_root = ProjectRoot_
        if self._project_root:
            try:
                env_grid = self.GetNameObj('env_grid')
                env_dict = self._project_root.prj_res_manager.getPrjEnv()
                env_list = env_dict.items()
                env_list.sort()
                log.debug('Environment list: <%s>' % env_list)
                env_grid.setTable(env_list)
            except:
                log.error(
                    u'Ошибка инициализации грида редактирования дополнительных атрибутов проекта.'
                )
예제 #8
0
 def onBtn(event):
     values = {'m_checkBox1': True, 'm_spinCtrl1': 3, 'm_textCtrl2': u'www'}
     result = quick_entry_edit_dlg(btn, u'Тестовое окно',
                                   quick_entry_panel_class=testPanel,
                                   defaults=values)
     log.debug(u'Результат: %s' % str(result))
     event.Skip()
예제 #9
0
파일: std_dlg.py 프로젝트: XHermitOne/defis
def getDateRangeDlg(parent=None, is_concrete_date=False):
    """
    Выбор периода по датам в диалоговом окне.
    @param parent: Родительское окно. Если не определено, то
        береться wx.GetApp().GetTopWindow()
    @param is_concrete_date: Вкл. режим ввода конкретной даты?
    @return: Кортеж периода по датам (datetime) или None если нажата <отмена>.
    """
    selected_range = None

    if parent is None:
        parent = wx.GetApp().GetTopWindow()

    dlg = icdaterangedlg.icDateRangeDialog(parent)
    dlg.setConcreteDateCheck(is_concrete_date)

    dlg.Centre()

    if dlg.ShowModal() == wx.ID_OK:
        selected_range = dlg.getSelectedDateRangeAsDatetime()
    dlg.Destroy()

    if selected_range:
        try:
            log.debug(u'Выбранный диапазон дат: <%s> - <%s>' % selected_range)
        except:
            pass
    return selected_range
예제 #10
0
def lockRes(ResName_, ResFileName_, ResFileExt_, LockDir_=None):
    """
    Заблокировать ресурс.
        Имя файла блокировки гонерируется 
        как ИмяРесурса_ИмяФайлаРесурса_РасширениеФайлаРесурса.lck.
        В файл блокировки записывается информация о владельце блокировки 
        в виде словаря {'owner':Имя хоста с которого заблокировался ресурс}.
    @param ResName_: Имя ресурса. 
        Если имя ресурса None, то блокируется файл ресурса целиком.
    @param ResFileName_: Имя файла ресурса.
    @param ResFileExt_: Расширение файла ресурса/тип ресурса.    
    @param LockDir_: Папка блокировок.
    """
    if LockDir_ is None:
        LockDir_ = os.getcwd() + '/lock'
        try:
            os.makedirs(LockDir_)
        except:
            pass
    lock_filename = '%s_%s_%s%s' % (ResName_, ResFileName_, ResFileExt_,
                                    lock.LOCK_FILE_EXT)
    lock_full_filename = os.path.join(LockDir_, lock_filename)
    log.debug('LOCK_RES <%s>' % lock_full_filename)
    return lock.LockFile(lock_full_filename,
                         '{\'owner\':\'%s\'}' % lock.ComputerName())
예제 #11
0
def isLockRes(ResName_, ResFileName_, ResFileExt_, LockDir_=None):
    """
    Проверить заблокирован ли ресурс.
    @param ResName_: Имя ресурса. 
    @param ResFileName_: Имя файла ресурса.
    @param ResFileExt_: Расширение файла ресурса/тип ресурса.    
    @param LockDir_: Папка блокировок.
    """
    if LockDir_ is None:
        LockDir_ = os.getcwd() + '/lock'
        try:
            os.makedirs(LockDir_)
        except:
            pass
    lock_filename = '%s_%s_%s%s' % (ResName_, ResFileName_, ResFileExt_,
                                    lock.LOCK_FILE_EXT)
    lock_full_filename = os.path.join(LockDir_, lock_filename)

    log.debug('IS_LOCK_RES <%s>' % lock_full_filename)
    is_lock = lock.IsLockedFile(lock_full_filename)
    if is_lock:
        # Если файл блокировки есть, то
        # проверить кем он заблокирован
        is_lock = bool(
            getLockResOwner(ResName_, ResFileName_, ResFileExt_, LockDir_) !=
            lock.ComputerName())
    return is_lock
예제 #12
0
파일: ic_exec.py 프로젝트: XHermitOne/defis
def icSysCmd(sCommand):
    """
    Функция выполняет комманду системы.
    @param sCommand: Строка системной команды.
    """
    log.debug(u'Выполнение команды: <%s>' % sCommand)
    return os.system(sCommand)
예제 #13
0
    def gen_resource(self):
        """
        Генерация ресурса, соответстствующего объеку 1С.
        @return: True/False.
        """
        # Открыть проект
        prj_res_ctrl = ic.getKernel().getProjectResController()
        if prj_res_ctrl is None:
            log.warning(
                u'Не определен контроллер управления ресурсом проекта. Генерация ресурса таблицы хранения перечислений 1С не взможна.'
            )
            return False
        else:
            log.debug(u'Контроллер управления ресурсом проекта <%s>' %
                      prj_res_ctrl)
        prj_res_ctrl.openPrj()

        # Создать необходимые ресурсные файлы
        self._gen_enum_tab(prj_res_ctrl)
        self._gen_enum_spravmanager(prj_res_ctrl)
        self._gen_enum_sprav(prj_res_ctrl)

        # Добавить в таблицу значения перечислений
        self._add_values(prj_res_ctrl)

        return True
예제 #14
0
def test():
    """
    Тестовая функция
    """
    from ic import config

    log.init(config)

    db_url = DEFAULT_DB_URL
    registry = icObjRegistry(db_url, 'test_oper_obj', 'test_object')
    registry.connect()

    registry.append_obj_requisite('test_tab', 'text')
    registry.append_obj_requisite('test_num', 'int')

    registry.clear_all()

    registry.do_state(n_obj='1234', test_tab='zz', test_num=21)

    registry.do_state(n_obj='1234', test_tab='z2', test_num=3, state='STATE2')

    registry.do_state(n_obj='1234', test_tab='z0', test_num=-3, state='STATE2')

    registry.do_state(n_obj='1234', test_tab='z3', test_num=4, state='STATE3')

    registry.do_state(n_obj='1234', test_tab='z4', test_num=5, state='STATE4')

    registry.undo_state(n_obj='1234')

    log.debug(
        u'Operation record <STATE2> - %s' %
        registry.get_operation_state_record(n_obj='1234', state='STATE2'))

    registry.disconnect()
예제 #15
0
 def register_custom_editor(self, *editor_classes):
     """
     Регистрация пользовательских редакторов свойств.
     @param editors_classes: Список классов пользовательских редакторов.
     """
     if not editor_classes:
         editor_classes = CUSTOM_PROPERTY_EDITORS
     #
     # Let's use some simple custom editor
     #
     # NOTE: Editor must be registered *before* adding a property that
     # uses it.
     if not getattr(sys, '_PropGridEditorsRegistered', False):
         for editor_class in editor_classes:
             if editor_class:
                 log.debug(
                     u'Регистрация пользовательского редактора свойства <%s>'
                     % editor_class.__name__)
                 editor_class.setPropertyEditManager(self)
                 self.RegisterEditor(editor_class)
             else:
                 log.warning(
                     u'Не определен пользовательский редактор свойства в редакторе ресурса'
                 )
         # ensure we only do it once
         sys._PropGridEditorsRegistered = True
예제 #16
0
 def create(self, parent=None, *arg, **kwarg):
     """
     Создание выбранного объекта.
     """
     if ic_mode.isDebugMode():
         log.debug('CREATE Object <%s>' % self.passport())
     kernel = ic_user.getKernel()
     if kernel:
         if 'context' in kwarg:
             if isinstance(kwarg['context'], dict):
                 # В случае если передается контекст в виде словаря
                 # необходимо создать объект контекста
                 context = icwidget.icResObjContext(kernel)
                 context.update(kwarg['context'])
             else:
                 # Контекст создаваемому объекту передается явно
                 context = kwarg['context']
             del kwarg['context']
         else:
             # Надо определить контекст
             context = icwidget.icResObjContext(kernel)
         return kernel.Create(self.passport(),
                              parent,
                              context=context,
                              *arg,
                              **kwarg)
예제 #17
0
    def read_values(self, addresses):
        """
        Чтение значений по адресам.
        @param addresses: Список адресов значений в узле.
        @return: Список запрашиваемых значений или None в случае ошибки чтения.
        """
        opc = None

        opc_host = self.getHost()
        opc_server = self.getOPCServer()
        topic = self.getTopic()

        try:
            # Создание клиента OPC
            opc = self.connect(opc_host)
            if opc is None:
                return None

            # Прочитать из OPC сервера
            values = opc.read(addresses)
            result = [
                val[1] if val and val[2] == 'Good' else None for val in values
            ]

            self.disconnect(opc)

            log.debug(u'Адреса %s. Результат чтения данных %s' %
                      (addresses, result))
            return result
        except:
            self.disconnect()
            log.fatal(u'Ошибка чтения значения по адресам %s в <%s>' %
                      (addresses, self.__class__.__name__))
        return None
예제 #18
0
    def get(self, parent=None, *arg, **kwarg):
        """
        Получить объект. Если не зарегистрирован в ядре, то создать его.
        """
        if ic_mode.isDebugMode():
            log.debug('GET Object <%s>' % self.passport())
        kernel = ic_user.getKernel()
        if kernel:
            # Проверить зарегистрирован ли уже объект в ядре
            name = self.passport()[0][1]
            obj = kernel.getObject(name)
            if obj:
                # Если уже зарегистрирован, то просто вернуть его
                return obj

            if 'context' in kwarg:
                if isinstance(kwarg['context'], dict):
                    # В случае если передается контекст в виде словаря
                    # необходимо создать объект контекста
                    context = icwidget.icResObjContext(kernel)
                    context.update(kwarg['context'])
                else:
                    # Контекст создаваемому объекту передается явно
                    context = kwarg['context']
                del kwarg['context']
            else:
                # Надо определить контекст
                context = icwidget.icResObjContext(kernel)
            return kernel.Create(self.passport(),
                                 parent,
                                 context=context,
                                 *arg,
                                 **kwarg)
예제 #19
0
 def gen_resources(self, metaobjects):
     """
     Генерация ресурсов, соответствующих метаобъектам 1С.
     @return:
     """
     log.debug(u'Запуск генерации ресурсов')
     for metaobject in metaobjects:
         metaobject.gen_resource()
예제 #20
0
 def get_interval_colors(self):
     """
     Цвета секторов мажорной шкалы.
     """
     self.evalSpace['self'] = self
     interval_colors = self.eval_attr('interval_colors')[1]
     log.debug(u'Speedmeter. Interval colors <%s>' % interval_colors)
     if interval_colors is None:
         interval_colors = list()
     return interval_colors
예제 #21
0
 def get_user_property_editor(value, pos, size, style, propEdt, *arg,
                              **kwarg):
     """
     Стандартная функция для вызова пользовательских редакторов свойств (EDT_USER_PROPERTY).
     """
     if value:
         parent = propEdt
         res = icpassportchoice.icPassportChoiceDlg(parent)
         log.debug(u'passport = %s' % res)
         return str(res)
예제 #22
0
 def Update(self, bAsk=False):
     """
     Обновление объектов, работающих с данным.
     """
     for obj in self.evalSpace['_has_source'].values():
         try:
             obj.Update(bAsk=bAsk)
             log.debug(u'Update Object: type=<%s>, name=<%s>' % (obj.type, obj.name))
         except:
             log.fatal(u'Ошибка обновления объектов диалоговогоокна, работающих с данными')
예제 #23
0
 def get_intervals(self):
     """
     Мажорная шкала в градусах.
     """
     self.evalSpace['self'] = self
     intervals = self.eval_attr('intervals')[1]
     log.debug(u'Speedmeter. Intervals <%s>' % intervals)
     if intervals is None:
         intervals = list()
     return intervals   
예제 #24
0
파일: io_prnt.py 프로젝트: XHermitOne/defis
def outDevice(msg, Device_=IC_CONSOLE):
    """
    Вывод на устройство регистрации специальных сообщений.
    @type msg: C{string}
    @param msg: Сообщение об ошибке.
    @type Device_: C{int}
    @param Device_: Указание устройства вывода.
    """
    if Device_ & IC_CONSOLE:
        try:
            print(msg)
        except:
            return False

    if Device_ & IC_CONSOLE_INFO:
        try:
            log.info(msg)
        except:
            return False

    if Device_ & IC_CONSOLE_ERR:
        try:
            log.error(msg)
        except:
            return False

    if Device_ & IC_CONSOLE_WARN:
        try:
            log.warning(msg)
        except:
            return False

    if Device_ & IC_CONSOLE_DBG:
        try:
            log.debug(msg)
        except:
            return False

    if Device_ & IC_FILE:
        try:
            log_file = None
            log_file = open(IC_LOG_FILE_DEFAULT, 'w+')
            log_file.write(msg)
            log_file.close()
        except:
            if log_file:
                log_file.close()
            return False
    if Device_ & IC_MSG_INFO:
        import ic.dlg
        ic.dlg.ic_dlg.icMsgBox(u'ВНИМАНИЕ', msg)
    if Device_ & IC_MSG_ERR:
        import ic.dlg
        ic.dlg.ic_dlg.icErrBox(u'ОШИБКА', msg)
    return True
예제 #25
0
    def onOnAllButtonClick(self, event):
        """
        Обработчик включения всех элементов.
        """
        log.debug(u'Включение всех элементов')
        record_idx = self.getItemSelectedIdx(self.browse_panel.record_listCtrl)
        self.records[record_idx][ON_ITEMS_KEY] = self.records[record_idx].get(OFF_ITEMS_KEY, list())
        self.records[record_idx][OFF_ITEMS_KEY] = list()
        self.refreshItems(record_idx, self.records[record_idx])

        event.Skip()
예제 #26
0
 def onDelToolClicked(self, event):
     """
     Обработчик инструмента <Удалить тег>
     """
     selected_idx = self.getItemSelectedIdx(self.tags_listCtrl)
     if selected_idx >= 0:
         tag_name = self.tags_listCtrl.GetItemText(selected_idx)
         log.debug(u'Удален тег <%s>' % tag_name)
         del self.tags[tag_name]
         self.update_tags(**self.tags)
     event.Skip()
예제 #27
0
 def on_changed(self, event):
     """
     Перед открытием этой страницы.
     """
     # Построить список метаобъектов конфигурации 1с для компонента выбора
     wizard = self.GetParent()
     cf_analyzer = wizard.getCFAnalyzer()
     log.debug(u'Запуск анализатора папки конфигурации <%s>' %
               wizard.environment['cf_dir'])
     cf_obj_lst = cf_analyzer.createCFList(wizard.environment['cf_dir'])
     log.debug(u'Загрузка дерева метаобъектов')
     self.cf_tree_list_ctrl.LoadTree(cf_obj_lst, is_progress=True)
예제 #28
0
 def convertColGroupKey(GROUP_KEY):
     """
     Преобразовать данный ключ группы в строку заголовка группы колонки.
     @param GROUP_KEY: Ключ группы.
     """
     result = util.ic_eval(get_grp_title, evalSpace=locals())
     try:
         log.debug(u'Определение заголовка группы колонки <%s>. Результат <%s>' % (column['name'],
                                                                                   result))
     except:
         pass
     return result[1]
예제 #29
0
 def getColGroupKey(RECORD):
     """
     Получить ключ группы колонки.
     @param RECORD: Словарь записи.
     """
     result = util.ic_eval(get_grp_key, evalSpace=locals())
     try:
         log.debug(u'Определение ключа группы колонки <%s>. Результат <%s>' % (column['name'],
                                                                               result))
     except:
         pass
     return result[1]
예제 #30
0
 def get_user_property_editor(value, pos, size, style, propEdt, *arg,
                              **kwarg):
     """
     Стандартная функция для вызова пользовательских редакторов свойств (EDT_USER_PROPERTY).
     """
     if value:
         parent = propEdt
         value = icObjectPassportListUserEdt.str_to_val_user_property(
             value, propEdt)
         res = icpassportchoice.icPassportListDlg(parent, None, value)
         log.debug(u'passports = %s' % res)
         return str(res)