ProjectFlask/Project.py

changeset 18
d76a0939be6a
parent 17
f31df56510a1
child 26
5aac667c4f0f
equal deleted inserted replaced
17:f31df56510a1 18:d76a0939be6a
8 """ 8 """
9 9
10 import os 10 import os
11 11
12 from PyQt5.QtCore import ( 12 from PyQt5.QtCore import (
13 pyqtSlot, QObject, QProcess, QProcessEnvironment, QTimer 13 pyqtSlot, QObject, QProcess, QProcessEnvironment, QTimer, QFileInfo
14 ) 14 )
15 from PyQt5.QtWidgets import QMenu 15 from PyQt5.QtWidgets import QMenu, QDialog
16 16
17 from E5Gui import E5MessageBox 17 from E5Gui import E5MessageBox, E5FileDialog
18 from E5Gui.E5Action import E5Action 18 from E5Gui.E5Action import E5Action
19 from E5Gui.E5Application import e5App 19 from E5Gui.E5Application import e5App
20 20
21 from Globals import isWindowsPlatform 21 from Globals import isWindowsPlatform
22 22
52 52
53 self.__e5project = e5App().getObject("Project") 53 self.__e5project = e5App().getObject("Project")
54 self.__virtualEnvManager = e5App().getObject("VirtualEnvManager") 54 self.__virtualEnvManager = e5App().getObject("VirtualEnvManager")
55 55
56 self.__menus = {} # dictionary with references to menus 56 self.__menus = {} # dictionary with references to menus
57 self.__formsBrowser = None
57 self.__hooksInstalled = False 58 self.__hooksInstalled = False
58 59
59 self.__serverDialog = None 60 self.__serverDialog = None
60 self.__routesDialog = None 61 self.__routesDialog = None
61 self.__shellProcess = None 62 self.__shellProcess = None
298 def projectOpenedHooks(self): 299 def projectOpenedHooks(self):
299 """ 300 """
300 Public method to add our hook methods. 301 Public method to add our hook methods.
301 """ 302 """
302 if self.__e5project.getProjectType() == "Flask": 303 if self.__e5project.getProjectType() == "Flask":
303 # TODO: add some methods for standard templates 304 self.__formsBrowser = (
304 ## self.__formsBrowser = ( 305 e5App().getObject("ProjectBrowser")
305 ## e5App().getObject("ProjectBrowser") 306 .getProjectBrowser("forms"))
306 ## .getProjectBrowser("forms")) 307 self.__formsBrowser.addHookMethodAndMenuEntry(
307 ## self.__formsBrowser.addHookMethodAndMenuEntry( 308 "newForm", self.newForm, self.tr("New template..."))
308 ## "newForm", self.newForm, self.tr("New template...")) 309
309 ##
310 self.__determineCapabilities() 310 self.__determineCapabilities()
311 311
312 self.__pybabelProject.projectOpenedHooks() 312 self.__pybabelProject.projectOpenedHooks()
313 ## self.__hooksInstalled = True 313
314 self.__hooksInstalled = True
314 315
315 def projectClosedHooks(self): 316 def projectClosedHooks(self):
316 """ 317 """
317 Public method to remove our hook methods. 318 Public method to remove our hook methods.
318 """ 319 """
319 self.__pybabelProject.projectClosedHooks() 320 self.__pybabelProject.projectClosedHooks()
320 321
321 if self.__hooksInstalled: 322 if self.__hooksInstalled:
322 ## self.__formsBrowser.removeHookMethod("newForm") 323 self.__formsBrowser.removeHookMethod("newForm")
323 ## self.__formsBrowser = None 324 self.__formsBrowser = None
324 pass
325 325
326 self.__hooksInstalled = False 326 self.__hooksInstalled = False
327
328 def newForm(self, dirPath):
329 """
330 Public method to create a new form.
331
332 @param dirPath full directory path for the new form file
333 @type str
334 """
335 from .FormSelectionDialog import FormSelectionDialog
336
337 dlg = FormSelectionDialog()
338 if dlg.exec() == QDialog.Accepted:
339 template = dlg.getTemplateText()
340
341 fileFilters = self.tr(
342 "HTML Files (*.html);;"
343 "HTML Files (*.htm);;"
344 "All Files (*)")
345 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
346 self.__ui,
347 self.tr("New Form"),
348 dirPath,
349 fileFilters,
350 None,
351 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
352 if fname:
353 ext = QFileInfo(fname).suffix()
354 if not ext:
355 ex = selectedFilter.split("(*")[1].split(")")[0]
356 if ex:
357 fname += ex
358
359 if os.path.exists(fname):
360 res = E5MessageBox.yesNo(
361 self.__ui,
362 self.tr("New Form"),
363 self.tr("""The file already exists! Overwrite"""
364 """ it?"""),
365 icon=E5MessageBox.Warning)
366 if not res:
367 # user selected to not overwrite
368 return
369
370 try:
371 with open(fname, "w", encoding="utf-8") as f:
372 f.write(template)
373 except OSError as err:
374 E5MessageBox.critical(
375 self.__ui,
376 self.tr("New Form"),
377 self.tr("<p>The new form file <b>{0}</b> could"
378 " not be created.</p><p>Problem: {1}</p>")
379 .format(fname, str(err)))
380 return
381
382 self.__e5project.appendFile(fname)
383 self.__formsBrowser.sourceFile.emit(fname)
327 384
328 ################################################################## 385 ##################################################################
329 ## slots below implement general functionality 386 ## slots below implement general functionality
330 ################################################################## 387 ##################################################################
331 388
360 fullCmds = Utilities.getExecutablePaths("flask") 417 fullCmds = Utilities.getExecutablePaths("flask")
361 for fullCmd in fullCmds: 418 for fullCmd in fullCmds:
362 try: 419 try:
363 with open(fullCmd, 'r', encoding='utf-8') as f: 420 with open(fullCmd, 'r', encoding='utf-8') as f:
364 l0 = f.readline() 421 l0 = f.readline()
365 except (IOError, OSError): 422 except OSError:
366 l0 = "" 423 l0 = ""
367 if self.__isSuitableForVariant("Python3", l0): 424 if self.__isSuitableForVariant("Python3", l0):
368 variants.append("Python3") 425 variants.append("Python3")
369 break 426 break
370 427

eric ide

mercurial