This commit is contained in:
		@@ -1,6 +1,7 @@
 | 
				
			|||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import wx
 | 
					import wx
 | 
				
			||||||
 | 
					import wx.gizmos
 | 
				
			||||||
import wx.propgrid as wxpg
 | 
					import wx.propgrid as wxpg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ID_TEST             = wx.NewId()
 | 
					ID_TEST             = wx.NewId()
 | 
				
			||||||
@@ -25,9 +26,12 @@ class MainFrame (wx.Frame):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        bSizer4 = wx.BoxSizer(wx.VERTICAL)
 | 
					        bSizer4 = wx.BoxSizer(wx.VERTICAL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.m_user_models = wx.TreeCtrl(self,
 | 
					        self.m_user_models = wx.gizmos.TreeListCtrl(self,
 | 
				
			||||||
            style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT | wx.TR_EDIT_LABELS)
 | 
					            style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT | wx.TR_EDIT_LABELS)
 | 
				
			||||||
        self.m_user_models.SetMinSize(wx.Size(-1,200))
 | 
					        self.m_user_models.SetMinSize(wx.Size(-1,200))
 | 
				
			||||||
 | 
					        self.m_user_models.AddColumn("Model name")
 | 
				
			||||||
 | 
					        self.m_user_models.AddColumn("Status")
 | 
				
			||||||
 | 
					        self.m_user_models.AddColumn("Progress")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bSizer4.Add(self.m_user_models, 0, wx.ALL|wx.EXPAND, 1)
 | 
					        bSizer4.Add(self.m_user_models, 0, wx.ALL|wx.EXPAND, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -38,8 +42,8 @@ class MainFrame (wx.Frame):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        bSizer3.Add(bSizer4, 1, wx.EXPAND, 5)
 | 
					        bSizer3.Add(bSizer4, 1, wx.EXPAND, 5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.m_job_list = wx.ListCtrl(self, style = wx.LC_LIST)
 | 
					        self.m_job_list = wx.ListBox(self)#, style = wx.LC_LIST)
 | 
				
			||||||
        self.m_job_list.SetMinSize(wx.Size(150,-1))
 | 
					        self.m_job_list.SetMinSize(wx.Size(200,-1))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bSizer3.Add(self.m_job_list, 0, wx.ALL|wx.EXPAND, 1)
 | 
					        bSizer3.Add(self.m_job_list, 0, wx.ALL|wx.EXPAND, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										121
									
								
								trunk/opal.py
									
									
									
									
									
								
							
							
						
						
									
										121
									
								
								trunk/opal.py
									
									
									
									
									
								
							@@ -16,6 +16,10 @@ import task
 | 
				
			|||||||
import wx
 | 
					import wx
 | 
				
			||||||
import wx.propgrid as wxpg
 | 
					import wx.propgrid as wxpg
 | 
				
			||||||
import forms
 | 
					import forms
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					import datetime
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import threading
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#-----------------------------------------------------------------------------
 | 
					#-----------------------------------------------------------------------------
 | 
				
			||||||
# Главная форма
 | 
					# Главная форма
 | 
				
			||||||
@@ -25,27 +29,71 @@ class MainFrame(forms.MainFrame):
 | 
				
			|||||||
    def __init__(self):
 | 
					    def __init__(self):
 | 
				
			||||||
        forms.MainFrame.__init__(self, None)
 | 
					        forms.MainFrame.__init__(self, None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        s = server.LocalServer()
 | 
					        self.server = s = server.LocalServer()
 | 
				
			||||||
        s.LoadTasksDescriptions()
 | 
					        self.server.LoadTasksDescriptions()
 | 
				
			||||||
        ds = s.GetTasksDescriptions()
 | 
					        ds = s.GetTasksDescriptions()
 | 
				
			||||||
        models = []
 | 
					        models = []
 | 
				
			||||||
        for d in ds:
 | 
					        for d in ds:
 | 
				
			||||||
            models.extend(d.GetModelsDescriptions())
 | 
					            models.extend(d.GetModelsDescriptions())
 | 
				
			||||||
 | 
					 | 
				
			||||||
        model = models[0]
 | 
					        model = models[0]
 | 
				
			||||||
 | 
					        s.Start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.m_user_models.Bind(wx.EVT_TREE_ITEM_ACTIVATED,
 | 
					        self.m_user_models.Bind(wx.EVT_TREE_SEL_CHANGED,
 | 
				
			||||||
            self.OnModelActivated)
 | 
					            self.OnModelActivated)
 | 
				
			||||||
        self.m_params.Bind(wxpg.EVT_PG_CHANGING,
 | 
					        self.m_params.Bind(wxpg.EVT_PG_CHANGING,
 | 
				
			||||||
            self.OnParamChanging)
 | 
					            self.OnParamChanging)
 | 
				
			||||||
 | 
					        self.m_params.Bind(wxpg.EVT_PG_CHANGED,
 | 
				
			||||||
 | 
					            self.OnParamChanged)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.Bind(wx.EVT_MENU, self.OnTest, id = forms.ID_TEST)
 | 
					        self.Bind(wx.EVT_MENU, self.OnTest, id = forms.ID_TEST)
 | 
				
			||||||
        self.Bind(wx.EVT_MENU, self.OnDuplicate, id = forms.ID_DUPLICATE)
 | 
					        self.Bind(wx.EVT_MENU, self.OnDuplicate, id = forms.ID_DUPLICATE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.Bind(wx.EVT_CLOSE, self.OnClose)
 | 
				
			||||||
 | 
					        self.Bind(wx.EVT_IDLE, self.OnIdle)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.m_params.AddPage('fp')
 | 
					        self.m_params.AddPage('fp')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ov = threading.Thread(target = self.Overseer)
 | 
				
			||||||
 | 
					        ov.daemon = 1
 | 
				
			||||||
 | 
					        ov.start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.NewProject(model)
 | 
					        self.NewProject(model)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def OnClose(self, event):
 | 
				
			||||||
 | 
					        self.server.Stop()
 | 
				
			||||||
 | 
					        self.Destroy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # todo1 вменяемый цикл обхода!
 | 
				
			||||||
 | 
					    def Overseer(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def SeeTheItem(item):
 | 
				
			||||||
 | 
					            um = self.m_user_models
 | 
				
			||||||
 | 
					            md = um.GetPyData(item)
 | 
				
			||||||
 | 
					            print um.GetItemText(item)
 | 
				
			||||||
 | 
					            job = md.job
 | 
				
			||||||
 | 
					            if job:
 | 
				
			||||||
 | 
					                t = os.path.basename(job.taskd.execpath)
 | 
				
			||||||
 | 
					                p = job.percent * 100
 | 
				
			||||||
 | 
					                print t, p
 | 
				
			||||||
 | 
					                um.SetItemText(item, '{}: {:.2F}%'.format(t, p), 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            child, cookie = um.GetFirstChild()
 | 
				
			||||||
 | 
					            while child.IsOk():
 | 
				
			||||||
 | 
					                SeeTheItem(child)
 | 
				
			||||||
 | 
					                child, cookie = um.GetNextChild(child, cookie)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #try:
 | 
				
			||||||
 | 
					            server = self.server
 | 
				
			||||||
 | 
					            while True:
 | 
				
			||||||
 | 
					                print 'cycle'
 | 
				
			||||||
 | 
					                um = self.m_user_models
 | 
				
			||||||
 | 
					                item = um.GetFirstVisibleItem()
 | 
				
			||||||
 | 
					                SeeTheItem(item)
 | 
				
			||||||
 | 
					                time.sleep(0.5)
 | 
				
			||||||
 | 
					        #except:
 | 
				
			||||||
 | 
					        #    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def NewProject(self, project):
 | 
					    def NewProject(self, project):
 | 
				
			||||||
        # 1. загрузить спецификации модели
 | 
					        # 1. загрузить спецификации модели
 | 
				
			||||||
        # 2. создать одну модель по умолчанию
 | 
					        # 2. создать одну модель по умолчанию
 | 
				
			||||||
@@ -54,10 +102,33 @@ class MainFrame(forms.MainFrame):
 | 
				
			|||||||
        root    = um.AddRoot('')
 | 
					        root    = um.AddRoot('')
 | 
				
			||||||
        data    = task.DataDefinition(model)
 | 
					        data    = task.DataDefinition(model)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        child   = um.AppendItem(root, u'Обычная')
 | 
					        child   = um.AppendItem(root, 'Default')
 | 
				
			||||||
        um.SetPyData(child, data)
 | 
					        um.SetPyData(child, data)
 | 
				
			||||||
 | 
					        um.SetItemText(child, '234', 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def SelectUserModel(self, model_def):
 | 
					    def SelectUserModel(self, model_def):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def SelectProperty(param_type):
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					            По указанному имени типа возвращает "свойство" для списка "свойств"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Смотри руководство пользователя для того, чтобы получить полную
 | 
				
			||||||
 | 
					            информацию о всех типах данных, используемых в Opal.
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					            if param_type == 'bool':
 | 
				
			||||||
 | 
					                return wxpg.BoolProperty
 | 
				
			||||||
 | 
					            elif param_type == 'int':
 | 
				
			||||||
 | 
					                return wxpg.IntProperty
 | 
				
			||||||
 | 
					            elif param_type == 'float' or param_type == 'double':
 | 
				
			||||||
 | 
					                return wxpg.FloatProperty
 | 
				
			||||||
 | 
					            elif param_type == 'string':
 | 
				
			||||||
 | 
					                return wxpg.StringProperty
 | 
				
			||||||
 | 
					            elif param_type == 'list':
 | 
				
			||||||
 | 
					                return wxpg.ArrayStringProperty
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                # очень плохо, если это произошло
 | 
				
			||||||
 | 
					                raise KeyError()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        msg = model_def.PackParams()
 | 
					        msg = model_def.PackParams()
 | 
				
			||||||
        pg = self.m_params
 | 
					        pg = self.m_params
 | 
				
			||||||
        pg.ClearPage(0)
 | 
					        pg.ClearPage(0)
 | 
				
			||||||
@@ -65,26 +136,43 @@ class MainFrame(forms.MainFrame):
 | 
				
			|||||||
        for k, v in model_def.params.iteritems():
 | 
					        for k, v in model_def.params.iteritems():
 | 
				
			||||||
            p = model_def.DD[k]
 | 
					            p = model_def.DD[k]
 | 
				
			||||||
            title = p.GetTitle() or k
 | 
					            title = p.GetTitle() or k
 | 
				
			||||||
            pid = pg.Append(wxpg.StringProperty(title, value=str(v)))
 | 
					            prop = SelectProperty(p.GetType())
 | 
				
			||||||
 | 
					            pid = pg.Append(prop(title, value = v))
 | 
				
			||||||
            pg.SetPropertyClientData(pid, k)
 | 
					            pg.SetPropertyClientData(pid, k)
 | 
				
			||||||
            pg.SetPropertyHelpString(pid, p.GetComment())
 | 
					            pg.SetPropertyHelpString(pid, p.GetComment())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        pd = model_def.PackParams()
 | 
				
			||||||
 | 
					        self.SetStatusText(pd, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def OnModelActivated(self, event):
 | 
					    def OnModelActivated(self, event):
 | 
				
			||||||
        item = event.GetItem()
 | 
					        item = event.GetItem()
 | 
				
			||||||
        data = self.m_user_models.GetPyData(item)
 | 
					        data = self.m_user_models.GetPyData(item)
 | 
				
			||||||
        self.SelectUserModel(data)
 | 
					        if data:
 | 
				
			||||||
 | 
					            self.SelectUserModel(data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def OnParamChanging(self, event):
 | 
					    def OnParamChanging(self, event):
 | 
				
			||||||
        value = event.GetValue()
 | 
					        #value = event.GetValue()
 | 
				
			||||||
        print repr(value)
 | 
					        #print repr(value)
 | 
				
			||||||
        #wx.MessageBox(value, 'changing')
 | 
					        #wx.MessageBox(value, 'changing')
 | 
				
			||||||
        #event.Veto()
 | 
					        #event.Veto()
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def OnParamChanged(self, event):
 | 
				
			||||||
 | 
					        prop = event.GetProperty()
 | 
				
			||||||
 | 
					        if not prop:
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        value = prop.GetValue()
 | 
				
			||||||
 | 
					        param = prop.GetClientData()
 | 
				
			||||||
 | 
					        um = self.m_user_models
 | 
				
			||||||
 | 
					        id = um.GetSelection()
 | 
				
			||||||
 | 
					        md = um.GetItemPyData(id)
 | 
				
			||||||
 | 
					        md[param] = value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def OnTest(self, event):
 | 
					    def OnTest(self, event):
 | 
				
			||||||
        um = self.m_user_models
 | 
					        um = self.m_user_models
 | 
				
			||||||
        id = um.GetSelection()
 | 
					        id = um.GetSelection()
 | 
				
			||||||
        md = um.GetItemPyData(id)
 | 
					        md = um.GetItemPyData(id)
 | 
				
			||||||
        wx.MessageBox(md.PackParams())
 | 
					        #wx.MessageBox(md.PackParams())
 | 
				
			||||||
        md.Flush()
 | 
					        md.Flush()
 | 
				
			||||||
        #wx.MessageBox('test')
 | 
					        #wx.MessageBox('test')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -97,7 +185,18 @@ class MainFrame(forms.MainFrame):
 | 
				
			|||||||
        child = um.AppendItem(parent, title + ' Copy')
 | 
					        child = um.AppendItem(parent, title + ' Copy')
 | 
				
			||||||
        um.SetPyData(child, md.Copy())
 | 
					        um.SetPyData(child, md.Copy())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def OnIdle(self, event):
 | 
				
			||||||
 | 
					##        server = self.server
 | 
				
			||||||
 | 
					##        self.m_job_list.Freeze()
 | 
				
			||||||
 | 
					##        self.m_job_list.Clear()
 | 
				
			||||||
 | 
					##        with server.queue_lock:
 | 
				
			||||||
 | 
					##            for j in server.jobs_queue:
 | 
				
			||||||
 | 
					##                t = os.path.dirname(j.taskd.execpath)
 | 
				
			||||||
 | 
					##                p = j.percent * 100.0
 | 
				
			||||||
 | 
					##                self.m_job_list.Append('{}: {:.2}%'.format(t, p))
 | 
				
			||||||
 | 
					##        self.m_job_list.Thaw()
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					        #time.sleep(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#-----------------------------------------------------------------------------
 | 
					#-----------------------------------------------------------------------------
 | 
				
			||||||
# Приложение
 | 
					# Приложение
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@ import time
 | 
				
			|||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
import threading
 | 
					import threading
 | 
				
			||||||
import subprocess
 | 
					import subprocess
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import task
 | 
					import task
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -42,11 +43,10 @@ class LocalServer:
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
    def __init__(self):
 | 
					    def __init__(self):
 | 
				
			||||||
        self.max_workers = 2
 | 
					        self.max_workers = 2
 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.task_descrs = []
 | 
					        self.task_descrs = []
 | 
				
			||||||
        self.jobs_queue = []
 | 
					        self.jobs_queue = []
 | 
				
			||||||
        self.log = None
 | 
					        self.log = None
 | 
				
			||||||
 | 
					        self.running = False
 | 
				
			||||||
        self.queue_lock = threading.Lock()
 | 
					        self.queue_lock = threading.Lock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # init actions
 | 
					        # init actions
 | 
				
			||||||
@@ -54,11 +54,8 @@ class LocalServer:
 | 
				
			|||||||
        self.log = open('log.txt', 'w')
 | 
					        self.log = open('log.txt', 'w')
 | 
				
			||||||
        self.WriteToLog('local server initialized')
 | 
					        self.WriteToLog('local server initialized')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for i in xrange(2):
 | 
					 | 
				
			||||||
            worker = Worker(self.jobs_queue, self.queue_lock)
 | 
					 | 
				
			||||||
            worker.start()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def Close(self):
 | 
					    def Close(self):
 | 
				
			||||||
 | 
					        self.Stop()
 | 
				
			||||||
        self.WriteToLog('local server closed\n')
 | 
					        self.WriteToLog('local server closed\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __del__(self):
 | 
					    def __del__(self):
 | 
				
			||||||
@@ -71,10 +68,13 @@ class LocalServer:
 | 
				
			|||||||
        print msg
 | 
					        print msg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def Start(self):
 | 
					    def Start(self):
 | 
				
			||||||
        pass
 | 
					        self.running = True
 | 
				
			||||||
 | 
					        for i in xrange(self.max_workers):
 | 
				
			||||||
 | 
					            worker = Worker(self.jobs_queue, self.queue_lock, self.running)
 | 
				
			||||||
 | 
					            worker.start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def Stop(self):
 | 
					    def Stop(self):
 | 
				
			||||||
        pass
 | 
					        self.running = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def TestTaskData(self, data):
 | 
					    def TestTaskData(self, data):
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
@@ -133,10 +133,11 @@ class LocalServer:
 | 
				
			|||||||
class Worker(threading.Thread):
 | 
					class Worker(threading.Thread):
 | 
				
			||||||
    number = 0
 | 
					    number = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, queue, lock):
 | 
					    def __init__(self, queue, lock, runflag):
 | 
				
			||||||
        threading.Thread.__init__(self)
 | 
					        threading.Thread.__init__(self)
 | 
				
			||||||
        self.queue = queue
 | 
					        self.queue = queue
 | 
				
			||||||
        self.lock = lock
 | 
					        self.lock = lock
 | 
				
			||||||
 | 
					        self.runflag = runflag
 | 
				
			||||||
        self.daemon = True
 | 
					        self.daemon = True
 | 
				
			||||||
        WriteToLog('worker started')
 | 
					        WriteToLog('worker started')
 | 
				
			||||||
        self.id = Worker.number
 | 
					        self.id = Worker.number
 | 
				
			||||||
@@ -154,13 +155,15 @@ class Worker(threading.Thread):
 | 
				
			|||||||
        # и, если нашли, приступаем к выполнению
 | 
					        # и, если нашли, приступаем к выполнению
 | 
				
			||||||
        if job:
 | 
					        if job:
 | 
				
			||||||
            WriteToLog("{} started!".format(self.id))
 | 
					            WriteToLog("{} started!".format(self.id))
 | 
				
			||||||
            job.Start()
 | 
					            job.Start(self.runflag)
 | 
				
			||||||
            WriteToLog("{} finished!".format(self.id))
 | 
					            WriteToLog("{} finished!".format(self.id))
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            time.sleep(1)
 | 
					            time.sleep(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def run(self):
 | 
					    def run(self):
 | 
				
			||||||
        while True:
 | 
					        while True:
 | 
				
			||||||
 | 
					            if not self.runflag:
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
            self.Cycle()
 | 
					            self.Cycle()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#-------------------------------------------------------------------------------
 | 
					#-------------------------------------------------------------------------------
 | 
				
			||||||
@@ -170,6 +173,7 @@ JOB_BUSY      = 1
 | 
				
			|||||||
JOB_RUNNING   = 2
 | 
					JOB_RUNNING   = 2
 | 
				
			||||||
JOB_STOPPED   = 3
 | 
					JOB_STOPPED   = 3
 | 
				
			||||||
JOB_COMPLETED = 4
 | 
					JOB_COMPLETED = 4
 | 
				
			||||||
 | 
					JOB_DROPPED   = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Job:
 | 
					class Job:
 | 
				
			||||||
    def __init__(self, taskd, datadump):
 | 
					    def __init__(self, taskd, datadump):
 | 
				
			||||||
@@ -204,7 +208,7 @@ class Job:
 | 
				
			|||||||
        self.comment = data.get('comment', '')
 | 
					        self.comment = data.get('comment', '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def Start(self):
 | 
					    def Start(self, runflag):
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            self.state = JOB_RUNNING
 | 
					            self.state = JOB_RUNNING
 | 
				
			||||||
            execpath = self.taskd.execpath
 | 
					            execpath = self.taskd.execpath
 | 
				
			||||||
@@ -223,6 +227,10 @@ class Job:
 | 
				
			|||||||
                    msg  = ostream.readline()
 | 
					                    msg  = ostream.readline()
 | 
				
			||||||
                    #msg = msg.strip()
 | 
					                    #msg = msg.strip()
 | 
				
			||||||
                    self.ProcessMsg(msg)
 | 
					                    self.ProcessMsg(msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if not runflag:
 | 
				
			||||||
 | 
					                        self.Stop()
 | 
				
			||||||
 | 
					                # todo вписать исключения, которые относятся к JSON & dict
 | 
				
			||||||
                except Exception, e:
 | 
					                except Exception, e:
 | 
				
			||||||
                    #WriteToLog('Income msg failed: ' + str(e))
 | 
					                    #WriteToLog('Income msg failed: ' + str(e))
 | 
				
			||||||
                    pass
 | 
					                    pass
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@
 | 
				
			|||||||
            "params": {
 | 
					            "params": {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                "r": {
 | 
					                "r": {
 | 
				
			||||||
                    "type":     "double",
 | 
					                    "type":     "float",
 | 
				
			||||||
                    "default":  6.28,
 | 
					                    "default":  6.28,
 | 
				
			||||||
                    "title":    "Right edge",
 | 
					                    "title":    "Right edge",
 | 
				
			||||||
                    "comment":  "Right edge"
 | 
					                    "comment":  "Right edge"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -81,7 +81,7 @@ def main():
 | 
				
			|||||||
                res.append([l, y])
 | 
					                res.append([l, y])
 | 
				
			||||||
                write(answer(round(l / r, 2)))
 | 
					                write(answer(round(l / r, 2)))
 | 
				
			||||||
                l += h
 | 
					                l += h
 | 
				
			||||||
                time.sleep(0.5)
 | 
					                time.sleep(0.2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            write(result(res))
 | 
					            write(result(res))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user