Skip to content

Commit 3c0a9ed

Browse files
committedNov 26, 2014
[processing] fix help file generator
1 parent f6fbdd7 commit 3c0a9ed

File tree

3 files changed

+122
-57
lines changed

3 files changed

+122
-57
lines changed
 

‎python/plugins/processing/core/outputs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ def setValue(self, value):
8080
except:
8181
return False
8282

83-
def outputTypeName(self):
84-
return self.__module__.split('.')[-1]
83+
def typeName(self):
84+
return self.__class__.__name__.replace('Output', '').lower()
8585

8686
def tr(self, string, context=''):
8787
if context == '':

‎python/plugins/processing/core/parameters.py

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ def getValueAsCommandLineParameter(self):
8585
"""
8686
return unicode(self.value)
8787

88-
def parameterName(self):
89-
return self.__module__.split('.')[-1]
88+
def typeName(self):
89+
return self.__class__.__name__.replace('Parameter', '').lower()
9090

9191
def todict(self):
9292
return self.__dict__
@@ -202,6 +202,12 @@ def setValue(self, obj):
202202
return self.value.endswith(self.ext)
203203
return True
204204

205+
def typeName(self):
206+
if self.isFolder:
207+
return 'directory'
208+
else:
209+
return 'file'
210+
205211

206212
class ParameterFixedTable(Parameter):
207213

@@ -365,6 +371,19 @@ def getFileFilter(self):
365371
exts[i] = self.tr('%s files(*.%s)', 'ParameterMultipleInput') % (exts[i].upper(), exts[i].lower())
366372
return ';;'.join(exts)
367373

374+
def dataType(self):
375+
if self.datatype == self.TYPE_VECTOR_POINT:
376+
return 'points'
377+
elif self.datatype == self.TYPE_VECTOR_LINE:
378+
return 'lines'
379+
elif self.datatype == self.TYPE_VECTOR_POLYGON:
380+
return 'polygons'
381+
elif self.datatype == self.TYPE_RASTER:
382+
return 'rasters'
383+
elif self.datatype == self.TYPE_FILE:
384+
return 'files'
385+
else:
386+
return 'any vectors'
368387

369388
class ParameterNumber(Parameter):
370389

@@ -652,6 +671,14 @@ def __str__(self):
652671
return self.name + ' <' + self.__module__.split('.')[-1] + ' from ' \
653672
+ self.parent + '>'
654673

674+
def dataType(self):
675+
if self.datatype == self.DATA_TYPE_NUMBER:
676+
return 'numeric'
677+
elif self.datatype == self.DATA_TYPE_STRING:
678+
return 'string'
679+
else:
680+
return 'any'
681+
655682

656683
class ParameterVector(ParameterDataObject):
657684

@@ -729,3 +756,17 @@ def getFileFilter(self):
729756
for i in range(len(exts)):
730757
exts[i] = self.tr('%s files(*.%s)', 'ParameterVector') % (exts[i].upper(), exts[i].lower())
731758
return ';;'.join(exts)
759+
760+
def dataType(self):
761+
types = ''
762+
for shp in self.shapetype:
763+
if shp == self.VECTOR_TYPE_POINT:
764+
types += 'point, '
765+
elif shp == self.VECTOR_TYPE_LINE:
766+
types += 'line, '
767+
elif shp == self.VECTOR_TYPE_POLYGON:
768+
types += 'polygon, '
769+
else:
770+
types += 'any, '
771+
772+
return types[:-2]

‎python/plugins/processing/tools/help.py

Lines changed: 77 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -24,68 +24,92 @@
2424
__revision__ = '$Format:%H$'
2525

2626
import os
27+
import codecs
28+
2729
from processing.core.Processing import Processing
30+
from processing.core.parameters import *
31+
2832
from processing.tools.system import mkdir
29-
from processing.core.parameters import ParameterSelection
3033

3134

3235
def createBaseHelpFile(alg, folder):
33-
folder = os.path.join(folder, alg.provider.getName().lower())
34-
mkdir(folder)
35-
cmdLineName = alg.commandLineName()[
36-
alg.commandLineName().find(':') + 1:].lower()
36+
baseDir = os.path.join(folder, alg.provider.getName().lower())
37+
mkdir(baseDir)
38+
39+
groupName = alg.group.lower()
40+
groupName = groupName.replace('[', '').replace(']', '').replace(' - ', '_')
41+
groupName = groupName.replace(' ', '_')
42+
cmdLineName = alg.commandLineName()
43+
algName = cmdLineName[cmdLineName.find(':') + 1:].lower()
3744
validChars = \
38-
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
39-
safeFilename = ''.join(c for c in cmdLineName if c in validChars)
40-
filepath = os.path.join(folder, safeFilename + '.rst')
41-
file = open(filepath, 'w')
42-
file.write(alg.name.upper())
43-
file.write('\n')
44-
file.write('=' * len(alg.name))
45-
file.write('\n\n')
46-
file.write('Description\n')
47-
file.write('-----------\n\n')
48-
file.write('Parameters\n')
49-
file.write('----------\n\n')
50-
for param in alg.parameters:
51-
file.write('- ``' + param.description + '[' +
52-
param.parameterName()[9:] + ']``:\n')
53-
file.write('\nOutputs\n')
54-
file.write('-------\n\n')
55-
for out in alg.outputs:
56-
file.write('- ``' + out.description + '[' +
57-
out.outputTypeName()[6:] + ']``:\n')
58-
file.write('\nSee also\n')
59-
file.write('---------\n\n')
60-
file.write('\nConsole usage\n')
61-
file.write('-------------\n\n')
62-
file.write('\n::\n\n')
63-
s = "\tprocessing.runalg('" + alg.commandLineName() + "', "
64-
for param in alg.parameters:
65-
s += str(param.name.lower().strip()) + ', '
66-
for out in alg.outputs:
67-
if not out.hidden:
68-
s += str(out.name.lower().strip()) + ', '
69-
s = s[:-2] + ')\n'
70-
file.write(s)
71-
72-
s = ''
73-
hasSelection = False
74-
for param in alg.parameters:
75-
if isinstance(param, ParameterSelection):
76-
hasSelection = True
77-
s += '\n\t' + param.name.lower() + '(' + param.description + ')\n'
78-
i = 0
79-
for option in param.options:
80-
s += '\t\t' + str(i) + ' - ' + str(option) + '\n'
81-
i += 1
82-
if hasSelection:
83-
file.write('\n\tAvailable options for selection parameters:\n')
84-
file.write(s)
85-
file.close()
45+
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'
46+
safeGroupName = ''.join(c for c in groupName if c in validChars)
47+
safeAlgName = ''.join(c for c in algName if c in validChars)
48+
49+
dirName = os.path.join(baseDir, safeGroupName)
50+
mkdir(dirName)
51+
filePath = os.path.join(dirName, safeAlgName + '.rst')
52+
53+
with codecs.open(filePath, 'w', encoding='utf-8') as f:
54+
f.write('{}\n'.format(alg.name))
55+
f.write('{}\n\n'.format('=' * len(alg.name)))
56+
f.write('Description\n')
57+
f.write('-----------\n\n<put algortithm description here>\n\n')
58+
59+
# Algorithm parameters
60+
f.write('Parameters\n')
61+
f.write('----------\n\n')
62+
for p in alg.parameters:
63+
if isinstance(p, (ParameterMultipleInput,
64+
ParameterTableField, ParameterVector)):
65+
f.write('``{}`` [{}: {}]\n'.format(p.description, p.typeName(), p.dataType()))
66+
else:
67+
f.write('``{}`` [{}]\n'.format(p.description, p.typeName()))
68+
69+
if hasattr(p, 'optional'):
70+
if p.optional:
71+
f.write(' Optional.\n\n')
72+
73+
f.write(' <put parameter description here>\n\n')
74+
75+
if isinstance(p, ParameterSelection):
76+
f.write(' Options:\n\n')
77+
for count, opt in enumerate(p.options):
78+
f.write(' * {} --- {}\n'.format(count, opt))
79+
f.write('\n')
80+
81+
if hasattr(p, 'default'):
82+
f.write(' Default: *{}*\n\n'.format(p.default if p.default != '' else '(not set)'))
83+
84+
# Algorithm outputs
85+
f.write('Outputs\n')
86+
f.write('-------\n\n')
87+
for o in alg.outputs:
88+
f.write('``{}`` [{}]\n'.format(o.description, o.typeName()))
89+
f.write(' <put output description here>\n\n')
90+
91+
# Console usage
92+
f.write('Console usage\n')
93+
f.write('-------------\n')
94+
f.write('\n::\n\n')
95+
cmd = " processing.runalg('{}', ".format(alg.commandLineName())
96+
for p in alg.parameters:
97+
cmd += '{}, '.format(p.name.lower().strip())
98+
99+
for o in alg.outputs:
100+
if not o.hidden:
101+
cmd += '{}, '.format(o.name.lower().strip())
102+
cmd = cmd[:-2] + ')\n\n'
103+
f.write(cmd)
104+
105+
f.write('See also\n')
106+
f.write('--------\n\n')
86107

87108

88109
def createBaseHelpFiles(folder):
89110
for provider in Processing.providers:
111+
if 'grass' in provider.getName():
112+
continue
113+
90114
for alg in provider.algs:
91115
createBaseHelpFile(alg, folder)

0 commit comments

Comments
 (0)
Please sign in to comment.