Пример #1
0
    def FilePicker_compareScenariosOnFileChanged(self, event):
        valid_extension = ['xlsx']
        self.path = self.FilePicker_compareScenarios.GetPath()
        if not (self.path.split('.')[-1] in valid_extension):
            message = msg_somethigWrong(None,
                                        msg="Please select a valid Excel File")
            message.ShowModal()
            return
        print 'This is working just fine...'
        print self.path
        book2 = load_workbook(self.path)
        # bring all the checks below to up here?
        sheetnames = [
            "ChangeInTopology", "ChangeInMetadata_Topology",
            "ChangeInMetadata_Attributes", "ChangeInValues"
        ]
        for name in sheetnames:
            if not name in book2.sheetnames:
                book2.close()
                message = msg_somethigWrong(
                    None, msg="Please select a valid Excel File")
                message.ShowModal()
                return

        book2.close()
Пример #2
0
    def btn_yesOnButtonClick(self, event):
        conn = DB_Setup()
        if conn.get_session():
            conn.close_db()

            if not conn.get_session():

                topframe = wx.GetApp().GetTopWindow()
                topframe.SetTitle(topframe.GetTitle().split(':')[0])

                self.disconnectResult = True
                from Messages_forms.msg_infos import msg_infos
                msg_infos(topframe,
                          msg='\nDatabase disconnected successfully\n\n"' +
                          define.dbName +
                          '" session has been disconnected').Show()

            else:
                from Messages_forms.msg_somethigWrong import msg_somethigWrong
                msg_somethigWrong(None,
                                  msg='"' + define.dbName +
                                  '"database disconnection failed').Show()

        else:
            from Messages_forms.msg_somethigWrong import msg_somethigWrong
            msg_somethigWrong(None,
                              msg='No "' + define.dbName +
                              '" Connection Found').Show()
        self.Close()
Пример #3
0
 def btn_testOnButtonClick(self, event):
     """
     Used to test the connection given the user's credentials
     :param event: 
     :return: 
     """
     error = self.evaluator()
     if error:
         msg_somethigWrong(self.topframe, '\n\n' + error).Show()
     else:
         from Messages_forms.msg_connSQLiteSuccs import msg_connSQLiteSuccs
         msgdlg = msg_connSQLiteSuccs(self.topframe)
         msgdlg.setMessage(u"\n\nSuccessful connection to mysql db with name \'" + self.db_name + u"\'" +
                           u"\n\n Please click the button \'connect and save connection\'")
         msgdlg.Show()
Пример #4
0
    def check_validation(self):
        # Check whether user select needed item correctly
        from viewer.Messages_forms.generalMsgDlg import messageDlg
        msg = ""
        if self.path is None or self.path == "":
            msg = "Warning!\n Please select a valid wml file."
        elif self.wml_str is None or self.wml_str == "":
            msg = "Warning!\n The selected file could not be opened. Please select a valid wml file."
        if msg != "":
            instance = messageDlg(None)
            instance.setMessage(msg)
            instance.ShowModal()
            instance.Destroy()
            return False
    #///////////////////////////////////////////////////////////////////////#

    # Check whether Sqlite db is connected.
        setup = DB_Setup()
        if not setup.get_session():
            message = msg_somethigWrong(
                None,
                msg=
                '\n\n\nError, No Database connection found, Please first connect to a database.'
            )
            message.ShowModal()
            return False

    #///////////////////////////////////////////////////////////////////////#

        return True
    def check_validation(self):
        # Check whether user select needed items correctly
        from viewer.Messages_forms.generalMsgDlg import messageDlg
        msg = ""
        if self.comboBox_Code.Value is None or self.comboBox_Code.Value == "":
            msg = "Warning!\n'Site Code' field can not be empty. Please provide CUAHSI Site Code."
        elif self.comboBox_VariableCode.Value is None or self.comboBox_VariableCode.Value == "":
            msg = "Warning!\n'Variable Code' field can not be empty. Please provide CUAHSI Variable Code."
        elif self.m_textCtrl24.Value is None or self.m_textCtrl24.Value == "":
            msg = "Warning!\n'Time Series Begin Date' field can not be empty. Please provide Time Series Begin Date [yyyy-mm-dd]."
        elif self.m_textCtrl25.Value is None or self.m_textCtrl25.Value == "":
            msg = "Warning!\n'Time Series End Date' field can not be empty. Please provide Time Series End Date [yyyy-mm-dd]."
        if msg != "":
            instance = messageDlg(None)
            instance.setMessage(msg)
            instance.ShowModal()
            instance.Destroy()
            return False
    #///////////////////////////////////////////////////////////////////////#

    # Check whether Sqlite db is connected.
        setup = DB_Setup()
        if not setup.get_session():
            message = msg_somethigWrong(
                None,
                msg=
                '\n\n\nError, No Database Found, Please first connect to a database.'
            )
            message.ShowModal()
            return False

    #///////////////////////////////////////////////////////////////////////#

        return True
Пример #6
0
 def test_db_conn(self):
     setup = DB_Setup()
     if not setup.get_session():
         message = msg_somethigWrong(
             None,
             msg=
             '\n\n\nError, No database Found. Please first connect to a database.'
         )
         message.Show()
         return False
     return True
    def write2excel(self, resutl_list, startRow, sheet):
        try:
            for row_id, row in enumerate(resutl_list):
                for col_id, cell in enumerate(row):
                    sheet.cell(row=row_id + startRow,
                               column=col_id + 1,
                               value=cell)

        except Exception as e:
            print e
            messageDlg = msg_somethigWrong(None, msg=e.message)
            messageDlg.Show()
            raise Exception(e.message)
Пример #8
0
    def btn_connectOnButtonClick(self, event):
        error = self.evaluator()
        if error:
            msg_somethigWrong(self.topframe, '\n\n' + error).Show()
            return

        else:
            setup = DB_Setup()

            # test if the user is already connected to a database, if so, user is asked to disconnect
            if setup.get_session():
                msg_somethigWrong(None, msg='\n\nError: You are already connected to a database. \n\n to use another'
                                            ' database, you need to disconnect from the current one').Show()
                return

            # connects to mysql database given the sql_string
            setup.connect('', db_type='mysql', sql_string=self.sql_string)

            self.topframe.SetTitle(self.topframe.GetTitle() + ' ::: You are connected to MySQL DB ' + self.db_name)

            from Messages_forms.msg_connSQLiteSuccs import msg_connSQLiteSuccs
            msgdlg = msg_connSQLiteSuccs(self.topframe)
            msgdlg.setMessage(u"\n\nSuccessfully connected to mysql db with name \'" + self.db_name + u"\'")
            msgdlg.Show()

            # Create WaMDaMVersion table and fills it the version number declared in define.py file
            obj_cat = SqlAlchemy.WaMDaMVersion()

            try:
                qeury = setup.get_session().query(SqlAlchemy.WaMDaMVersion).first().VersionNumber
            except:
                obj_cat.VersionNumber = define.version
                setup.push_data(obj_cat)
                setup.add_data()

            self.Close()
    def btn_RetrieveDataOnButtonClick(self, event):
        from suds.client import Client

        # self.m_textCtrl22.Value = 'NWISUV:10105900'
        # self.m_textCtrl23.Value = 'NWISUV:00060'
        # self.m_textCtrl24.Value = '2016-10-20'
        # self.m_textCtrl25.Value = '2016-11-06'

        # Check whether user select needed items correctly
        validation_check = self.check_validation()
        if not validation_check:
            return

        # Create the inputs needed for the web service call //daily values
        wsdlURL = 'http://hydroportal.cuahsi.org/nwisdv/cuahsi_1_1.asmx?WSDL'

        # siteCode = self.m_textCtrl22.Value #'NWISUV:10105900'
        # variableCode = self.m_textCtrl23.Value #'NWISUV:00060'

        siteCode = self.comboBox_Code.Value  #'NWISUV:10105900'
        variableCode = self.comboBox_VariableCode.Value  #'NWISUV:00060'
        beginDate = self.m_textCtrl24.Value  #'2016-10-20'
        endDate = self.m_textCtrl25.Value  #'2016-11-06'

        #siteCode= NWISUV:10039500 for BEAR RIVER AT BORDER, WY
        # variableCode NWISDV:00060/DataType=Mean for Discharge, cubic feet per second

        # Create a new object named "NWIS" for calling the web service methods
        NWIS = Client(wsdlURL).service

        # Call the GetValuesObject method to return datavalues
        try:
            self.response = NWIS.GetValuesObject(siteCode, variableCode,
                                                 beginDate, endDate)
        except Exception as e:
            message = msg_somethigWrong(
                None,
                msg=
                '\n\n\nError, The provided values do not have data in the server.\nPlease make sure to enter correct values.'
            )
            message.ShowModal()
            return

        self.btn_Load.Enabled = True

        # Get the site's name from the response
        siteName = self.response.timeSeries[0].sourceInfo.siteName
Пример #10
0
    def FilePicker_SpreadsheetOnFileChanged(self, event):
        valid_extension = ['xlsx', 'xlsm']
        self.path = self.FilePicker_Spreadsheet.GetPath()
        self.selectedExcelFileName = self.path.split('\\')[-1]

        if not (self.path.split('.')[-1] in valid_extension):
            self.Destroy()
            if define.logger != None:
                define.logger.error("A non excel file was selected, \n\n"
                                    " Please select a valid Excel File")
            message = msg_somethigWrong(
                None,
                msg="A non excel file was selected, \n\n"
                " Please select a valid Excel File")
            message.Show()
        else:
            if define.logger != None:
                define.logger.info("'" + self.selectedExcelFileName +
                                   "'was selected.\n")
Пример #11
0
    def FilePicker_RwiseFileOnFileChanged(self, event):
        # TODO: Implement FilePicker_RwiseFileOnFileChanged
        valid_extension = ['wml']
        self.path = self.FilePicker_RwiseFile.GetPath()
        self.selectedWmlFileName = self.path.split('\\')[-1]

        if not (self.path.split('.')[-1] in valid_extension):
            self.Destroy()
            if define.logger != None:
                define.logger.error("A non wml file was selected, \n\n"
                                    " Please select a valid wml File")
            message = msg_somethigWrong(None,
                                        msg="A non wml file was selected, \n\n"
                                        " Please select a valid wml File")
            message.Show()
        else:
            if define.logger != None:
                define.logger.info("'" + self.selectedWmlFileName +
                                   "'was selected.\n")
 def __init__(self, parent):
     WaMDaMWizard.dlg_ExportScenarioDataToExcel.__init__(self, parent)
     self.path = ''
     try:
         if not DB_Setup().get_session():
             msg = "\n\nWarning: Please connect to sqlite first."
             raise Exception(msg)
         ''' init combo model'''
         self.dataStructure = GetResourceStructure()
         self.datasets = self.dataStructure.GetResourceType()
         list_acromy = list()
         for index, row in self.datasets.iterrows():
             list_acromy.append(row[0])
         if list_acromy.__len__() > 0:
             self.comboBox_selectModel.SetItems(list_acromy)
     except Exception as e:
         message = msg_somethigWrong(None, msg=e.message)
         message.Show()
         self.Destroy()
Пример #13
0
    def __init__(self, parent):
        WaMDaMWizard.dlg_compare_scenarios.__init__(self, parent)

        self.path = ''
        try:
            if not self.checkConnectingToSqlite():
                msg = "\n\nWarning: Please connect to sqlite first."
                raise Exception(msg)
            ''' init model combobox'''
            self.dataStructure = GetResourceStructure()
            self.instances = GetInstancesBySenario()
            self.datasets = self.dataStructure.GetResourceType()
            self.compareScenarios = GetComapreScenarios()

            list_acromy = list()
            for index, row in self.datasets.iterrows():
                list_acromy.append(row["ResourceTypeAcronym"])
            if list_acromy.__len__() > 0:
                self.comboBox_selectModel.SetItems(list_acromy)
        except Exception as e:
            message = msg_somethigWrong(None, msg=e.message)
            message.ShowModal()
            self.Destroy()
Пример #14
0
    def check_validation(self):
        # Check whether user select needed items correctly
        from viewer.Messages_forms.generalMsgDlg import messageDlg
        msg = ""
        if self.comboBox_State.Value == None or self.comboBox_State.Value == "":
            msg = "Warning!\n'State' field can not be empty. Please select a state."
        elif self.comboBox_PlanningBasin.Value == None or self.comboBox_PlanningBasin.Value == "":
            msg = "Warning!\n'Planing Basin' field can not be empty. Please select a planing basin."
        elif self.comboBox_year1.Value == None or self.comboBox_year1.Value == "":
            msg = "Warning!\n'Year' field can not be empty. Please select begining year."
        elif self.comboBox_year2.Value == None or self.comboBox_year2.Value == "":
            msg = "Warning!\n'Year' field can not be empty. Please select end year."
        elif int(self.comboBox_year1.Value) > int(self.comboBox_year2.Value):
            msg = "Warning!\n'End Year' must be more than 'Begining Year'. Please select again."
        if msg != "":
            instance = messageDlg(None)
            instance.setMessage(msg)
            instance.ShowModal()
            instance.Destroy()
            return False
    #///////////////////////////////////////////////////////////////////////#

    # Check whether Sqlite db is connected.
        setup = DB_Setup()
        if not setup.get_session():
            message = msg_somethigWrong(
                None,
                msg=
                '\n\n\nError, No Database connection found, Please first connect to a database.'
            )
            message.ShowModal()
            return False

    #///////////////////////////////////////////////////////////////////////#

        return True
    def btn_Export_ScenarioDataOnButtonClick(self, event):
        selectedDataset = self.comboBox_selectModel.Value
        selectedMasterNetworkName = self.comboBox_selectNetwork.Value
        selectedScenarioName = self.comboBox_selectScenario.Value

        # Check whether user select needed items correctly
        message = ''
        if (selectedDataset == None or selectedDataset == ''):
            message = 'Select the resource type (e.g, model name) in WamDam.'
        elif selectedMasterNetworkName == None or selectedMasterNetworkName == '':
            message = 'Select the MasterNetworkName.'
        elif selectedScenarioName == None or selectedScenarioName == '':
            message = 'Select the ScenarioName.'
        elif not ['xls', 'xlsx', 'xlsm', 'xls'].__contains__(
                self.path.split('.')[-1]):
            message = 'Please provide a directory for the output excel file.'
        if message != '':
            messageDlg = msg_somethigWrong(None, msg=message)
            messageDlg.ShowModal()
            return

        print 'this is done'

        try:
            self.btn_Export_ScenarioData.Enabled = False
            exportTemplate = ExportTemplate(self.path)

            ####################################################

            # Rescour Type structure

            ####################################################

            ResourceType_Result_df = GetResourceStructure()
            ObjectTypes_Result_df = GetResourceStructure()
            Attributes_Result_df = GetResourceStructure()

            resources_result = ResourceType_Result_df.GetResourceType(
                selectedDataset)
            data_result = ObjectTypes_Result_df.GetObjectTypesByResource(
                selectedDataset)
            exportTemplate.exportResourcesType(resources_result, data_result)

            # data_result = ObjectTypes_Result_df.GetObjectTypesByResource(selectedDataset)
            # exportTemplate.exportObjecttypes(data_result)

            attributes_result = Attributes_Result_df.GetAttributesByResource(
                selectedDataset)
            print "Count of attrs data: {}".format(str(len(attributes_result)))
            exportTemplate.exportAttributes(attributes_result)

            ####################################################

            # Metadata

            ####################################################

            Organizations_Result_df = GetMetadataByScenario()
            People_Result_df = GetMetadataByScenario()
            Sources_Result_df = GetMetadataByScenario()
            Methods_Result_df = GetMetadataByScenario()

            organization_result = Organizations_Result_df.GetOrganizationsByScenario(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            exportTemplate.exportOrganizations(organization_result)

            people_result = People_Result_df.GetPeopleByScenario(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            exportTemplate.exportPeople(people_result)

            source_result = Sources_Result_df.GetSourcesByScenario(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            exportTemplate.exportSources(source_result)

            method_result = Methods_Result_df.GetMethodsByScenario(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            exportTemplate.exportMethods(method_result)

            ####################################################

            # Instances

            ####################################################
            Network_Result_df = GetInstancesBySenario()
            Scenarios_Result_df = GetInstancesBySenario()
            Nodes_Result_df = GetInstancesBySenario()
            Links_Result_df = GetInstancesBySenario()

            network_data_result = Network_Result_df.GetMasterNetworks(
                selectedDataset)
            exportTemplate.exportMasterNetwork(network_data_result)

            scenarios_data_result = Scenarios_Result_df.GetScenarios(
                selectedDataset, selectedMasterNetworkName)
            exportTemplate.exportScenario(scenarios_data_result)

            nodes_data_result = Nodes_Result_df.GetNodesByScenario(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            print "Count of Nodes data: {}".format(str(len(nodes_data_result)))
            exportTemplate.exportNodes(nodes_data_result)

            links_data_result = Links_Result_df.GetLinksByScenario(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            print "Count of links data: {}".format(str(len(links_data_result)))
            exportTemplate.exportLinkes(links_data_result)

            print 'Good'
            ####################################################

            # Data Values

            ####################################################

            NumericValues_Result_df = GetAllValuesByScenario()
            CategoricalValues_Result_df = GetAllValuesByScenario()
            TextFreeValues_Result_df = GetAllValuesByScenario()
            SeasonalNumericValues_Result_df = GetAllValuesByScenario()
            TimeSeries_Result_df = GetAllValuesByScenario()
            TimeSeriesValues_Result_df = GetAllValuesByScenario()
            MultiColumns_Result_df = GetAllValuesByScenario()

            Numeric_result_list = NumericValues_Result_df.GetAllNumericValues(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            print "Count of Numeric data: {}".format(
                str(len(Numeric_result_list)))
            exportTemplate.exportNumericValue(Numeric_result_list)

            result_list = CategoricalValues_Result_df.GetAllCategoricalValues(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            print "Count of Categorical data: {}".format(str(len(result_list)))
            exportTemplate.exportCategoricalValues(result_list)

            result_list = TextFreeValues_Result_df.GetAllTextFree(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            print "Count of TextFree data: {}".format(str(len(result_list)))
            exportTemplate.exportFreeText(result_list)

            result_list = SeasonalNumericValues_Result_df.GetAllSeasonalNumericValues(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            print "Count of SeasonalNumeric data: {}".format(
                str(len(result_list)))
            exportTemplate.exportSeasonal(result_list)

            result_list = TimeSeries_Result_df.GetAllTimeSeries(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            print "Count of Timeseries data: {}".format(str(len(result_list)))
            exportTemplate.exportTimeSeries(result_list)

            result_list = TimeSeriesValues_Result_df.GetAllTimeSeriesValues(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)

            result_list['DateTimeStamp'] = pd.to_datetime(
                result_list.DateTimeStamp).apply(
                    lambda x: x.strftime('%m/%d/%Y'))

            print "Count of Timeseriesvalues data: {}".format(
                str(len(result_list)))
            exportTemplate.exportTimeSeriesValues(result_list)

            # multiple columns

            up_table_column_result, bottom_table_result = MultiColumns_Result_df.GetAllMultiAttributeSeries(
                selectedDataset, selectedMasterNetworkName,
                selectedScenarioName)
            exportTemplate.exportMulti(up_table_column_result,
                                       bottom_table_result)

            from Messages_forms.msg_successLoadDatabase import msg_successLoadDatabase
            instance = msg_successLoadDatabase(None)
            instance.m_staticText1.SetLabel(
                "Successfully exported the data into the Excel template")
            instance.ShowModal()
            self.btn_Export_ScenarioData.Enabled = True
            self.Destroy()
        except Exception as e:
            messageDlg = msg_somethigWrong(None, msg=e.message)
            messageDlg.Show()
            self.btn_Export_ScenarioData.Enabled = True
Пример #16
0
    def load_data(self):
        def metaData(msgDlg):
            define.logger.info("Start metaData load.")
            try:
                instance = LoadMetaData(obj)
                instance.load_data()
                msgDlg.guage.SetValue(3)
                define.logger.info("MetaData load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed metaData load.\n' + e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle("Sorry: something went wrong")
                # message.setMessage('{} \n\n [*] Could not Load MetaData'.format(e))
                # message.Show()
                raise Exception(e.message)

        def cvData(msgDlg):
            define.logger.info("Start cvData load.")
            try:
                instance = Load_CV_To_DB(obj)
                instance.load_data()
                msgDlg.guage.SetValue(2)
                define.logger.info("CvData load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed cvData load.\n' + e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load DataValues Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        def structData(msgDlg):
            define.logger.info("Start structData load.")
            try:
                instance = Load_Struct_To_DB(obj)
                instance.load_data(struct_sheets_ordered)
                msgDlg.guage.SetValue(4)
                define.logger.info(
                    "StructData load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed structData load.\n' + e.message)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load Structure Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        def networksData(msgDlg):
            define.logger.info("Start networksData load.")
            try:
                instance = Load_Networks_Data(obj)
                instance.load_data()
                msgDlg.guage.SetValue(5)
                define.logger.info(
                    "NetworksData load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed network Data load.\n' + e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load Network Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        def descriptorValues(msgDlg):
            define.logger.info("Start Categorical Data load.")
            try:
                instance = LoadCategoricalValues(obj)
                instance.load_data()
                msgDlg.guage.SetValue(6)
                define.logger.info(
                    "Categorical data load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed Categorical data load.\n' +
                                    e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load TextFree Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        def freeText(msgDlg):
            define.logger.info("Start textFreeData load.")
            try:
                instance = LoadFreeTextValues(obj)
                instance.load_data()
                msgDlg.guage.SetValue(7)
                define.logger.info(
                    "TextFreeData load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed textFreeData load.\n' + e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load TextFree Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        def numericValues(msgDlg):
            define.logger.info("Start paramsData load.")
            try:
                instance = LoadNumericValues(obj)
                instance.load_data()
                msgDlg.guage.SetValue(8)
                define.logger.info(
                    "ParamsData load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed paramsData load.\n' + e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load Parameters Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        def seasonalNumericValues(msgDlg):
            define.logger.info("Start seasonParamsData load.")
            try:
                instance = LoadSeasonalNumericValues(obj)
                instance.load_data()
                msgDlg.guage.SetValue(9)
                define.logger.info(
                    "SeasonParamsData load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed seasonParamsData load.\n' +
                                    e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load SeasonalParameters Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        def timeSeriesData(msgDlg):
            define.logger.info("Start timeSeriesData load.")
            try:
                instance = LoadTimeSeries(obj)
                instance.load_data()
                msgDlg.guage.SetValue(10)
                define.logger.info(
                    "TimeSeriesData load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed timeSeriesData load.\n' +
                                    e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load TimeSeriesData Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        def timeSeriesValueData(msgDlg):
            define.logger.info("Start timeSeriesValueData load.")
            try:
                instance = LoadTimeSeriesValue(obj)
                instance.load_data()
                msgDlg.guage.SetValue(10)
                define.logger.info(
                    "TimeSeriesValueData load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed TimeSeriesValueData load.\n' +
                                    e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load TimeSeriesValueData Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        def multiColumnArrayData(msgDlg):
            define.logger.info("Start MultiAttributeSeriesData load.")
            try:
                instance = LoadMultiCulumnArray(obj)
                instance.load_data()
                msgDlg.guage.SetValue(11)
                define.logger.info(
                    "MultiAttributeSeriesData load was finished successfully.\n\n"
                )
                return instance
            except Exception as e:
                define.logger.error('Failed MultiAttributeSeriesData load.\n' +
                                    e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load MultiAttributeSeries Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        def electronicFiles(msgDlg):
            define.logger.info("Start fileData load.")
            try:
                instance = LoadElectronicFiles(obj)
                instance.load_data()
                msgDlg.guage.SetValue(12)
                define.logger.info("FileData load was finished successfully.")
                return instance
            except Exception as e:
                define.logger.error('Failed fileData load.\n' + e.message)
                print(e)
                # message = messageDlg(None)
                # message.SetTitle(u"Sorry: something went wrong")
                # message.setMessage(u'{} \n\n [*] Could not Load File Data'.format(e))
                # message.Show()
                raise Exception(e.message)

        if self.path:
            obj = excel.open_workbook(self.path)
            # Write various data form db to excel file
            try:
                instance_cvData = cvData(self.msgDlg)
                instance_cvData.add_data()
                self.data_pushed_to_db.append(instance_cvData)

                if all(value is True for value in self.active):
                    instance_metaData = metaData(self.msgDlg)
                    instance_structData = structData(self.msgDlg)
                    instance_networksData = networksData(self.msgDlg)
                    instance_DescriptorValuesData = descriptorValues(
                        self.msgDlg)
                    instance_freeText = freeText(self.msgDlg)

                    instance_paramsData = numericValues(self.msgDlg)
                    instance_seasonParamsData = seasonalNumericValues(
                        self.msgDlg)
                    instance_timeSeriesData = timeSeriesData(self.msgDlg)
                    instance_timeSeriesValueData = timeSeriesValueData(
                        self.msgDlg)
                    instance_fileData = electronicFiles(self.msgDlg)
                    instance_multiColumnArrayData = multiColumnArrayData(
                        self.msgDlg)
                    pass

                elif self.active[0] and all(value is False
                                            for value in self.active[1:]):
                    instance_metaData = metaData()

                elif self.active[1] and all(value is False
                                            for value in self.active[2:]):
                    if self.active[0]:
                        instance_structData = structData(self.msgDlg)
                    else:
                        message = msg_somethigWrong(
                            None,
                            msg=
                            'Error, Structure Data Depends on MetaData, \n\n Please '
                            'check MetaData box')
                        message.Show()
                        raise Exception

                elif self.active[2] and self.active[
                        1] is False and self.active[3] is False:
                    if self.active[0]:
                        instance_networksData = networksData(self.msgDlg)
                    else:
                        message = msg_somethigWrong(
                            None,
                            msg=
                            'Error, Network Data Depends on MetaData, \n\n Please '
                            'check MetaData box')
                        message.Show()
                        raise Exception()

                elif self.active[3] and all(value is False
                                            for value in self.active[:3]):
                    # textFreeData()
                    instance_DescriptorValuesData = descriptorValues(
                        self.msgDlg)
                    instance_freeText = freeText(self.msgDlg)

                    instance_paramsData = numericValues(self.msgDlg)
                    instance_seasonParamsData = seasonalNumericValues(
                        self.msgDlg)
                    instance_timeSeriesData = timeSeriesData(self.msgDlg)
                    instance_timeSeriesValueData = timeSeriesValueData(
                        self.msgDlg)
                    instance_fileData = electronicFiles(self.msgDlg)
                    instance_multiColumnArrayData = multiColumnArrayData(
                        self.msgDlg)

                # instance_cvData.add_data()

                if all(value is True for value in self.active):
                    instance_metaData.add_data()
                    instance_structData.add_data()
                    instance_networksData.add_data()
                    instance_DescriptorValuesData.add_data()
                    instance_freeText.add_data()

                    instance_paramsData.add_data()
                    instance_seasonParamsData.add_data()
                    instance_timeSeriesData.add_data()
                    instance_timeSeriesValueData.add_data()
                    # instance_booleanData.add_data()
                    instance_fileData.add_data()
                    instance_multiColumnArrayData.add_data()
                    pass

                elif self.active[0] and all(value is False
                                            for value in self.active[1:]):
                    instance_metaData.add_data()

                elif self.active[1] and all(value is False
                                            for value in self.active[2:]):
                    if self.active[0]:
                        instance_structData.add_data()
                    else:
                        message = msg_somethigWrong(
                            None,
                            msg=
                            'Error, Data Structure Depends on MetaData, \n\n Please '
                            'check MetaData box')
                        message.Show()
                        raise Exception

                elif self.active[2] and self.active[
                        1] is False and self.active[3] is False:
                    if self.active[0]:
                        instance_networksData.add_data()
                    else:
                        message = msg_somethigWrong(
                            None,
                            msg=
                            'Error, Network Data Depends on MetaData, \n\n Please '
                            'check MetaData box')
                        message.Show()
                        raise Exception()

                elif self.active[3] and all(value is False
                                            for value in self.active[:3]):
                    # textFreeData()
                    instance_paramsData.add_data()
                    instance_seasonParamsData.add_data()
                    instance_timeSeriesData.add_data()
                    instance_timeSeriesValueData.add_data()
                    instance_fileData.add_data()
                    instance_DescriptorValuesData.add_data()
                    instance_freeText.add_data()

                    instance_multiColumnArrayData.add_data()
                # printing success message
                self.msgDlg.guage.SetValue(14)
                define.logger.info("All load was finished successfully.")
                wx.CallAfter(self.allDone)
                self.msgDlg.btn_ok.Enabled = True
                self.msgDlg.Close()

            except Exception as e:
                if e.message.startswith("The C++ part"):  # Terminate thread.
                    # Restore the Database first.
                    define.logger.info("Data loading terminated, restoring \
                        the previous database backup.")
                    DB_Setup().restore_db()
                    return
                else:  # Another exception happened
                    define.logger.error(
                        'Failed data load.\n' + e.message +
                        '\nThe loading of all data has been reverted, Please fix the error and load the file again.'
                    )
                    self.errorMsg = e
                    self.occuredError()
                    return
    def btn_connectOnButtonClick(self, event):
        topframe = wx.GetApp().GetTopWindow()
        dir_name = self.dirPicker_newDB.GetPath()
        db_name = self.m_textCtrl1.GetValue()

        # Check whether user select the file to write data correctly.
        fileCheck = False
        for root, dirs, files in os.walk(dir_name):
            for file in files:
                if file.endswith(".sqlite"):
                    if file.split('.')[0] == db_name:
                        from Messages_forms.generalMsgDlg import messageDlg
                        errMsgDlg = messageDlg(topframe)
                        errMsgDlg.SetTitle("Error")
                        errMsgDlg.setMessage(
                            "This database name already exists in this directory.\nPlease choose a different database name!")
                        errMsgDlg.ShowModal()
                        return

        # Report connecting to the db in the logfile
        define.logger = define.create_logger(db_name)
        define.logger.name = __name__
        define.logger.info("Start database connection.")

        setup = DB_Setup()
        if setup.get_session():
            define.logger.error(
                'Failed database connection.\n\n Error: You are already connected to a database. \n\n to use another'
                'database, you need to disconnect from the current one')
            msg_somethigWrong(topframe, msg='\n\n Error: You are already connected to a database. \n\n to use another'
                                        'database, you need to disconnect from the current one').Show()
            return

        if not dir_name:
            define.logger.error(
                'Failed database connection.\n\nError: Please select a directory. \n\nIf already so, try using the "other..." '
                'option in the Dir Dialog')
            msg_somethigWrong(topframe,
                              msg='\n\nError: Please select a directory. \n\nIf already so, try using the "other..." '
                                  'option in the Dir Dialog').Show()
            return

        if not db_name:
            define.logger.error('Failed database connection.\n\nError: The database name is required.')
            msg_somethigWrong(topframe, msg='\n\n\nError: The database name is required.').Show()
            return

        if len(db_name.split('.')) > 1:
            if db_name.split('.')[-1] in ['sqlite']:
                pass
            else:
                db_name += '.sqlite'
        else:
            db_name += '.sqlite'

        # Get connection with db
        db_path = os.path.join(dir_name, db_name)
        db = DB_Setup()
        db.connect(db_path, db_type='sqlite')

        # Create WaMDaMVersion table and fills it the version number declared in define.py file
        obj_cat = SqlAlchemy.WaMDaMVersion()
        obj_cat.VersionNumber = define.version
        db.push_data(obj_cat)
        db.add_data()

        topframe.SetTitle(topframe.GetTitle() + ' ::: You are connected to ' + os.path.basename(db_name))

        from Messages_forms.msg_connSQLiteSuccs import msg_connSQLiteSuccs
        msgdlg = msg_connSQLiteSuccs(topframe)
        msgdlg.setMessage(u"\n\n\n\n\n You are successfully connected to " + db_path.split('\\')[-1] + u".")
        msgdlg.Show()
        '''Report the connected db name to the logfile'''
        define.logger.info("'" + db_path.split('\\')[-1] + "'was connected successfully.\n")
        define.dbName = db_path.split('\\')[-1]
        self.Close()
Пример #18
0
    def btn_compare_scenariosOnButtonClick(self, event):
        self.btn_compare_scenarios.Enabled = False
        ''' Get selected data(Dataset, MasterNetworkName, ScenarioName1, ScenarioName2) '''
        selectedDataset = self.comboBox_selectModel.Value
        selectedMasterNetworkName = self.comboBox_selectNetwork.Value
        selectedScenarioName1 = self.comboBox_selectScenario1.Value
        selectedScenarioName2 = self.comboBox_selectScenario2.Value
        ''' Check if needed names are correctly selected '''
        message = ''
        if (selectedDataset == None or selectedDataset == ''):
            message = 'Select the model name in WamDam.'
        elif selectedMasterNetworkName == None or selectedMasterNetworkName == '':
            message = 'Select the MasterNetworkName.'
        elif selectedScenarioName1 == None or selectedScenarioName1 == '':
            message = 'Select the ScenarioName1.'
        elif selectedScenarioName2 == None or selectedScenarioName2 == '':
            message = 'Select the ScenarioName2.'
        elif not ['xlsx'].__contains__(self.path.split('.')[-1]):
            message = 'please select a valid excel file.'
        '''if warning message exists, then show msg dialog and return.'''
        if message != '':
            messageDlg = msg_somethigWrong(None, msg=message)
            messageDlg.Show()
            return
        ''' Get data for changed topology by selected scenarios'''
        resultData = self.compareScenarios.GetComapreScenarios(
            selectedDataset, selectedMasterNetworkName, selectedScenarioName1,
            selectedScenarioName2)
        unique1ResultData = self.compareScenarios.GetUniqueTopology_Scenario2(
            selectedDataset, selectedMasterNetworkName, selectedScenarioName1,
            selectedScenarioName2)
        unique2ResultData = self.compareScenarios.GetUniqueTopology_Scenario1(
            selectedDataset, selectedMasterNetworkName, selectedScenarioName1,
            selectedScenarioName2)
        commonResultData = self.compareScenarios.GetCommonTopology(
            selectedDataset, selectedMasterNetworkName, selectedScenarioName1,
            selectedScenarioName2)

        i = 0
        k = 0
        ''' in data for changed topology, pop common data '''
        for i in range(0, len(unique1ResultData)):
            unique1Data = unique1ResultData[i - k]
            j = 0
            isSame = False
            for unique2Data in unique2ResultData:
                if unique1Data[0] == unique2Data[0] and unique1Data[
                        1] == unique2Data[1] and unique1Data[2] == unique2Data[
                            2]:
                    isSame = True
                    break
                j += 1
            if isSame:
                unique1ResultData.pop(i - k)
                unique2ResultData.pop(j)
                k += 1
        ''' pop common data in union result'''
        i = 0
        k = 0
        for i in range(0, len(commonResultData)):
            unique1Data = commonResultData[i - k]
            j = 0
            isSame = False
            for unique2Data in unique2ResultData:
                if unique1Data[0] == unique2Data[0] and unique1Data[
                        1] == unique2Data[1] and unique1Data[2] == unique2Data[
                            2]:
                    isSame = True
                    break
            if not isSame:
                for unique1Data0 in unique1ResultData:
                    if unique1Data[0] == unique1Data0[0] and unique1Data[
                            1] == unique1Data0[1] and unique1Data[
                                2] == unique1Data0[2]:
                        isSame = True
                        break

            if isSame:
                commonResultData.pop(i - k)
                k += 1
        '''get changed metadata'''
        changeInMetadataList = self.compareScenarios.GetChangeInMetadata_Topology(
            selectedDataset, selectedMasterNetworkName, selectedScenarioName1,
            selectedScenarioName2)

        # print the result to this excel sheet: ChangeInMetadata_Attributes
        changeInMetadataValueList = self.compareScenarios.GetChangeInMetaValues_Attributes(
            selectedDataset, selectedMasterNetworkName, selectedScenarioName1,
            selectedScenarioName2)
        ''' init metadata'''
        changeInMetadataList_result = []

        firstScenarioCount = 0
        commonScenarioCount = 0
        secondScenarioCount = 0
        totalcount = 0

        for unique1Data in changeInMetadataList:
            j = 0
            isSame = False
            for row in changeInMetadataList_result:
                if unique1Data[0] == row[0] and unique1Data[1] == row[
                        1] and unique1Data[2] == row[2] and unique1Data[
                            3] == row[3]:
                    isSame = True
                    if unique1Data[4] != row[4]:
                        if len(changeInMetadataList_result[j]) == 12:
                            '''second senario data append'''
                            changeInMetadataList_result[j][9] = unique1Data[4]
                            changeInMetadataList_result[j][10] = unique1Data[5]
                            changeInMetadataList_result[j][11] = unique1Data[6]
                        else:
                            changeInMetadataList_result[j].append(
                                unique1Data[4])
                            changeInMetadataList_result[j].append(
                                unique1Data[5])
                            changeInMetadataList_result[j].append(
                                unique1Data[6])
                j += 1
            if not isSame:
                changeInMetadataList_result.append(unique1Data)

            firstScenarioCount = len(unique2ResultData)
            secondScenarioCount = len(unique1ResultData)
            commonScenarioCount = len(commonResultData)
            totalcount = firstScenarioCount + secondScenarioCount + commonScenarioCount
        ''' print the result to this excel sheet: ChangeInMetadata_Attributes '''

        changeInMetadataAttributeList_result = []
        for unique1Data in changeInMetadataValueList:
            j = 0
            isSame = False
            for row in changeInMetadataAttributeList_result:
                if unique1Data[0] == row[0] and unique1Data[1] == row[
                        1] and unique1Data[2] == row[2] and unique1Data[
                            3] == row[3]:
                    isSame = True
                    if unique1Data[5] != row[5]:
                        if len(changeInMetadataAttributeList_result[j]) > 11:
                            '''second senario data append'''
                            changeInMetadataAttributeList_result[j][
                                10] = unique1Data[5]
                            changeInMetadataAttributeList_result[j][
                                11] = unique1Data[6]
                            changeInMetadataAttributeList_result[j][
                                12] = unique1Data[7]
                        else:
                            changeInMetadataAttributeList_result[j].append(
                                unique1Data[5])
                            changeInMetadataAttributeList_result[j].append(
                                unique1Data[6])
                            changeInMetadataAttributeList_result[j].append(
                                unique1Data[7])
                j += 1
            if not isSame:
                changeInMetadataAttributeList_result.append(unique1Data)

        print '**************'
        try:
            if self.path.split('.')[-1] == 'xlsx':
                book2 = load_workbook(self.path)
                additionsToTopologySheet = book2["ChangeInTopology"]
                changeInMetadataToTopologySheet = book2[
                    "ChangeInMetadata_Topology"]
                changeInMetavaluesTopologySheet = book2[
                    "ChangeInMetadata_Attributes"]
                changeInValuesSheet = book2["ChangeInValues"]

                additionsToTopologySheet.cell(row=3,
                                              column=2,
                                              value=firstScenarioCount)
                additionsToTopologySheet.cell(row=3,
                                              column=5,
                                              value=commonScenarioCount)
                additionsToTopologySheet.cell(row=3,
                                              column=8,
                                              value=secondScenarioCount)
                additionsToTopologySheet.cell(
                    row=4,
                    column=2,
                    value=str(
                        round(
                            float(firstScenarioCount) /
                            float(1 if totalcount == 0 else totalcount), 3) *
                        100.0) + "%")
                additionsToTopologySheet.cell(
                    row=4,
                    column=5,
                    value=str(
                        round(
                            float(commonScenarioCount) /
                            float(1 if totalcount == 0 else totalcount), 3) *
                        100.0) + "%")
                additionsToTopologySheet.cell(
                    row=4,
                    column=8,
                    value=str(
                        round(
                            float(secondScenarioCount) /
                            float(1 if totalcount == 0 else totalcount), 3) *
                        100.0) + "%")
                rowNumber = 7
                for row_id, row in enumerate(unique2ResultData):
                    for col_id, cell in enumerate(row):
                        additionsToTopologySheet.cell(row=rowNumber,
                                                      column=col_id + 1,
                                                      value=cell)
                    rowNumber += 1

                for row_id, row in enumerate(unique1ResultData):
                    for col_id, cell in enumerate(row):
                        additionsToTopologySheet.cell(row=rowNumber,
                                                      column=col_id + 7,
                                                      value=cell)
                    rowNumber += 1

                for row_id, row in enumerate(commonResultData):
                    for col_id, cell in enumerate(row):
                        additionsToTopologySheet.cell(row=rowNumber,
                                                      column=col_id + 4,
                                                      value=cell)
                    rowNumber += 1
                i = 0

                count_first_source = 0
                count_second_source = 0
                count_first_method = 0
                count_second_method = 0
                count_common_source = 0
                count_common_method = 0

                for row_id, row in enumerate(changeInMetadataList_result):
                    # if row.__len__() < 10:
                    # 	continue
                    if row.__len__(
                    ) > 10 and row[5] == row[10] and row[6] == row[11]:
                        continue
                    for col_id, cell in enumerate(row):
                        if col_id < 4:
                            changeInMetadataToTopologySheet.cell(
                                row=i + 6, column=col_id + 1, value=cell)
                            # changeInMetavaluesTopologySheet.cell(row=i + 6, column=col_id + 1, value=cell)
                        elif col_id == 4:
                            if cell == selectedScenarioName1:
                                changeInMetadataToTopologySheet.cell(
                                    row=i + 6, column=col_id + 1, value=row[5])
                                changeInMetadataToTopologySheet.cell(
                                    row=i + 6, column=7, value=row[6])
                                # changeInMetavaluesTopologySheet.cell(row=i + 6, column=col_id + 1, value=row[5])
                                # changeInMetavaluesTopologySheet.cell(row=i + 6, column=7, value=row[6])
                                if not row[5] is None and row[5] != '':
                                    count_first_source += 1
                                if not row[6] is None and row[6] != '':
                                    count_first_method += 1
                            else:
                                changeInMetadataToTopologySheet.cell(
                                    row=i + 6, column=col_id + 2, value=row[5])
                                changeInMetadataToTopologySheet.cell(
                                    row=i + 6, column=8, value=row[6])
                                # changeInMetavaluesTopologySheet.cell(row=i + 6, column=col_id + 2, value=row[5])
                                # changeInMetavaluesTopologySheet.cell(row=i + 6, column=8, value=row[6])
                                if not row[5] is None and row[5] != '':
                                    count_second_method += 1
                                if not row[6] is None and row[6] != '':
                                    count_second_source += 1
                            # if len(row) < 10:
                            # 	break
                        elif col_id == 9:
                            if cell == selectedScenarioName1:
                                changeInMetadataToTopologySheet.cell(
                                    row=i + 6, column=5, value=row[10])
                                changeInMetadataToTopologySheet.cell(
                                    row=i + 6, column=7, value=row[11])
                                # changeInMetavaluesTopologySheet.cell(row=i + 6, column=5, value=row[10])
                                # changeInMetavaluesTopologySheet.cell(row=i + 6, column=7, value=row[11])
                                if not row[10] is None and row[10] != '':
                                    count_first_source += 1
                                if not row[11] is None and row[11] != '':
                                    count_first_method += 1
                            else:
                                changeInMetadataToTopologySheet.cell(
                                    row=i + 6, column=6, value=row[10])
                                changeInMetadataToTopologySheet.cell(
                                    row=i + 6, column=8, value=row[11])
                                # changeInMetavaluesTopologySheet.cell(row=i + 6, column=6, value=row[10])
                                # changeInMetavaluesTopologySheet.cell(row=i + 6, column=8, value=row[11])
                                if not row[10] is None and row[10] != '':
                                    count_second_method += 1
                                if not row[11] is None and row[11] != '':
                                    count_second_source += 1
                            break
                    if row.__len__() > 10 and row[5] == row[10]:
                        changeInMetadataToTopologySheet.cell(row=i + 6,
                                                             column=9,
                                                             value=row[10])
                        changeInMetadataToTopologySheet.cell(row=i + 6,
                                                             column=5,
                                                             value="")
                        changeInMetadataToTopologySheet.cell(row=i + 6,
                                                             column=6,
                                                             value="")

                        # changeInMetavaluesTopologySheet.cell(row=i + 6, column=9, value=row[10])
                        # changeInMetavaluesTopologySheet.cell(row=i + 6, column=5, value="")
                        # changeInMetavaluesTopologySheet.cell(row=i + 6, column=6, value="")
                        count_common_source += 1
                        count_first_source -= 1
                        count_second_source -= 1
                    if row.__len__() > 10 and row[6] == row[11]:
                        changeInMetadataToTopologySheet.cell(row=i + 6,
                                                             column=10,
                                                             value=row[11])
                        changeInMetadataToTopologySheet.cell(row=i + 6,
                                                             column=7,
                                                             value="")
                        changeInMetadataToTopologySheet.cell(row=i + 6,
                                                             column=8,
                                                             value="")

                        # changeInMetavaluesTopologySheet.cell(row=i + 6, column=10, value=row[11])
                        # changeInMetavaluesTopologySheet.cell(row=i + 6, column=7, value="")
                        # changeInMetavaluesTopologySheet.cell(row=i + 6, column=8, value="")
                        count_first_method -= 1
                        count_second_method -= 1
                        count_common_method += 1
                    i += 1

                count_first_source_attr = 0
                count_second_source_attr = 0
                count_first_method_attr = 0
                count_second_method_attr = 0
                count_common_source_attr = 0
                count_common_method_attr = 0
                i = 0
                ''' print the result to this excel sheet: ChangeInMetadata_Attributes '''

                for row_id, row in enumerate(
                        changeInMetadataAttributeList_result):
                    # if row.__len__() < 10:
                    # 	continue
                    if row.__len__(
                    ) > 10 and row[6] == row[11] and row[7] == row[12]:
                        continue
                    for col_id, cell in enumerate(row):
                        if col_id < 4:
                            # changeInMetadataToTopologySheet.cell(row=i + 6, column=col_id + 1, value=cell)
                            changeInMetavaluesTopologySheet.cell(
                                row=i + 6, column=col_id + 1, value=cell)
                        elif col_id == 5:
                            if cell == selectedScenarioName1:
                                changeInMetavaluesTopologySheet.cell(
                                    row=i + 6, column=5, value=row[6])
                                changeInMetavaluesTopologySheet.cell(
                                    row=i + 6, column=7, value=row[7])
                                if not row[6] is None and row[6] != '':
                                    count_first_source_attr += 1
                                if not row[7] is None and row[7] != '':
                                    count_first_method_attr += 1
                            else:
                                changeInMetavaluesTopologySheet.cell(
                                    row=i + 6, column=6, value=row[6])
                                changeInMetavaluesTopologySheet.cell(
                                    row=i + 6, column=8, value=row[7])
                                if not row[6] is None and row[6] != '':
                                    count_second_method_attr += 1
                                if not row[7] is None and row[7] != '':
                                    count_second_source_attr += 1
                            # if len(row) < 10:
                            # 	break
                        elif col_id == 10:
                            if cell == selectedScenarioName1:
                                # changeInMetadataToTopologySheet.cell(row=i + 6, column=5, value=row[10])
                                # changeInMetadataToTopologySheet.cell(row=i + 6, column=7, value=row[11])
                                changeInMetavaluesTopologySheet.cell(
                                    row=i + 6, column=5, value=row[11])
                                changeInMetavaluesTopologySheet.cell(
                                    row=i + 6, column=7, value=row[12])
                                if not row[11] is None and row[11] != '':
                                    count_first_source_attr += 1
                                if not row[12] is None and row[12] != '':
                                    count_first_method_attr += 1
                            else:
                                # changeInMetadataToTopologySheet.cell(row=i + 6, column=6, value=row[11])
                                # changeInMetadataToTopologySheet.cell(row=i + 6, column=8, value=row[12])
                                changeInMetavaluesTopologySheet.cell(
                                    row=i + 6, column=6, value=row[11])
                                changeInMetavaluesTopologySheet.cell(
                                    row=i + 6, column=8, value=row[12])
                                if not row[11] is None and row[11] != '':
                                    count_second_method_attr += 1
                                if not row[12] is None and row[12] != '':
                                    count_second_source_attr += 1
                            break
                    if row.__len__() > 10 and row[6] == row[11]:
                        # changeInMetadataToTopologySheet.cell(row=i + 6, column=9, value=row[11])
                        # changeInMetadataToTopologySheet.cell(row=i + 6, column=5, value="")
                        # changeInMetadataToTopologySheet.cell(row=i + 6, column=6, value="")

                        changeInMetavaluesTopologySheet.cell(row=i + 6,
                                                             column=9,
                                                             value=row[11])
                        changeInMetavaluesTopologySheet.cell(row=i + 6,
                                                             column=5,
                                                             value="")
                        changeInMetavaluesTopologySheet.cell(row=i + 6,
                                                             column=6,
                                                             value="")
                        count_common_source_attr += 1
                        count_first_source_attr -= 1
                        count_second_source_attr -= 1
                    if row.__len__() > 10 and row[7] == row[12]:
                        # changeInMetadataToTopologySheet.cell(row=i + 6, column=10, value=row[11])
                        # changeInMetadataToTopologySheet.cell(row=i + 6, column=7, value="")
                        # changeInMetadataToTopologySheet.cell(row=i + 6, column=8, value="")

                        changeInMetavaluesTopologySheet.cell(row=i + 6,
                                                             column=10,
                                                             value=row[12])
                        changeInMetavaluesTopologySheet.cell(row=i + 6,
                                                             column=7,
                                                             value="")
                        changeInMetavaluesTopologySheet.cell(row=i + 6,
                                                             column=8,
                                                             value="")
                        count_common_method_attr += 1
                        count_second_method_attr -= 1
                        count_first_method_attr -= 1
                    i += 1

                first_scenario_value_count = 0
                second_scenario_value_count = 0
                list_changInValue = []
                for row_id, row in enumerate(changeInMetadataValueList):
                    macth_flag = False
                    for row_i, result in enumerate(list_changInValue):
                        if result[0] == row[0] and result[1] == row[
                                1] and result[2] == row[2] and result[
                                    3] == row[3]:
                            if row[5] == selectedScenarioName1:
                                first_scenario_value_count += 1
                                list_changInValue[row_i][5] = row[9]
                            else:
                                second_scenario_value_count += 1
                                list_changInValue[row_i][6] = row[9]
                            macth_flag = True
                            break
                    if not macth_flag:
                        items = []
                        firstScenarioFlag = True
                        for col_id, cell in enumerate(row):
                            if col_id < 5:
                                items.append(cell)
                            else:
                                if col_id == 5:
                                    if cell == selectedScenarioName2:
                                        firstScenarioFlag = False
                                elif col_id == 9:
                                    if firstScenarioFlag:
                                        first_scenario_value_count += 1
                                        items.append(cell)
                                        items.append('')
                                    else:
                                        second_scenario_value_count += 1
                                        items.append('')
                                        items.append(cell)
                        list_changInValue.append(items)

                for row_id, row in enumerate(list_changInValue):
                    for col_id, cell in enumerate(row):
                        changeInValuesSheet.cell(row=row_id + 6,
                                                 column=col_id + 1,
                                                 value=cell)

                # print the scenario names in F and G
                changeInValuesSheet.cell(row=4,
                                         column=6,
                                         value=selectedScenarioName1)
                changeInValuesSheet.cell(row=4,
                                         column=7,
                                         value=selectedScenarioName2)

                allValueCount = self.compareScenarios.AllValuesMapperCount(
                    selectedDataset, selectedMasterNetworkName)

                # print values to column F: Unique to Scenario 1
                changeInValuesSheet.cell(row=2,
                                         column=6,
                                         value=first_scenario_value_count)
                changeInValuesSheet.cell(
                    row=3,
                    column=6,
                    value=str(
                        round(
                            float(first_scenario_value_count) * 100.0 /
                            float(allValueCount), 2)) + '%')

                # print values to column G: Unique to Scenario 2
                changeInValuesSheet.cell(row=2,
                                         column=7,
                                         value=second_scenario_value_count)
                changeInValuesSheet.cell(
                    row=3,
                    column=7,
                    value=str(
                        round(
                            float(second_scenario_value_count) * 100 /
                            float(allValueCount), 2)) + '%')

                common_count = allValueCount - first_scenario_value_count - second_scenario_value_count

                # print values to column H: Common to both
                changeInValuesSheet.cell(row=2, column=8, value=common_count)
                changeInValuesSheet.cell(
                    row=3,
                    column=8,
                    value=str(
                        round(
                            float(common_count) * 100 / float(allValueCount),
                            2)) + '%')

                changeInValuesSheet.cell(row=2, column=9, value=allValueCount)
                changeInValuesSheet.cell(row=3, column=9, value='100%')

                additionsToTopologySheet.cell(row=2,
                                              column=2,
                                              value=selectedScenarioName1)
                additionsToTopologySheet.cell(row=2,
                                              column=8,
                                              value=selectedScenarioName2)

                changeInMetadataToTopologySheet.cell(
                    row=4, column=5, value=selectedScenarioName1)
                changeInMetadataToTopologySheet.cell(
                    row=4, column=6, value=selectedScenarioName2)
                changeInMetadataToTopologySheet.cell(
                    row=4, column=7, value=selectedScenarioName1)
                changeInMetadataToTopologySheet.cell(
                    row=4, column=8, value=selectedScenarioName2)

                changeInMetavaluesTopologySheet.cell(
                    row=4, column=5, value=selectedScenarioName1)
                changeInMetavaluesTopologySheet.cell(
                    row=4, column=6, value=selectedScenarioName2)
                changeInMetavaluesTopologySheet.cell(
                    row=4, column=7, value=selectedScenarioName1)
                changeInMetavaluesTopologySheet.cell(
                    row=4, column=8, value=selectedScenarioName2)

                allMetaValueCount = self.compareScenarios.AllTopologyMetadataCount(
                    selectedDataset, selectedMasterNetworkName)
                changeInMetadataToTopologySheet.cell(row=2,
                                                     column=5,
                                                     value=count_first_source)
                changeInMetadataToTopologySheet.cell(
                    row=3,
                    column=5,
                    value=str(
                        round(
                            float(count_first_source) * 100 /
                            float(allMetaValueCount - count_common_source), 2))
                    + '%')
                changeInMetadataToTopologySheet.cell(row=2,
                                                     column=6,
                                                     value=count_second_source)
                changeInMetadataToTopologySheet.cell(
                    row=3,
                    column=6,
                    value=str(
                        round(
                            float(count_second_source) * 100 /
                            float(allMetaValueCount - count_common_source), 2))
                    + '%')
                changeInMetadataToTopologySheet.cell(row=2,
                                                     column=7,
                                                     value=count_first_method)
                changeInMetadataToTopologySheet.cell(
                    row=3,
                    column=7,
                    value=str(
                        round(
                            float(count_first_method) * 100 /
                            float(allMetaValueCount - count_common_method), 2))
                    + '%')
                changeInMetadataToTopologySheet.cell(row=2,
                                                     column=8,
                                                     value=count_second_method)
                changeInMetadataToTopologySheet.cell(
                    row=3,
                    column=8,
                    value=str(
                        round(
                            float(count_second_method) * 100 /
                            float(allMetaValueCount - count_common_method), 2))
                    + '%')
                changeInMetadataToTopologySheet.cell(row=2,
                                                     column=9,
                                                     value=count_common_source)
                rest_source_count = allMetaValueCount - count_first_source - count_second_source
                changeInMetadataToTopologySheet.cell(
                    row=3,
                    column=9,
                    value=str(
                        round(
                            float(rest_source_count) * 100 /
                            float(allMetaValueCount), 2)) + '%')
                rest_method_count = allMetaValueCount - count_first_method - count_second_method
                changeInMetadataToTopologySheet.cell(row=2,
                                                     column=10,
                                                     value=count_common_method)
                changeInMetadataToTopologySheet.cell(
                    row=3,
                    column=10,
                    value=str(
                        round(
                            float(rest_method_count) * 100 /
                            float(allMetaValueCount), 2)) + '%')
                changeInMetadataToTopologySheet.cell(row=2,
                                                     column=11,
                                                     value=allMetaValueCount)
                changeInMetadataToTopologySheet.cell(row=3,
                                                     column=11,
                                                     value='100%')

                allAttrVauleCount = self.compareScenarios.AllMetadataAttributesCount(
                    selectedDataset, selectedMasterNetworkName)
                changeInMetavaluesTopologySheet.cell(
                    row=2, column=5, value=count_first_source_attr)
                changeInMetavaluesTopologySheet.cell(
                    row=3,
                    column=5,
                    value=str(
                        round(
                            float(count_first_source_attr) * 100 /
                            float(allAttrVauleCount -
                                  count_common_source_attr), 2)) + '%')
                changeInMetavaluesTopologySheet.cell(
                    row=2, column=6, value=count_second_source_attr)
                changeInMetavaluesTopologySheet.cell(
                    row=3,
                    column=6,
                    value=str(
                        round(
                            float(count_second_source_attr) * 100 /
                            float(allAttrVauleCount -
                                  count_common_source_attr), 2)) + '%')
                changeInMetavaluesTopologySheet.cell(
                    row=2, column=7, value=count_first_method_attr)
                changeInMetavaluesTopologySheet.cell(
                    row=3,
                    column=7,
                    value=str(
                        round(
                            float(count_first_method_attr) * 100 /
                            float(allAttrVauleCount -
                                  count_common_method_attr), 2)) + '%')
                changeInMetavaluesTopologySheet.cell(
                    row=2, column=8, value=count_second_method_attr)
                changeInMetavaluesTopologySheet.cell(
                    row=3,
                    column=8,
                    value=str(
                        round(
                            float(count_second_method_attr) * 100 /
                            float(allAttrVauleCount -
                                  count_common_method_attr), 2)) + '%')
                rest_source_att = allAttrVauleCount - count_first_source_attr - count_second_source_attr
                changeInMetavaluesTopologySheet.cell(row=2,
                                                     column=9,
                                                     value=count_common_source)
                changeInMetavaluesTopologySheet.cell(
                    row=3,
                    column=9,
                    value=str(
                        round(
                            float(rest_source_att) * 100 /
                            float(allAttrVauleCount), 2)) + '%')
                rest_method_attr = allAttrVauleCount - count_first_method_attr - count_second_method_attr
                changeInMetavaluesTopologySheet.cell(row=2,
                                                     column=10,
                                                     value=count_common_method)
                changeInMetavaluesTopologySheet.cell(
                    row=3,
                    column=10,
                    value=str(
                        round(
                            float(rest_method_attr) * 100 /
                            float(allAttrVauleCount), 2)) + '%')
                changeInMetavaluesTopologySheet.cell(row=2,
                                                     column=11,
                                                     value=allAttrVauleCount)
                changeInMetavaluesTopologySheet.cell(row=3,
                                                     column=11,
                                                     value='100%')

                try:
                    book2.save(self.path)
                except Exception as e:
                    raise Exception(
                        "Permission denied!\nFileName : {}\nThis file is open or used by another application. Please close it first"
                        .format(e.filename))
            from Messages_forms.msg_successLoadDatabase import msg_successLoadDatabase

            instance = msg_successLoadDatabase(None)
            instance.m_staticText1.SetLabel(
                "\n \n The comparison and writing to Excel where successful. \n Check the excel file you provided to see the results"
            )
            instance.ShowModal()
            self.Destroy()
        except Exception as e:
            print e
            messageDlg = msg_somethigWrong(None, msg=e.message)
            messageDlg.ShowModal()