Пример #1
0
    def __init__(self, handle):
        activity.Activity.__init__(self, handle)
        self.test_cover = False
        self.chosen_test_id = None
        
        self.data_path = os.path.join(self.get_activity_root(), "data")
        self.instance_path = os.path.join(self.get_activity_root(), "instance")
        self.test_path = os.path.join(self.data_path, "test.xml")
        self.questions_path = os.path.join(self.data_path, "questions.tar.bz2")
        self.answers_path = os.path.join(self.data_path, "answers.xml")
        self.server_settings_path = os.path.join(self.instance_path, "settings.txt")
        try:
            fin = open(self.server_settings_path, 'rw')
            self.server = fin.read()
            fin.close()
        except:
            self.server = 'localhost:8000'
        
        self.set_title("Test client")
        self.alerts_list = []

        # pasek narzędziowy
        toolbox = activity.ActivityToolbox(self)
        activity_toolbar = toolbox.get_activity_toolbar()

        # usuniecie niepotrzebnych przycisków
        activity_toolbar.share.props.visible = False
        activity_toolbar.keep.props.visible = False
        #activity_toolbar.stop.props.visible = False
        tool_item = gtk.ToolItem()
        lab_settings = gtk.Label('Adres Serwera: ')
        tool_item.add(lab_settings)
        lab_settings.show()
        activity_toolbar.insert(tool_item, 4)
        tool_item.show()
        
        tool_item = gtk.ToolItem()
        self.server_entry = gtk.Entry()
        self.server_entry.set_size_request(200,25)
        self.server_entry.set_text(self.server)
        tool_item.add(self.server_entry)
        self.server_entry.show()
        activity_toolbar.insert(tool_item, 5)
        tool_item.show()
        
        save_button = ToolButton("dialog_ok")
        save_button.set_tooltip("Zapisz")
        save_button.connect("clicked", self.save_server)
        tool_item = gtk.ToolItem()
        tool_item.add(save_button)
        save_button.show()
        activity_toolbar.insert(tool_item, 6)
        tool_item.show()
        

        # dodanie paska dla testów
        self.test_toolbar = TestToolbar(self)
        toolbox.add_toolbar("Test", self.test_toolbar)
        self.test_toolbar.show()
        
        # dodanie paska do przeglądania testów na serwerze
        self.browse_toolbar = BrowseToolbar(self)
        toolbox.add_toolbar("Przeglądaj testy", self.browse_toolbar)
        self.browse_toolbar.show()
        
#        self.settings_toolbar = SettingsToolbar(self)
#        toolbox.add_toolbar("Ustawienia", self.test_toolbar)
#        self.settings_toolbar.show()
        self.set_toolbox(toolbox)
        
        toolbox.show()
Пример #2
0
class KnutActivity(activity.Activity):	

    def __init__(self, handle):
        activity.Activity.__init__(self, handle)
        self.test_cover = False
        self.chosen_test_id = None
        
        self.data_path = os.path.join(self.get_activity_root(), "data")
        self.instance_path = os.path.join(self.get_activity_root(), "instance")
        self.test_path = os.path.join(self.data_path, "test.xml")
        self.questions_path = os.path.join(self.data_path, "questions.tar.bz2")
        self.answers_path = os.path.join(self.data_path, "answers.xml")
        self.server_settings_path = os.path.join(self.instance_path, "settings.txt")
        try:
            fin = open(self.server_settings_path, 'rw')
            self.server = fin.read()
            fin.close()
        except:
            self.server = 'localhost:8000'
        
        self.set_title("Test client")
        self.alerts_list = []

        # pasek narzędziowy
        toolbox = activity.ActivityToolbox(self)
        activity_toolbar = toolbox.get_activity_toolbar()

        # usuniecie niepotrzebnych przycisków
        activity_toolbar.share.props.visible = False
        activity_toolbar.keep.props.visible = False
        #activity_toolbar.stop.props.visible = False
        tool_item = gtk.ToolItem()
        lab_settings = gtk.Label('Adres Serwera: ')
        tool_item.add(lab_settings)
        lab_settings.show()
        activity_toolbar.insert(tool_item, 4)
        tool_item.show()
        
        tool_item = gtk.ToolItem()
        self.server_entry = gtk.Entry()
        self.server_entry.set_size_request(200,25)
        self.server_entry.set_text(self.server)
        tool_item.add(self.server_entry)
        self.server_entry.show()
        activity_toolbar.insert(tool_item, 5)
        tool_item.show()
        
        save_button = ToolButton("dialog_ok")
        save_button.set_tooltip("Zapisz")
        save_button.connect("clicked", self.save_server)
        tool_item = gtk.ToolItem()
        tool_item.add(save_button)
        save_button.show()
        activity_toolbar.insert(tool_item, 6)
        tool_item.show()
        

        # dodanie paska dla testów
        self.test_toolbar = TestToolbar(self)
        toolbox.add_toolbar("Test", self.test_toolbar)
        self.test_toolbar.show()
        
        # dodanie paska do przeglądania testów na serwerze
        self.browse_toolbar = BrowseToolbar(self)
        toolbox.add_toolbar("Przeglądaj testy", self.browse_toolbar)
        self.browse_toolbar.show()
        
#        self.settings_toolbar = SettingsToolbar(self)
#        toolbox.add_toolbar("Ustawienia", self.test_toolbar)
#        self.settings_toolbar.show()
        self.set_toolbox(toolbox)
        
        toolbox.show()
        
    def save_server(self, widget=None, data=None):
        """
        Zapisuje ustawienia serwera
        """
        server = self.server_entry.get_text()
        if server:
            if server.find('http://') == -1:
                server = 'http://' + server
            fout = open(self.server_settings_path, 'w')
            self.server = server
            fout.write(server)
            fout.close()
            self.show_alert(title="Edycja ustawień testu %s" % self.test_id, msg="Zapisano adres serwera")            
        
    def get_test_bt(self, widget=None, data=None, check_pass=True):
        self.clear_alerts()
        try:
            if self.chosen_test_id:
                self.test_id = self.chosen_test_id
                self.chosen_test_id = None
                self.test_pass = self.browse_toolbar.pass_entry.get_text()
            else:
                self.test_pass = self.test_toolbar.pass_entry.get_text()
                self.test_id = self.test_toolbar.test_entry.get_text()
            #sprawdzenie czy istnieje
            if check_pass and not self.test_pass:
                self.show_alert(title="Pobieranie testu %s" % self.test_id, msg="Hasło jest wymagane")
            elif not self.test_id:
                self.show_alert(title="Pobieranie testu %s" % self.test_id, msg="Pole z Id testu jest wymagane")
            else:
                self.user_name = profile.get_nick_name()
                self.test_pass = self.test_pass
                values = {'test-id': self.test_id,
                        'test-password': self.test_pass,
                        'user-name': self.user_name}
                data = urllib.urlencode(values)
                url = self.server + '/questions_download/'
                req = urllib2.Request(url, data)
                response = urllib2.urlopen(req)
                
                questions_file = open(self.questions_path, "w")
                questions_file.write(response.fp.read())
                questions_file.close()
                
                questions_file = tarfile.open(self.questions_path,"r")
                questions_file.extractall(path=self.data_path)
                os.remove(self.questions_path)
                
                
                
#                user_name = profile.get_nick_name()
#                test_pass = self.test_toolbar.pass_entry.get_text()
#                body_list = ["--%s--"%boundary,"Content-Disposition: form-data; name=test-id", "", self.test_id, "--%s--"%boundary,
#                             "Content-Disposition: form-data; name=test-password", "", test_pass, "--%s--"%boundary,
#                             "Content-Disposition: form-data; name=user_name", "", user_name, "--%s--"%boundary]
#                body = "\r\n".join(body_list)
#                headers = {"Content-Type": "multipart/form-data; boundary=%s"%boundary, "Content-Length": str(len(body))}
#                connection = httplib.HTTPConnection(self.server)
#                connection.request("POST","/questions_download/", body, headers)
#                response = connection.getresponse()
#                if response.reason != "OK":
#                    print response.reason
#                    print response.read()
#                
#                questions_file = open(self.questions_path, "w")
#                questions_file.write(response.fp.read())
#                questions_file.close()
#                
#                connection = httplib.HTTPConnection(self.server)
#                connection.request("POST","/answers_download/", body, headers)
#                response = connection.getresponse()
#                if response.reason != "OK":
#                    print response.reason
#                    print response.read()
#                
#                answers_response = response.fp.read()
#                answers_file = open(self.answers_path, "w")
#                answers_file.write(answers_response)
#                answers_file.close()
#                
#                #wypakowanie testu
#                questions_file = tarfile.open(self.questions_path,"r")
#                questions_file.extractall(path=self.data_path)
#                os.remove(self.questions_path)
                
                self.show_alert(title="Pobieranie testu %s" % self.test_id, msg="Pobieranie testu zakończone sukcesem, kliknij ok aby kontynuować", start_test=True)
                #urlretrieve(url+"test.zip", zip_path)
                #xmlschema_doc = etree.parse("kvml.xsd")
                #
                ##os.chdir(self.handle.instance_path)
                ##os.popen("unzip -o test.zip", "r")
                #
                #f_test = file(self.handle.test_path)
                #if (f_test.readline() == "Nie odnaleziono pliku"):
                #    msg = "Nie udało się pobrać testu"
                #    f_test.close()
                #else:
                #    f_test.close()
                    
                    ##walidacja przy użyciu XMLSchema
                    #xmlschema = etree.XMLSchema(xmlschema_doc)
                    #test_doc = etree.parse(file(self.handle.test_path))
                    #if xmlschema.validate(test_doc):
                    #    msg = "Test pobrany poprawnie"
                    #    self.handle.test_cover = True
                    #else:
                    #    msg = "Pobrany test nie jest zgodny ze standardem"
        except:
            self._logger = logging.getLogger('activity-knut')
            self._logger.setLevel(logging.DEBUG)
            #First log handler: outputs to a file  
            file_handler = logging.FileHandler('/home/wiktor/code/knut.log')
            file_formatter = logging.Formatter('%(message)s')
            file_handler.setFormatter(file_formatter)
            self._logger.addHandler(file_handler)
            self._logger.exception('Pobieranie testu')
            self.show_alert(title="Pobieranie testu %s" % self.test_id, msg="Nie udało się pobrać testu, skontaktuj się z nauczycielem")
                   
    def show_alert(self, title='', msg='', start_test = False):
        alert = Alert()
        alert.props.title = title
        alert.props.msg = msg
        alert.add_button(gtk.RESPONSE_OK, '  OK  ')
        alert.connect('response', self.alert_response_cb, start_test)
        self.add_alert(alert)
        self.alerts_list.append(alert)
        alert.show()
        
    def clear_alerts(self):
        for alert in self.alerts_list:
            self.remove_alert(alert)

    def alert_response_cb(self, alert, response_id, start_test=''):
        self.remove_alert(alert)
        if start_test:
            self.test=testrunner.RunTest(self)
          
    def alert_get_test_response(self, widget=None, data=None):
        self.remove_alert(widget)
        self.read_test()