"""Module Documentation here
"""
#=========================================================================================
# Licence, Reference and Credits
#=========================================================================================
__copyright__ = "Copyright (C) CCPN project (http://www.ccpn.ac.uk) 2014 - 2017"
__credits__ = ("Wayne Boucher, Ed Brooksbank, Rasmus H Fogh, Luca Mureddu, Timothy J Ragan & Geerten W Vuister")
__licence__ = ("CCPN licence. See http://www.ccpn.ac.uk/v3-software/downloads/license",
"or ccpnmodel.ccpncore.memops.Credits.CcpnLicense for licence text")
__reference__ = ("For publications, please use reference from http://www.ccpn.ac.uk/v3-software/downloads/license",
"or ccpnmodel.ccpncore.memops.Credits.CcpNmrReference")
#=========================================================================================
# Last code modification
#=========================================================================================
__modifiedBy__ = "$modifiedBy: CCPN $"
__dateModified__ = "$dateModified: 2017-07-07 16:33:24 +0100 (Fri, July 07, 2017) $"
__version__ = "$Revision: 3.0.0 $"
#=========================================================================================
# Created
#=========================================================================================
__author__ = "$Author: CCPN $"
__date__ = "$Date: 2017-04-07 10:28:48 +0000 (Fri, April 07, 2017) $"
#=========================================================================================
# Start of code
#=========================================================================================
from ccpn.util import Path
from ccpnmodel.ccpncore.memops.metamodel import MetaModel
MemopsError = MetaModel.MemopsError
from ccpnmodel.ccpncore.memops.scripts.docgen.ApiDocGen import ApiDocGen
[docs]def writeApiDoc(modelPortal, rootFileName=None, rootDirName=None,
releaseVersion=None, **kw):
"""write Python API documentation
Only function that should be called directly by 'make' scripts etc.
"""
pyApiDocGen = PyApiDocGen(modelPortal=modelPortal, rootFileName=rootFileName,
rootDirName=rootDirName, releaseVersion=releaseVersion,
scriptName='PyApiDocGen', **kw)
pyApiDocGen.processModel()
[docs]class PyApiDocGen(ApiDocGen):
apiName = 'Python API'
# baseDirName = 'python/ccpn/doc'
# baseDirName = 'doc'
###########################################################################
###########################################################################
def __init__(self, **kw):
for (tag, val) in kw.items():
if not hasattr(self, tag):
setattr(self, tag, val)
self.addModelFlavour('language', 'python')
super(PyApiDocGen, self).__init__()
###########################################################################
###########################################################################
# implements ApiDocGen
[docs] def getClassPageMethods(self, complexDataType, methods):
ll = [('Attribute', self.getClassAttrMethods(complexDataType, methods)),
('Class', self.getClassClassMethods(complexDataType, methods)),
('Other', self.getClassOtherMethods(complexDataType, methods))]
if isinstance(complexDataType, MetaModel.MetaClass):
ll[1:1] = [('Link Attribute', self.getClassLinkAttrMethods(complexDataType, methods))]
ll[3:3] = [('Factory', self.getClassNewMethods(complexDataType, methods))]
return ll
###########################################################################
###########################################################################
# implements ApiDocGen
[docs] def getParamString(self, parameter):
paramString = self.getElemTypeString(parameter)
cardString = self.getParamCardString(parameter)
if cardString:
paramString = '%s %s' % (paramString, cardString)
return paramString
###########################################################################
###########################################################################
# internal function
[docs] def getParamCardString(self, parameter):
if parameter.hicard != 1:
if parameter.isOrdered:
# note: below only works if parameter.container is MetaOperation, not MetaException
method = parameter.container
if method.opType == 'get':
cardString = 'Tuple'
else:
cardString = 'List'
else:
cardString = 'Set'
else:
cardString = ''
return cardString
###########################################################################
###########################################################################
# implements ApiDocGen
[docs] def getKeywordValueString(self, method):
return 'keyword=value pairs'
###########################################################################
###########################################################################
# implements ApiDocGen
[docs] def getNewParamString(self, method):
container = method.container
target = method.target
mandatoryElements, hasOptionals = self.getMandatoryElements(target)
ll = []
for elem in mandatoryElements:
attr = target.getElement(elem)
# attr.container is either target or superclass of target
(name, ref) = self.getLinkInfo(container, attr.container)
ss = '%s.%s' % (elem, self.fileSuffix)
ref = Path.joinPath(ref, ss)
ll.append('%s' % self.getLinkString(ref, elem))
if hasOptionals:
ll.append('...')
if ll:
paramsString = ', '.join(ll)
else:
paramsString = '-'
return paramsString
###########################################################################
###########################################################################
# implements ApiDocGen
[docs] def writeConstructorRows(self, complexDataType, mandatoryElements):
if mandatoryElements:
paramString = '=value, '.join(mandatoryElements+['']) + ' ... '
else:
paramString = ' ... '
if isinstance(complexDataType, MetaModel.MetaClass) and complexDataType.parentRole:
paramString = " %s,%s" % (complexDataType.parentRole.name, paramString)
self.writeStartRow(valign='top')
self.writeCell('Constructor:')
self.writeCell('newObj = %s(%s)' % (complexDataType.name, paramString))
self.writeEndRow()
###########################################################################
###########################################################################
# overrides ApiDocGen
[docs] def getMethodReturn(self, method):
returnString = super(PyApiDocGen, self).getMethodReturn(method)
if returnString == '':
returnString = '-'
return returnString