def run ( self ): print ( "Runnin' test\n" ) ## Configuring ## super ( Test, self ).createTestEnvironment () path_1 = super ( Test, self ).workspacePath ( "file_1.file" ) path_2 = super ( Test, self ).workspacePath ( "file_2.file" ) path_3 = super ( Test, self ).workspacePath ( "dir" ) path_4 = super ( Test, self ).workspacePath ( "dir/file_4.file" ) path_2t = super ( Test, self ).tempPath ( "file_2.file" ) ## First pass ## try: self.startDetached () ## Creatin' 32K file and smaller files utils.createFile ( path_1, 33 ) utils.createFile ( path_2, 32768 ) gc.collect () print ( "XXX: " + str ( gc.garbage ) ) time.sleep ( 1 ) utils.checkFileSize ( path_1, 33 ) utils.deleteFile ( path_1 ) ## Copyin' files utils.checkFileSize ( path_2, 32768 ) utils.copyFile ( path_2, path_2t ) ## Directoryin' files # utils.createDirectory ( path_3 ) # utils.copyFile ( path_2, path_4 ) # utils.listDirectory ( super ( Test, self ).workspacePath ( "." ) ) # time.sleep ( 1 ) print ( "XXX: " + str ( gc.garbage ) ) self.stopDetached () except: print ( "XXX: " + str ( gc.garbage ) ) self.stopDetached () print ( "Error:" + str ( sys.exc_info () [ 0 ] ) ) raise return ## Second pass ## try: self.startDetached () self.stopDetached () except: self.stopDetached () print ( "Error:" + str ( sys.exc_info () [ 0 ] ) ) return
def newFile(mw, path): dlg = DlgNewObject(None, path, "file", "newfile", mw) result = dlg.exec() if result == QDialog.Accepted: mw.showMessage("Create file %s" % dlg.rname) if utils.createFile(os.path.dirname(dlg.rname), os.path.basename(dlg.rname)): mw.showMessage("New file %s created" % dlg.rname) openFile(mw, dlg.rname, "text") else: mw.showMessage("Can't create %s" % dlg.rname)
def testDatalog(self, absoluteFilenameIn, nombreLignesIn): absoluteFilenameIn = str(absoluteFilenameIn) # chemin reçu nombreLignesIn = int(nombreLignesIn) # nombre de lignes if os.path.isfile(absoluteFilenameIn): return "Echec : Le fichier existe !" # si le fichier existe : on sort utils.createFile(absoluteFilenameIn) # crée le fichier myFile = open(absoluteFilenameIn, "w") # ouverture du fichier en mode écriture write - efface contenu existant # open est une fonction du langage python : http://docs.python.org/2/library/functions.html#open # mode peut-être r, w, a (append) for i in range(0, nombreLignesIn): # défile n lignes myFile.write(str(i + 1) + ";" + str(time.time()) + "\n") # écrit les données dans le fichier + saut ligne myFile.close() # ferme le fichier return str(nombreLignesIn) + " valeurs ajoutees dans le fichier"
def newFile(self): dlg = dialog.DlgNewObject(self.name, self.path, "file", "newfile", self.parent) result = dlg.exec() if result == QDialog.Accepted: self.parent.showMessage("Create file %s" % dlg.rname) if utils.createFile(os.path.dirname(dlg.rname), os.path.basename(dlg.rname)): self.parent.showMessage("New file %s created" % dlg.rname) self.openFile(dlg.rname, "text") else: self.parent.showMessage("Can't create %s" % dlg.rname)
def createScratchFile(folder): while True: name = getRandomName() if utils.createFile(folder, name): break filename = os.path.join(folder, name) with open( pkg_resources.resource_filename( __name__, "resources/templates/newfiles/python/Python/main.py")) as f1: with open(filename, "w") as f2: for line in f1: f2.write(line) return (filename)
def savePatientData(self, name, female, male, birthday, parkinsonian_y, parkinsonian_n, path): global signedUp, file_path, patient error = "" success = True if (len(name) < 2): error = 'Name was not inserted' success = False if (path == "Select folder to save data..."): error = 'Path was not selected' success = False else: name = str(name) sex = "Female" if female else "Male" birthday = str(birthday) parkisonian = True if parkinsonian_y else False path = str(path) patient = Patient(name, birthday, sex, parkisonian) signedUp = True file_path = str(utils.createFile(path, patient, file_type)) self.patientData.emit(success, error)
def gestionConnexionClient(self): # fonction appelée lorsqu'une connexion client entrante survient print ("Une connexion entrante est détectée") # -- connexion du client -- self.clientTcpDistant = ( self.serveurTcp.nextPendingConnection() ) # récupère le TcpSocket correspondant au client connecté # l'objet client est un TcpSocket et dispose donc de toutes les fonctions du TcpSocket etatConnexion = self.clientTcpDistant.waitForConnected(5000) # attend connexion pendant 5 secondes maxi # message état connexion if etatConnexion: # si la connexion est OK .. print ("Connexion au serveur OK !") print ( "IP du client connecté : " + str(self.clientTcpDistant.peerAddress().toString()) ) # affiche IP du client distant self.lineEditIPClientDistant.setText(self.clientTcpDistant.peerAddress().toString()) # MAJ champ IP client print ( "IP du serveur local : " + str(self.clientTcpDistant.localAddress().toString()) ) # affiche IP du serveur local auquel le client est connecté self.lineEditIPServeurLocal.setText(self.clientTcpDistant.localAddress().toString()) # MAJ champ IP serveur else: print ("Connexion au serveur impossible...") # exit # sort du try mais reste dans la fonction def return # sort de def # suite si la connexion est ok... # -- lecture des données en réception = réception de la requête du client distant test = self.clientTcpDistant.waitForReadyRead() # attendre que client soit prêt pour réception de données if test == True: print ("Données client distant prêtes") else: print ("Données client distant pas prêtes") chaineTrans = str( self.clientTcpDistant.readAll() ) # lit les données en réception - première lecture - readAll lit ligne à ligne... # chaineTrans =str(self.clientTcpLocal.readData(1024)) # lit les données en réception - première lecture - read() lit ligne à ligne... chaineReception = "" # print chaineTrans - debug # while len(chaineTrans): # tant que chaine Trans pas vide - obligé car réception ligne à ligne while chaineTrans != "": # tant que chaine Trans pas vide - obligé car réception ligne à ligne chaineReception = chaineReception + chaineTrans chaineTrans = "" # RAZ chaine Trans test = self.clientTcpDistant.waitForReadyRead( 1000 ) # attendre que client soit à nouveau prêt pour réception de données if test == True: # si prêt à recevoir données # print ("Client prêt à recevoir des données") chaineTrans = str(self.clientTcpDistant.readAll()) # lit la suite des données en réception # chaineTrans =str(self.clientTcpLocal.readData(1024)) # lit la suite des données en réception - read() lit ligne à ligne... # print self.clientTcpLocal.isOpen() # debug # print (">"+chaineTrans) # debug # else: # print("Client pas prêt à recevoir des données") # -- fin réception réponse client # si on veut message erreur si problème, utiliser readData(taillemax) print ("Données reçues : ") print ("-------------------------------------------") print chaineReception print ("-------------------------------------------") self.textEditReceptionReseau.append(chaineReception) # ajoute réception à la zone texte # -- +/- analyse de la requete reçue -- # ------> analyse si la chaine reçue est une requete GET avec chaine format /&chaine= càd si requête Ajax-------- if chaineReception.startswith("GET /&"): print ("Requête AJAX reçue") reponseAjax = "" # pour mémoriser éléments de la réponse Ajax au fur et à mesure analyse # ----- extraction de la chaine allant de & à = indexStart = chaineReception.find("&") # position debut print ("indexStart = " + str(indexStart)) # debug indexEnd = chaineReception.find("=") # position fin print ("indexEnd = " + str(indexEnd)) # debug chaineAnalyse = chaineReception[ indexStart + 1 : indexEnd ] # garde chaine fonction(xxxx) à partir de GET /&fonction(xxxx)= # [a:b] 1er caractère inclusif (d'où le +1) , dernier exclusif print ("Chaine recue : " + chaineAnalyse) # debug # ---------------------->> +/- ici analyse de la chaine <<------------------ # --- ls ( ) -- # testInstructionString (self, chaineTestIn, chaineRefIn, debugIn) result = utils.testInstructionString( chaineAnalyse, "ls(", True ) # appelle fonction test instruction format fonction(chaine) if result: print ("result = " + result) reponseAjax = reponseAjax + result + "\n" # ajoute à la réponse Ajax # if (result=="/"): cheminAbsolu = self.lineEditCheminRep.text() + result # le chemin absolu à utiliser contenu = utils.getContentDir(cheminAbsolu) # getContentDir renvoie chaîne print (contenu) # affiche le contenu du rép - self.textEdit.setText(contenu) # efface le champ texte et affiche le fichier à la zone texte reponseAjax = reponseAjax + contenu # ajoute à la réponse Ajax # --- read ( ) -- # testInstructionString (self, chaineTestIn, chaineRefIn, debugIn) result = utils.testInstructionString( chaineAnalyse, "read(", True ) # appelle fonction test instruction format fonction(chaine) if result: print ("result = " + result) reponseAjax = reponseAjax + result + "\n" # ajoute à la réponse Ajax # if (result=="/"): cheminAbsolu = self.lineEditCheminRep.text() + "/" + result # le chemin absolu à utiliser # contenu = self.getContentDir(cheminAbsolu) # getContentDir renvoie chaîne contenu = utils.readFile(cheminAbsolu) # readFile renvoie chaine print (contenu) # affiche le contenu du fichier reponseAjax = reponseAjax + contenu # ajoute à la réponse Ajax # --- lines ( ) -- # testInstructionString (self, chaineTestIn, chaineRefIn, debugIn) result = utils.testInstructionString( chaineAnalyse, "lines(", True ) # appelle fonction test instruction format fonction(chaine) if result: print ("result = " + result) reponseAjax = reponseAjax + result + "\n" # ajoute à la réponse Ajax # if (result=="/"): cheminAbsolu = self.lineEditCheminRep.text() + "/" + result # le chemin absolu à utiliser # contenu = self.getContentDir(cheminAbsolu) # getContentDir renvoie chaîne contenu = str(utils.getNumberOfLines(cheminAbsolu)) # getNumberOfLines renvoie int - nombre de lignes print (contenu) # affiche le contenu du fichier reponseAjax = reponseAjax + contenu # ajoute à la réponse Ajax # --- size ( fichier) -- # testInstructionString (self, chaineTestIn, chaineRefIn, debugIn) result = utils.testInstructionString( chaineAnalyse, "size(", True ) # appelle fonction test instruction format fonction(chaine) if result: print ("result = " + result) reponseAjax = reponseAjax + result + "\n" # ajoute à la réponse Ajax # if (result=="/"): cheminAbsolu = self.lineEditCheminRep.text() + "/" + result # le chemin absolu à utiliser # contenu = self.getContentDir(cheminAbsolu) # getContentDir renvoie chaîne contenu = str(utils.sizeFile(cheminAbsolu)) # getNumberOfLines renvoie int - nombre de lignes print (contenu) # affiche le contenu du fichier reponseAjax = reponseAjax + contenu # ajoute à la réponse Ajax # --- write ( ) -- # testInstructionString (self, chaineTestIn, chaineRefIn, debugIn) result = utils.testInstructionString( chaineAnalyse, "write(", True ) # appelle fonction test instruction format fonction(chaine) if result: print ("result = " + result) reponseAjax = reponseAjax + result + "\n" # ajoute à la réponse Ajax subResult = result.split(",") # sépare les sous chaînes séparées par , print subResult if len(subResult) == 2: # si on a bien 2 sous chaînes # if (result=="/"): cheminAbsolu = self.lineEditCheminRep.text() + "/" + subResult[0] # le chemin absolu à utiliser # contenu = self.getContentDir(cheminAbsolu) # getContentDir renvoie chaîne contenu = utils.writeFile(cheminAbsolu, str(subResult[1]) + "\n") # writeFile renvoie chaine print (contenu) # affiche le contenu du fichier reponseAjax = reponseAjax + contenu # ajoute à la réponse Ajax else: reponseAjax = reponseAjax + "Erreur format\n" # ajoute à la réponse Ajax # --- getline ( fichier, ligne) -- # testInstructionString (self, chaineTestIn, chaineRefIn, debugIn) result = utils.testInstructionString( chaineAnalyse, "getline(", True ) # appelle fonction test instruction format fonction(chaine) if result: print ("result = " + result) reponseAjax = reponseAjax + result + "\n" # ajoute à la réponse Ajax subResult = result.split(",") # sépare les sous chaînes séparées par , print subResult if len(subResult) == 2: # si on a bien 2 sous chaînes # if (result=="/"): cheminAbsolu = self.lineEditCheminRep.text() + "/" + subResult[0] # le chemin absolu à utiliser if subResult[1].isalnum(): # si 2ème param est bien en chiffres contenu = utils.getLine(cheminAbsolu, str(subResult[1])) # getLine renvoie chaine print (contenu) # affiche le contenu du fichier reponseAjax = reponseAjax + contenu # ajoute à la réponse Ajax else: reponseAjax = reponseAjax + "Erreur format\n" # ajoute à la réponse Ajax # --- testdatalog ( fichier, nombrelignes) -- # testInstructionString (self, chaineTestIn, chaineRefIn, debugIn) result = utils.testInstructionString( chaineAnalyse, "testdatalog(", True ) # appelle fonction test instruction format fonction(chaine) if result: print ("result = " + result) reponseAjax = reponseAjax + result + "\n" # ajoute à la réponse Ajax subResult = result.split(",") # sépare les sous chaînes séparées par , print subResult if len(subResult) == 2: # si on a bien 2 sous chaînes # if (result=="/"): cheminAbsolu = self.lineEditCheminRep.text() + "/" + subResult[0] # le chemin absolu à utiliser if subResult[1].isalnum(): # si 2ème param est bien en chiffres contenu = self.testDatalog(cheminAbsolu, str(subResult[1])) # testDatalog renvoie chaine print (contenu) # affiche le contenu du fichier reponseAjax = reponseAjax + contenu # ajoute à la réponse Ajax else: reponseAjax = reponseAjax + "Erreur format\n" # ajoute à la réponse Ajax # --- createfile ( ) -- # testInstructionString (self, chaineTestIn, chaineRefIn, debugIn) result = utils.testInstructionString( chaineAnalyse, "createfile(", True ) # appelle fonction test instruction format fonction(chaine) if result: print ("result = " + result) reponseAjax = reponseAjax + result + "\n" # ajoute à la réponse Ajax # if (result=="/"): cheminAbsolu = self.lineEditCheminRep.text() + "/" + result # le chemin absolu à utiliser # contenu = self.getContentDir(cheminAbsolu) # getContentDir renvoie chaîne contenu = utils.createFile(cheminAbsolu) # readFile renvoie chaine print (contenu) # affiche le contenu du fichier reponseAjax = reponseAjax + contenu # ajoute à la réponse Ajax # --- remove ( ) -- # testInstructionString (self, chaineTestIn, chaineRefIn, debugIn) result = utils.testInstructionString( chaineAnalyse, "remove(", True ) # appelle fonction test instruction format fonction(chaine) if result: print ("result = " + result) reponseAjax = reponseAjax + result + "\n" # ajoute à la réponse Ajax # if (result=="/"): cheminAbsolu = self.lineEditCheminRep.text() + "/" + result # le chemin absolu à utiliser contenu = utils.removeFile(cheminAbsolu) # readFile renvoie chaine print (contenu) # affiche le contenu du fichier reponseAjax = reponseAjax + contenu # ajoute à la réponse Ajax # ----- avec params chiffrés --- """ args=utils.testInstructionLong(chaineAnalyse, "lines(", True) # extrait paramètre chaine au format racine (xx,xx,xx,..) if args: # args est True si 1 ou plusieurs paramètres numériques sont trouvés - None sinon print args """ # --- construction de la réponse complète # reponse=self.plainTextEditReponseHttp.toPlainText() +chaineAnalyse+"\n" # Utf-8 # reponse=self.enteteHttp+chaineAnalyse+"\n"+result+"\n" # +str(args)+"\n" # Utf-8 reponse = self.enteteHttp + chaineAnalyse + "\n" + reponseAjax + "\n" self.envoiChaineClientTcp(reponse) # envoi la reponse au client - appelle fonction commune """ self.textEditEnvoiReseau.append(reponse) # ajoute à la zone texte d'envoi print reponse.toAscii() # convertit en ascii le String - avec conversion unicode... #reponse=QString.fromUtf8(reponse) # 2ers octets UTF-8 seulement reponseByteArray=reponse.toAscii() # convertit en ascii le String - avec conversion unicode... #byteArray=QByteArray() #byteArray.append(reponse) test=self.clientTcpDistant.write(reponseByteArray) # écrit les données vers le serveur avec CRLF if test==-1 : print ("Erreur en écriture vers le client") else: print (str(test)+ " octets envoyés vers le client") #self.textEditReceptionReseau.append("Reponse envoyee au client : " + str(reponseByteArray)+"\n") test=self.clientTcpDistant.waitForBytesWritten() # attend fin envoi if test==False : print("Problème envoi") else: print ("envoi réussi") """ # -- fin si GET /& # ---------> si la chaine recue commence par GET et pas une réponse précédente = on envoie page initiale entiere elif chaineReception.startswith("GET"): # -- écriture des données vers le client = envoi de la réponse du serveur local -- # test=self.clientTcpLocal.writeData("GET") # écrit les données vers le serveur # test=self.clientTcpDistant.writeData(str(self.lineEditReponse.text())) # écrit les données vers le serveur # reponse=str(QString.fromUtf8(self.plainTextEditReponse.toPlainText()))+str("\n") # reponse=self.plainTextEditReponseHttp.toPlainText() +self.plainTextEditReponseHtml.toPlainText()+"\n" # Utf-8 # reponseHtml=self.plainTextEditReponseHtml.toPlainText() # partie Html de la réponse # reponseHtml.replace(self.lineEditChaineSubstHtml.text(), "var val = new Array(100,200,300,400,500,600);"); # debug - remplace chaine des valeurs à passer au client # typiquement, la réponse html contient du code javascript avec un tableau de valeurs var val = new Array(0,0,0,0,0,0); # celui-ci est remplacé par le tableau de nouvelles valeurs """ reponseHtml.replace(self.lineEditChaineSubstHtml.text(), "var val = new Array(" +str(self.lcdNumber_A0.intValue())+"," +str(self.lcdNumber_A1.intValue()) +"," +str(self.lcdNumber_A2.intValue())+"," +str(self.lcdNumber_A3.intValue())+"," +str(self.lcdNumber_A4.intValue())+"," +str(self.lcdNumber_A5.intValue()) +");"); # remplace chaine des valeurs à passer au client - ici les valeurs des lcdNumber """ # --- la réponse HTML + Javascript reponseHtml = "" # -- début html + le head avec javascript -- #### ATTENTION : les sections """ """ qui suivent ne sont pas des commentaires mais du code HTML/Javascript actif envoyé au client #### NE PAS EFFACER +++ reponseHtml = ( reponseHtml + """ <!DOCTYPE html> <html> <head> <meta charset=\"utf-8\" /> <title>Titre</title> <!-- Debut du code Javascript --> <script language=\"javascript\" type=\"text/javascript\"> <!-- //-- variables et objets globaux var textarea=null; var textInputX=null; //--- fonction appelée sur clic bouton function onclickButton() { // click Button ON requeteAjax(\"&\"+textInput.value+\"=\", drawData); // envoi requete avec &chaine= et fonction de gestion resultat } // fin onclickButton //--- fonction executee au lancement window.onload = function () { // au chargement de la page textarea = document.getElementById(\"textarea\"); // declare objet canvas a partir id = nom textarea.value=\"\";// efface le contenu textInput= document.getElementById(\"valeur\"); // declare objet champ text a partir id = nom" } // fin onload //--- fonction de requete AJAX function requeteAjax(chaineIn, callback) { var xhr = XMLHttpRequest(); xhr.open(\"GET\", chaineIn, true); // envoi requete avec chaine personnalisee xhr.send(null); //------ gestion de l'évènement onreadystatechange ----- xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { //alert(xhr.responseText); callback(xhr.responseText); } // fin if }; // fin function onreadystatechange } // fin fonction requeteAjax //-- fonction de gestion de la reponse a la requete AJAX -- function drawData(stringDataIn) { // ajoute la réponse au champ texte textarea.value=textarea.value+stringDataIn; // ajoute la chaine au début - décale vers le bas... textarea.setSelectionRange(textarea.selectionEnd-1,textarea.selectionEnd-1); // se place à la fin -1 pour avant saut de ligne } // fin fonction drawData //--> </script> <!-- Fin du code Javascript --> </head> """ ) # les parenthèses encadrent la chaîne et la variable comme si c'était la même ligne # -- le body + fin HTML -- reponseHtml = ( reponseHtml + """ <body> Serveur Python <br/> <input type=\"text\" id=\"valeur\" size=\"50\" /> <button type=\"button\" onclick=\"onclickButton()\">Envoyer</button> <br/> En provenance du serveur : <br/> <textarea id=\"textarea\" rows=\"10\" cols=\"50\" > </textarea> <br/> </body> </html> """ ) # les parenthèses encadrent la chaîne et la variable comme si c'était la même ligne # --- construction de la réponse complète # reponse=self.plainTextEditReponseHttp.toPlainText() +reponseHtml+"\n" # Utf-8 reponse = self.enteteHttp + reponseHtml + "\n" # Utf-8 self.envoiChaineClientTcp(reponse) # envoi la reponse au client - appelle fonction commune """ self.textEditEnvoiReseau.append(reponse) # ajoute à la zone texte d'envoi print reponse.toAscii() # convertit en ascii le String - avec conversion unicode... #reponse=QString.fromUtf8(reponse) # 2ers octets UTF-8 seulement reponseByteArray=reponse.toAscii() # convertit en ascii le String - avec conversion unicode... #byteArray=QByteArray() #byteArray.append(reponse) test=self.clientTcpDistant.write(reponseByteArray) # écrit les données vers le serveur avec CRLF if test==-1 : print ("Erreur en écriture vers le client") else: print (str(test)+ " octets envoyés vers le client") #self.textEditReceptionReseau.append("Reponse envoyee au client : " + str(reponseByteArray)+"\n") test=self.clientTcpDistant.waitForBytesWritten() # attend fin envoi if test==False : print("Problème envoi") else: print ("envoi réussi") """ # -- fin si "GET" = fin envoi page initiale complète # -- fin de la connexion -- self.clientTcpDistant.close() # fin de la connexion print ("Fermeture du client tcp distant effectuée") print ("===========================================") print ("")
if(ind >= 0): print(str(x) + " already used - skipping this file") continue basePath = os.path.dirname(x) if(len(basePath) > 0): if(basePath[-1:] != "\\" and basePath[-1:] != "/"): basePath = basePath + "/" f = open(str(x), "r", 4096, "utf-8") filesAlreadyUsed.append(str(x)) # create base tsconfig file if(not os.path.exists(basePath + "tsconfig.json")): baseTSConfigFile = utils.createFile(basePath + "tsconfig.json") TSConfigFileTextTmp = tsConfigFileText TSConfigFileTextTmp = TSConfigFileTextTmp.replace("<EXTENDS>", "") TSConfigFileTextTmp = TSConfigFileTextTmp.replace("<FILES>", "") baseTSConfigFile.write(TSConfigFileTextTmp) baseTSConfigFile.close() t = f.read() t = t.splitlines() f.close() allScripts = [] actScript = "" scriptName = "" scriptNumber = "" i = 0
def createNew(self): dialog = DlgNewProject(self.parent) result = dialog.exec() if result == QDialog.Accepted: dirProject = dialog.txtProjectName.text() if dirProject != "": ok = utils.createDirectory(settings.db['BSIDE_REPOSITORY'], dirProject) if ok == True: # Package folder package = os.path.join(settings.db['BSIDE_REPOSITORY'], dirProject) # Main module file module = dialog.txtModuleName.text() # Python files templateFolder = pkg_resources.resource_filename( __name__, 'resources/templates/newfiles/python/' + dialog.cbxTemplate.currentText()) utils.copyAllFilesFromTo(templateFolder, package) if module != "main.py": os.rename(os.path.join(package, "main.py"), os.path.join(package, module)) utils.createFile(package, "__init__.py") # README.md readme = self.getReadme(dialog.txtProjectName.text(), dialog.txtAuthorName.text(), dialog.txtAuthorMail.text(), dialog.txtAuthorSite.text(), dialog.txtCompany.text(), dialog.cbxLicense.currentText()) utils.copyStringToFile(readme, os.path.join(package, "README.md")) # LICENSE.md license = 'resources/templates/licenses/' + dialog.cbxLicense.currentText( ) + ".md" utils.copyFile( pkg_resources.resource_filename(__name__, license), os.path.join(package, "LICENSE.md")) # Encoding encoding = dialog.cbxEncoding.currentText() # update members self.name = dirProject self.path = package # Project file self.createXMLProjectFile(module, encoding) # Open project self.open() return True else: return False else: return False