Skip to content

Commit bf4f27f

Browse files
committed
deleted specversion 2 from libdoc
1 parent 5a89283 commit bf4f27f

File tree

5 files changed

+63
-69
lines changed

5 files changed

+63
-69
lines changed

src/robot/htmldata/libdoc/libdoc.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ <h2>
402402
<div class="args">
403403
<h4>Arguments</h4>
404404
{{each args}}
405-
<span>${$value}</span>{{if $index < args.length-1}}<br>{{/if}}
405+
<span>${$value.string_repr}</span>{{if $index < args.length-1}}<br>{{/if}}
406406
{{/each}}
407407
</div>
408408
{{/if}}

src/robot/libdocpkg/jsonbuilder.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def _create_keyword(self, kw):
5656
# "deprecated" attribute isn't read because it is read from the doc
5757
# automatically. That should probably be changed at some point.
5858
return KeywordDoc(name=kw.get('name'),
59-
args=self._create_arguments(kw.get('argsObj')),
59+
args=self._create_arguments(kw.get('args')),
6060
doc=kw.get('doc'),
6161
tags=kw.get('tags'),
6262
source=kw.get('source'),
@@ -68,11 +68,11 @@ def _create_arguments(self, arguments):
6868
def _create_argument(self, arg):
6969
return ArgumentDoc(name=arg.get('name'),
7070
type=arg.get('type'),
71-
default=self._create_default(arg.get('default')),
71+
default=self._create_default(arg.get('default', None)),
7272
argument_type=arg.get('argument_type'),
7373
required=arg.get('required'))
7474

7575
@staticmethod
7676
def _create_default(default):
7777
if default:
78-
return DefaultValue(default.get('value', None))
78+
return DefaultValue(default)

src/robot/libdocpkg/model.py

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ def save(self, output=None, format='HTML'):
100100
LibdocWriter(format).write(self, outfile)
101101

102102
def convert_doc_to_html(self):
103+
if self.doc_format.upper() == 'HTML':
104+
return
103105
formatter = DocFormatter(self.keywords, self.doc, self.doc_format)
104106
self._doc = formatter.html(self.doc, intro=True)
105107
self.doc_format = 'HTML'
@@ -123,8 +125,7 @@ def __init__(self, name='', args=(), doc='', tags=(), source=None,
123125
def to_dictionary(self):
124126
return {
125127
'name': self.name,
126-
'args': [str(arg) for arg in self.args],
127-
'argsObj': [arg.to_dictionary() for arg in self.args],
128+
'args': [arg.to_dictionary() for arg in self.args],
128129
'doc': self.doc,
129130
'shortdoc': ' '.join(self.shortdoc.splitlines()),
130131
'tags': self.tags,
@@ -170,24 +171,22 @@ def to_dictionary(self):
170171
return {
171172
'name': self.name,
172173
'type': self.type,
173-
'default': {
174-
'value': self.default.value
175-
} if self.default else None,
174+
'default': self.default.value if self.default else None,
176175
'argument_type': self.argument_type,
177176
'required': self.required,
177+
'string_repr': str(self)
178178
}
179179

180180
@property
181181
def type(self):
182+
if self._type is None:
183+
return
182184
if isclass(self._type):
183185
return self._type.__name__
184-
elif self._type is None:
185-
return
186-
else:
187-
type_name = str(self._type)
188-
if type_name.startswith('typing.'):
189-
type_name = type_name[len('typing.'):]
190-
return type_name
186+
type_name = str(self._type)
187+
if type_name.startswith('typing.'):
188+
type_name = type_name[len('typing.'):]
189+
return type_name
191190

192191
def __str__(self):
193192
kw_string = ARG_TYPES[self.argument_type] + self.name
@@ -232,13 +231,12 @@ def __init__(self, value=None):
232231
@setter
233232
def value(self, value):
234233
if value is None:
235-
return 'None'
236-
elif isinstance(value, str):
234+
return '${None}'
235+
if isinstance(value, str):
237236
return self._escape_defaults_str(value)
238-
elif isinstance(value, Enum):
237+
if isinstance(value, Enum):
239238
return value.name
240-
else:
241-
return unic(value)
239+
return unic(value)
242240

243241
def __str__(self):
244242
return str(self.value)
@@ -247,6 +245,5 @@ def __str__(self):
247245
def _escape_defaults_str(value):
248246
if value == '':
249247
return '${Empty}'
250-
else:
251-
value_repr = repr(value)[1:-1]
252-
return re.sub('^(?= )|(?<= )$|(?<= )(?= )', r'\\', value_repr)
248+
value_repr = repr(value)[1:-1]
249+
return re.sub('^(?= )|(?<= )$|(?<= )(?= )', r'\\', value_repr)

src/robot/libdocpkg/specbuilder.py

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,18 @@ class SpecDocBuilder(object):
2525

2626
def build(self, path):
2727
spec = self._parse_spec(path)
28+
2829
libdoc = LibraryDoc(name=spec.get('name'),
2930
type=spec.get('type').upper(),
3031
version=spec.find('version').text or '',
3132
doc=spec.find('doc').text or '',
32-
scope=self._get_scope(spec),
33+
scope=spec.get('scope'),
3334
named_args=self._get_named_args(spec),
3435
doc_format=spec.get('format', 'ROBOT'),
3536
source=spec.get('source'),
3637
lineno=int(spec.get('lineno', -1)))
37-
libdoc.inits = self._create_keywords(spec, 'init')
38-
libdoc.keywords = self._create_keywords(spec, 'kw')
38+
libdoc.inits = self._create_keywords(spec, 'inits/init')
39+
libdoc.keywords = self._create_keywords(spec, 'keywords/kw')
3940
return libdoc
4041

4142
def _parse_spec(self, path):
@@ -45,29 +46,17 @@ def _parse_spec(self, path):
4546
root = ET.parse(source).getroot()
4647
if root.tag != 'keywordspec':
4748
raise DataError("Invalid spec file '%s'." % path)
49+
version = root.get('specversion')
50+
if version != '3':
51+
raise DataError("Invalid spec file version '%s'. "
52+
"RF >= 4.0 requires XML specversion 3." % version)
4853
return root
4954

50-
def _get_scope(self, spec):
51-
# RF >= 3.2 has "scope" attribute w/ value 'GLOBAL', 'SUITE, or 'TEST'.
52-
if 'scope' in spec.attrib:
53-
return spec.get('scope')
54-
# RF < 3.2 has "scope" element. Need to map old values to new.
55-
scope = spec.find('scope').text
56-
return {'': 'GLOBAL', # Was used with resource files.
57-
'global': 'GLOBAL',
58-
'test suite': 'SUITE',
59-
'test case': 'TEST'}[scope]
60-
6155
def _get_named_args(self, spec):
62-
# RF >= 3.2 has "namedargs" attribute w/ value 'true' or 'false'.
6356
namedargs = spec.get('namedargs')
64-
if namedargs == 'true':
57+
if namedargs.lower() == 'true':
6558
return True
66-
if namedargs == 'false':
67-
return False
68-
# RF < 3.2 has "namedargs" element with text 'yes' or 'no'.
69-
namedargs = spec.find('namedargs').text
70-
return namedargs == 'yes'
59+
return False
7160

7261
def _create_keywords(self, spec, path):
7362
return [self._create_keyword(elem) for elem in spec.findall(path)]

src/robot/libdocpkg/xmlwriter.py

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,18 @@ def write(self, libdoc, outfile):
3030
formatter = DocFormatter(libdoc.doc_format, self._force_html_doc)
3131
writer = XmlWriter(outfile, usage='Libdoc spec')
3232
self._write_start(libdoc, writer, formatter)
33-
self._write_keywords('init', libdoc.inits, libdoc.source,
34-
writer, formatter)
35-
self._write_keywords('kw', libdoc.keywords, libdoc.source,
36-
writer, formatter)
33+
self._write_keywords('inits',
34+
'init',
35+
libdoc.inits,
36+
libdoc.source,
37+
writer,
38+
formatter)
39+
self._write_keywords('keywords',
40+
'kw',
41+
libdoc.keywords,
42+
libdoc.source,
43+
writer,
44+
formatter)
3745
self._write_end(writer)
3846

3947
def _write_start(self, libdoc, writer, formatter):
@@ -44,14 +52,10 @@ def _write_start(self, libdoc, writer, formatter):
4452
'scope': libdoc.scope,
4553
'namedargs': 'true' if libdoc.named_args else 'false',
4654
'generated': generated,
47-
'specversion': '2'}
55+
'specversion': '3'}
4856
self._add_source_info(attrs, libdoc, writer.output)
4957
writer.start('keywordspec', attrs)
5058
writer.element('version', libdoc.version)
51-
# TODO: Remove 'scope' and 'namedargs' elements in RF 4.0.
52-
# https://github.com/robotframework/robotframework/issues/3522
53-
writer.element('scope', self._get_old_style_scope(libdoc))
54-
writer.element('namedargs', 'yes' if libdoc.named_args else 'no')
5559
writer.element('doc', formatter(libdoc.doc))
5660

5761
def _add_source_info(self, attrs, item, outfile, lib_source=None):
@@ -82,31 +86,35 @@ def _get_old_style_scope(self, libdoc):
8286
'SUITE': 'test suite',
8387
'TEST': 'test case'}[libdoc.scope]
8488

85-
def _write_keywords(self, kw_type, keywords, lib_source, writer, formatter):
89+
def _write_keywords(self, list_name, kw_type, keywords, lib_source, writer,
90+
formatter):
91+
writer.start(list_name)
8692
for kw in keywords:
8793
attrs = self._get_start_attrs(kw_type, kw, lib_source, writer)
8894
writer.start(kw_type, attrs)
89-
writer.start('arguments')
90-
for arg in kw.args:
91-
writer.element('arg', str(arg))
92-
writer.end('arguments')
93-
writer.start('argumentsObj')
94-
for arg in kw.args:
95-
writer.start('arg', {'argument_type': arg.argument_type, 'required': 'true' if arg.required else 'false'})
96-
writer.element('name', arg.name)
97-
if arg.type:
98-
writer.element('type', arg.type)
99-
if arg.default:
100-
writer.element('default', str(arg.default))
101-
writer.end('arg')
102-
writer.end('argumentsObj')
95+
self._write_arguments(kw, writer)
10396
writer.element('doc', formatter(kw.doc))
10497
if kw_type == 'kw' and kw.tags:
10598
writer.start('tags')
10699
for tag in kw.tags:
107100
writer.element('tag', tag)
108101
writer.end('tags')
109102
writer.end(kw_type)
103+
writer.end(list_name)
104+
105+
def _write_arguments(self, kw, writer):
106+
writer.start('arguments')
107+
for arg in kw.args:
108+
writer.start('arg', {'argument_type': arg.argument_type,
109+
'required': 'true' if arg.required else 'false',
110+
'string_repr': str(arg)})
111+
writer.element('name', arg.name)
112+
if arg.type:
113+
writer.element('type', arg.type)
114+
if arg.default:
115+
writer.element('default', str(arg.default))
116+
writer.end('arg')
117+
writer.end('arguments')
110118

111119
def _get_start_attrs(self, kw_type, kw, lib_source, writer):
112120
if kw_type == 'init':

0 commit comments

Comments
 (0)