📄 project.py
字号:
return self._docModelCallbackCacheReturnValue
return None
document = property(_GetDocumentModel)
def _GetDocument(self):
# Return the IDE document wrapper that corresponds to the runtime document model
if (self._docCallbackCacheReturnValue
and (self._parentProj.cacheEnabled or self._docCallbackCacheReturnValue.IsDocumentModificationDateCorrect())):
return self._docCallbackCacheReturnValue
if self._getDocCallback:
self._docCallbackCacheReturnValue, self._docModelCallbackCacheReturnValue = self._getDocCallback(self.filePath)
return self._docCallbackCacheReturnValue
return None
ideDocument = property(_GetDocument)
def ClearCache(self):
self._docCallbackCacheReturnValue = None
self._docModelCallbackCacheReturnValue = None
def _typeEnumeration(self):
return basedocmgr.FILE_TYPE_LIST
def _GetPhysicalFolder(self):
dir = None
if self.filePath:
dir = os.path.dirname(self.filePath)
if os.sep != '/':
dir = dir.replace(os.sep, '/') # require '/' as delimiter
return dir
physicalFolder = property(_GetPhysicalFolder)
def GetRelativeFolder(self, parentPath):
parentPathLen = len(parentPath)
dir = None
if self.filePath:
dir = os.path.dirname(self.filePath)
if dir.startswith(parentPath + os.sep):
dir = "." + dir[parentPathLen:] # convert to relative path
if os.sep != '/':
dir = dir.replace(os.sep, '/') # always save out with '/' as path separator for cross-platform compatibility.
return dir
def AbsToRelativePath(self, parentPath):
""" Used to convert path to relative path for saving (disk format) """
parentPathLen = len(parentPath)
if self.filePath.startswith(parentPath + os.sep):
self.filePath = "." + self.filePath[parentPathLen:] # convert to relative path
if os.sep != '/':
self.filePath = self.filePath.replace(os.sep, '/') # always save out with '/' as path separator for cross-platform compatibility.
else:
pass # not a decendant of project, use absolute path
def RelativeToAbsPath(self, parentPath):
""" Used to convert path to absolute path (for any necessary disk access) """
if self.filePath.startswith("./"): # relative to project file
self.filePath = os.path.normpath(os.path.join(parentPath, self.filePath)) # also converts '/' to os.sep
#----------------------------------------------------------------------------
# BaseDocumentMgr methods
#----------------------------------------------------------------------------
def _GetDoc(self):
# HACK: temporary solution.
import wx
import wx.lib.docview
if not self._doc:
docMgr = wx.GetApp().GetDocumentManager()
try:
doc = docMgr.CreateDocument(self.filePath, docMgr.GetFlags()|wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE|wx.lib.docview.DOC_NO_VIEW)
if (doc == None): # already open
docs = docMgr.GetDocuments()
for d in docs:
if d.GetFilename() == self.filePath:
doc = d
break
self._doc = doc
except Exception,e:
aglogging.reportException(e, stacktrace=True)
return self._doc
def _GetLocalServiceProcessName(self):
# HACK: temporary solution to getting process name from wsdlag file.
doc = self._GetDoc()
if doc:
return doc.GetModel().processName
else:
return None
processName = property(_GetLocalServiceProcessName)
def _GetStateful(self):
# HACK: temporary solution to getting stateful from wsdlag file.
return self._GetDoc().GetModel().stateful
def _SetStateful(self, stateful):
# HACK: temporary solution to setting stateful from wsdlag file.
self._GetDoc().GetModel().stateful = stateful
stateful = property(_GetStateful, _SetStateful)
def _GetLocalServiceCodeFile(self):
# HACK: temporary solution to getting class name from wsdlag file.
return self._GetDoc().GetModel().localServiceCodeFile
def _SetLocalServiceCodeFile(self, codefile):
# HACK: temporary solution to setting class name from wsdlag file.
self._GetDoc().GetModel().localServiceCodeFile = codefile
localServiceCodeFile = property(_GetLocalServiceCodeFile, _SetLocalServiceCodeFile)
def _GetLocalServiceClassName(self):
# HACK: temporary solution to getting class name from wsdlag file.
return self._GetDoc().GetModel().localServiceClassName
def _SetLocalServiceClassName(self, className):
# HACK: temporary solution to setting class name from wsdlag file.
self._GetDoc().GetModel().localServiceClassName = className
localServiceClassName = property(_GetLocalServiceClassName, _SetLocalServiceClassName)
def getServiceParameter(self, message, part):
return self._GetDoc().GetModel().getServiceParameter(message, part)
# only activate this code if we programatically need to access these values
## def _GetRssServiceBaseURL(self):
## return self._GetDoc().GetModel().rssServiceBaseURL
##
##
## def _SetRssServiceBaseURL(self, baseURL):
## self._GetDoc().GetModel().rssServiceBaseURL = baseURL
##
##
## rssServiceBaseURL = property(_GetRssServiceBaseURL, _SetRssServiceBaseURL)
##
##
## def _GetRssServiceRssVersion(self):
## return self._GetDoc().GetModel().rssServiceRssVersion
##
##
## def _SetRssServiceRssVersion(self, rssVersion):
## self._GetDoc().GetModel().rssServiceRssVersion = rssVersion
##
##
## rssServiceRssVersion = property(_GetRssServiceRssVersion, _SetRssServiceRssVersion)
def _GetServiceRefServiceType(self):
# HACK: temporary solution to getting service type from wsdlag file.
doc = self._GetDoc()
if not doc:
return None
model = doc.GetModel()
if hasattr(model, 'serviceType'):
return model.serviceType
else:
return None
def _SetServiceRefServiceType(self, serviceType):
# HACK: temporary solution to getting service type from wsdlag file.
self._GetDoc().GetModel().serviceType = serviceType
serviceType = property(_GetServiceRefServiceType, _SetServiceRefServiceType)
def getExternalPackage(self):
# HACK: temporary solution to getting custom code filename from wsdlag file.
import activegrid.model.projectmodel as projectmodel
import wx
import ProjectEditor
appInfo = self._GetDoc().GetAppInfo()
if appInfo.language == None:
language = wx.ConfigBase_Get().Read(ProjectEditor.APP_LAST_LANGUAGE, projectmodel.LANGUAGE_DEFAULT)
else:
language = appInfo.language
if language == projectmodel.LANGUAGE_PYTHON:
suffix = ".py"
elif language == projectmodel.LANGUAGE_PHP:
suffix = ".php"
pyFilename = self.name + suffix
return self._GetDoc().GetAppDocMgr().fullPath(pyFilename)
#----------------------------------------------------------------------------
# Old Classes
#----------------------------------------------------------------------------
class Project_10:
""" Version 1.0, kept for upgrading to latest version. Over time, this should be deprecated. """
__xmlname__ = "project"
__xmlrename__ = { "_files":"files"}
__xmlexclude__ = ('fileName',)
__xmlattributes__ = ["version"]
def __init__(self):
self.version = PROJECT_VERSION_050730
self._files = []
def initialize(self):
""" Required method for xmlmarshaller """
pass
def upgradeVersion(self):
currModel = Project()
for file in self._files:
currModel._files.append(ProjectFile(currModel, file))
return currModel
#----------------------------------------------------------------------------
# XML Marshalling Methods
#----------------------------------------------------------------------------
if ACTIVEGRID_BASE_IDE:
KNOWNTYPES = {"ag:project" : Project, "ag:file" : ProjectFile}
else:
KNOWNTYPES = {"ag:project" : Project, "ag:file" : ProjectFile,
"ag:appInfo" : AppInfo.AppInfo,
"ag:deploymentDataSource" : AppInfo.DeploymentDataSource,
"ag:dataSourceBinding" : AppInfo.DataSourceBinding}
def load(fileObject):
version = xmlutils.getAgVersion(fileObject.name)
# most current versions on top
if version == PROJECT_VERSION_050826:
fileObject.seek(0)
project = xmlutils.load(fileObject.name, knownTypes=KNOWNTYPES, knownNamespaces=xmlutils.KNOWN_NAMESPACES, createGenerics=True)
elif version == PROJECT_VERSION_050730:
fileObject.seek(0)
project = xmlutils.load(fileObject.name, knownTypes={"project" : Project_10}, createGenerics=True)
project = project.upgradeVersion()
else:
# assume it is old version without version number
fileObject.seek(0)
project = xmlutils.load(fileObject.name, knownTypes={"project" : Project_10}, createGenerics=True)
if project:
project = project.upgradeVersion()
else:
print "Project, unknown version:", version
return None
if project:
project._projectDir = os.path.dirname(fileObject.name)
project.RelativeToAbsPath()
return project
def save(fileObject, project, productionDeployment=False):
if not project._projectDir:
project._projectDir = os.path.dirname(fileObject.name)
project.AbsToRelativePath() # temporarily change it to relative paths for saving
savedHomeDir = project.homeDir
if productionDeployment:
# for deployments, we don't want an abs path in homeDir since that
# would tie the app to the current filesystem. So unset it.
project.homeDir = None
xmlutils.save(fileObject.name, project, prettyPrint=True, knownTypes=KNOWNTYPES, knownNamespaces=xmlutils.KNOWN_NAMESPACES)
if productionDeployment:
project.homeDir = savedHomeDir
project.RelativeToAbsPath() # swap it back to absolute path
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -