mirror of https://gitee.com/bigwinds/arangodb
Bug fix/fix swagger datatype (#9045)
* remove http so https arangos will work * verify that query parameters are proper swagger data types, fix offending documentation files * return the actual type - not the list of available ones * check formats * there is no uint64 in swagger * fresh swagger
This commit is contained in:
parent
7945e01037
commit
b9020abc11
|
@ -20,7 +20,7 @@ Should be set to the value of the *x-arango-replication-lastscanned* header
|
||||||
or alternatively 0 on first try. This allows the rocksdb engine to break up
|
or alternatively 0 on first try. This allows the rocksdb engine to break up
|
||||||
large transactions over multiple responses.
|
large transactions over multiple responses.
|
||||||
|
|
||||||
@RESTQUERYPARAM{global,bool,optional}
|
@RESTQUERYPARAM{global,boolean,optional}
|
||||||
Whether operations for all databases should be included. When set to *false*
|
Whether operations for all databases should be included. When set to *false*
|
||||||
only the operations for the current database are included. The value *true* is
|
only the operations for the current database are included. The value *true* is
|
||||||
only valid on the *_system* database. The default is *false*.
|
only valid on the *_system* database. The default is *false*.
|
||||||
|
|
|
@ -12,7 +12,7 @@ The name of the view.
|
||||||
The view properties. If specified, then *properties* should be a JSON object
|
The view properties. If specified, then *properties* should be a JSON object
|
||||||
containing the following attributes:
|
containing the following attributes:
|
||||||
|
|
||||||
@RESTSTRUCT{cleanupIntervalStep,post_api_view_props,integer,optional,uint64}
|
@RESTSTRUCT{cleanupIntervalStep,post_api_view_props,integer,optional,int64}
|
||||||
Wait at least this many commits between removing unused files in the
|
Wait at least this many commits between removing unused files in the
|
||||||
ArangoSearch data directory (default: 10, to disable use: 0).
|
ArangoSearch data directory (default: 10, to disable use: 0).
|
||||||
For the case where the consolidation policies merge segments often (i.e. a lot
|
For the case where the consolidation policies merge segments often (i.e. a lot
|
||||||
|
@ -29,7 +29,7 @@ _Background:_
|
||||||
However, the files for the released states/snapshots are left on disk, and
|
However, the files for the released states/snapshots are left on disk, and
|
||||||
only removed by "cleanup" operation.
|
only removed by "cleanup" operation.
|
||||||
|
|
||||||
@RESTSTRUCT{commitIntervalMsec,post_api_view_props,integer,optional,uint64}
|
@RESTSTRUCT{commitIntervalMsec,post_api_view_props,integer,optional,int64}
|
||||||
Wait at least this many milliseconds between committing view data store
|
Wait at least this many milliseconds between committing view data store
|
||||||
changes and making documents visible to queries (default: 1000, to disable
|
changes and making documents visible to queries (default: 1000, to disable
|
||||||
use: 0).
|
use: 0).
|
||||||
|
@ -52,7 +52,7 @@ _Background:_
|
||||||
still continue to return a repeatable-read state.
|
still continue to return a repeatable-read state.
|
||||||
|
|
||||||
|
|
||||||
@RESTSTRUCT{consolidationIntervalMsec,post_api_view_props,integer,optional,uint64}
|
@RESTSTRUCT{consolidationIntervalMsec,post_api_view_props,integer,optional,int64}
|
||||||
Wait at least this many milliseconds between applying 'consolidationPolicy' to
|
Wait at least this many milliseconds between applying 'consolidationPolicy' to
|
||||||
consolidate view data store and possibly release space on the filesystem
|
consolidate view data store and possibly release space on the filesystem
|
||||||
(default: 60000, to disable use: 0).
|
(default: 60000, to disable use: 0).
|
||||||
|
|
|
@ -13,7 +13,7 @@ The type of the view. must be equal to *"arangosearch"*
|
||||||
The view properties. If specified, then *properties* should be a JSON object
|
The view properties. If specified, then *properties* should be a JSON object
|
||||||
containing the following attributes:
|
containing the following attributes:
|
||||||
|
|
||||||
@RESTSTRUCT{cleanupIntervalStep,post_api_view_props,integer,optional,uint64}
|
@RESTSTRUCT{cleanupIntervalStep,post_api_view_props,integer,optional,int64}
|
||||||
Wait at least this many commits between removing unused files in the
|
Wait at least this many commits between removing unused files in the
|
||||||
ArangoSearch data directory (default: 10, to disable use: 0).
|
ArangoSearch data directory (default: 10, to disable use: 0).
|
||||||
For the case where the consolidation policies merge segments often (i.e. a lot
|
For the case where the consolidation policies merge segments often (i.e. a lot
|
||||||
|
@ -30,7 +30,7 @@ _Background:_
|
||||||
However, the files for the released states/snapshots are left on disk, and
|
However, the files for the released states/snapshots are left on disk, and
|
||||||
only removed by "cleanup" operation.
|
only removed by "cleanup" operation.
|
||||||
|
|
||||||
@RESTSTRUCT{commitIntervalMsec,post_api_view_props,integer,optional,uint64}
|
@RESTSTRUCT{commitIntervalMsec,post_api_view_props,integer,optional,int64}
|
||||||
Wait at least this many milliseconds between committing view data store
|
Wait at least this many milliseconds between committing view data store
|
||||||
changes and making documents visible to queries (default: 1000, to disable
|
changes and making documents visible to queries (default: 1000, to disable
|
||||||
use: 0).
|
use: 0).
|
||||||
|
@ -53,7 +53,7 @@ _Background:_
|
||||||
still continue to return a repeatable-read state.
|
still continue to return a repeatable-read state.
|
||||||
|
|
||||||
|
|
||||||
@RESTSTRUCT{consolidationIntervalMsec,post_api_view_props,integer,optional,uint64}
|
@RESTSTRUCT{consolidationIntervalMsec,post_api_view_props,integer,optional,int64}
|
||||||
Wait at least this many milliseconds between applying 'consolidationPolicy' to
|
Wait at least this many milliseconds between applying 'consolidationPolicy' to
|
||||||
consolidate view data store and possibly release space on the filesystem
|
consolidate view data store and possibly release space on the filesystem
|
||||||
(default: 60000, to disable use: 0).
|
(default: 60000, to disable use: 0).
|
||||||
|
|
|
@ -12,7 +12,7 @@ The name of the view.
|
||||||
The view properties. If specified, then *properties* should be a JSON object
|
The view properties. If specified, then *properties* should be a JSON object
|
||||||
containing the following attributes:
|
containing the following attributes:
|
||||||
|
|
||||||
@RESTSTRUCT{cleanupIntervalStep,post_api_view_props,integer,optional,uint64}
|
@RESTSTRUCT{cleanupIntervalStep,post_api_view_props,integer,optional,int64}
|
||||||
Wait at least this many commits between removing unused files in the
|
Wait at least this many commits between removing unused files in the
|
||||||
ArangoSearch data directory (default: 10, to disable use: 0).
|
ArangoSearch data directory (default: 10, to disable use: 0).
|
||||||
For the case where the consolidation policies merge segments often (i.e. a lot
|
For the case where the consolidation policies merge segments often (i.e. a lot
|
||||||
|
@ -29,7 +29,7 @@ _Background:_
|
||||||
However, the files for the released states/snapshots are left on disk, and
|
However, the files for the released states/snapshots are left on disk, and
|
||||||
only removed by "cleanup" operation.
|
only removed by "cleanup" operation.
|
||||||
|
|
||||||
@RESTSTRUCT{commitIntervalMsec,post_api_view_props,integer,optional,uint64}
|
@RESTSTRUCT{commitIntervalMsec,post_api_view_props,integer,optional,int64}
|
||||||
Wait at least this many milliseconds between committing view data store
|
Wait at least this many milliseconds between committing view data store
|
||||||
changes and making documents visible to queries (default: 1000, to disable
|
changes and making documents visible to queries (default: 1000, to disable
|
||||||
use: 0).
|
use: 0).
|
||||||
|
@ -52,7 +52,7 @@ _Background:_
|
||||||
still continue to return a repeatable-read state.
|
still continue to return a repeatable-read state.
|
||||||
|
|
||||||
|
|
||||||
@RESTSTRUCT{consolidationIntervalMsec,post_api_view_props,integer,optional,uint64}
|
@RESTSTRUCT{consolidationIntervalMsec,post_api_view_props,integer,optional,int64}
|
||||||
Wait at least this many milliseconds between applying 'consolidationPolicy' to
|
Wait at least this many milliseconds between applying 'consolidationPolicy' to
|
||||||
consolidate view data store and possibly release space on the filesystem
|
consolidate view data store and possibly release space on the filesystem
|
||||||
(default: 60000, to disable use: 0).
|
(default: 60000, to disable use: 0).
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -65,7 +65,34 @@ swagger = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"basePath": "/",
|
"basePath": "/",
|
||||||
"definitions": {},
|
"definitions": {
|
||||||
|
"ARANGO_ERROR": {
|
||||||
|
"description": "An ArangoDB Error code",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ArangoError": {
|
||||||
|
"description": "the arangodb error type",
|
||||||
|
"properties": {
|
||||||
|
"code": {
|
||||||
|
"description": "the HTTP Status code",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"description": "boolean flag to indicate whether an error occurred (*true* in this case)",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"errorMessage": {
|
||||||
|
"description": "a descriptive error message describing what happened, may contain additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"errorNum": {
|
||||||
|
"description": "the ARANGO_ERROR code",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
"paths" : {}
|
"paths" : {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,6 +103,7 @@ swagger = {
|
||||||
swaggerBaseTypes = [
|
swaggerBaseTypes = [
|
||||||
'object',
|
'object',
|
||||||
'array',
|
'array',
|
||||||
|
'number',
|
||||||
'integer',
|
'integer',
|
||||||
'long',
|
'long',
|
||||||
'float',
|
'float',
|
||||||
|
@ -89,6 +117,11 @@ swaggerBaseTypes = [
|
||||||
'password'
|
'password'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
swaggerFormats = {
|
||||||
|
"number": ["", "float", "double"],
|
||||||
|
"integer": ["", "int32", "int64"]
|
||||||
|
}
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
### @brief length of the swagger definition namespace
|
### @brief length of the swagger definition namespace
|
||||||
################################################################################
|
################################################################################
|
||||||
|
@ -362,10 +395,10 @@ class StateMachine:
|
||||||
raise RuntimeError("Invalid target %s" % newState)
|
raise RuntimeError("Invalid target %s" % newState)
|
||||||
else:
|
else:
|
||||||
handler = newState
|
handler = newState
|
||||||
except:
|
except Exception as x:
|
||||||
print >> sys.stderr, "while parsing '" + self.fn + "'"
|
print >> sys.stderr, "while parsing '" + self.fn + "'"
|
||||||
print >> sys.stderr, "trying to use handler '" + handler.__name__ + "'"
|
print >> sys.stderr, "trying to use handler '" + handler.__name__ + "'"
|
||||||
raise
|
raise x
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
### @brief Regexen
|
### @brief Regexen
|
||||||
|
@ -506,9 +539,9 @@ def generic_handler_desc(cargo, r, message, op, para, name):
|
||||||
if op:
|
if op:
|
||||||
try:
|
try:
|
||||||
operation[op].append(para)
|
operation[op].append(para)
|
||||||
except AttributeError:
|
except AttributeError as x:
|
||||||
print >> sys.stderr, "trying to set '%s' on operations - failed. '%s'" % (op, para)
|
print >> sys.stderr, "trying to set '%s' on operations - failed. '%s'" % (op, para)
|
||||||
raise
|
raise x
|
||||||
return next, c
|
return next, c
|
||||||
|
|
||||||
line = Typography(line)
|
line = Typography(line)
|
||||||
|
@ -525,7 +558,7 @@ def start_docublock(cargo, r=Regexen()):
|
||||||
currentDocuBlock = last.split(' ')[1].rstrip()
|
currentDocuBlock = last.split(' ')[1].rstrip()
|
||||||
except Exception as x:
|
except Exception as x:
|
||||||
print >> sys.stderr, "failed to fetch docublock in '" + last + "': " + str(x)
|
print >> sys.stderr, "failed to fetch docublock in '" + last + "': " + str(x)
|
||||||
raise
|
raise x
|
||||||
|
|
||||||
return generic_handler(cargo, r, 'start_docublock')
|
return generic_handler(cargo, r, 'start_docublock')
|
||||||
|
|
||||||
|
@ -715,7 +748,7 @@ def restbodyparam(cargo, r=Regexen()):
|
||||||
except Exception:
|
except Exception:
|
||||||
print >> sys.stderr, "RESTBODYPARAM: 4 arguments required. You gave me: " + parameters(last)
|
print >> sys.stderr, "RESTBODYPARAM: 4 arguments required. You gave me: " + parameters(last)
|
||||||
print >> sys.stderr, "In this docublock: " + currentDocuBlock
|
print >> sys.stderr, "In this docublock: " + currentDocuBlock
|
||||||
raise
|
raise Exception("Argument count error")
|
||||||
|
|
||||||
CheckReqOpt(required)
|
CheckReqOpt(required)
|
||||||
if required == 'required':
|
if required == 'required':
|
||||||
|
@ -784,6 +817,9 @@ def restbodyparam(cargo, r=Regexen()):
|
||||||
elif ptype == 'object':
|
elif ptype == 'object':
|
||||||
swagger['definitions'][currentDocuBlock]['properties'][name]['additionalProperties'] = {}
|
swagger['definitions'][currentDocuBlock]['properties'][name]['additionalProperties'] = {}
|
||||||
elif ptype != 'string':
|
elif ptype != 'string':
|
||||||
|
if ptype in swaggerFormats and ptype2 not in swaggerFormats[ptype]:
|
||||||
|
print >> sys.stderr, "RESTSTRUCT: ptype2 (format)[" + ptype2 + "] not valid: " + parameters(last)
|
||||||
|
raise Exception("'%s' is not one of %s!" % (ptype2, str(swaggerFormats)))
|
||||||
swagger['definitions'][currentDocuBlock]['properties'][name]['format'] = ptype2
|
swagger['definitions'][currentDocuBlock]['properties'][name]['format'] = ptype2
|
||||||
|
|
||||||
|
|
||||||
|
@ -844,7 +880,7 @@ def reststruct(cargo, r=Regexen()):
|
||||||
(name, className, ptype, required, ptype2) = parameters(last).split(',')
|
(name, className, ptype, required, ptype2) = parameters(last).split(',')
|
||||||
except Exception:
|
except Exception:
|
||||||
print >> sys.stderr, "RESTSTRUCT: 5 arguments required (name, className, ptype, required, ptype2). You gave me: " + parameters(last)
|
print >> sys.stderr, "RESTSTRUCT: 5 arguments required (name, className, ptype, required, ptype2). You gave me: " + parameters(last)
|
||||||
raise
|
raise Exception("Argument count error")
|
||||||
|
|
||||||
CheckReqOpt(required)
|
CheckReqOpt(required)
|
||||||
if required == 'required':
|
if required == 'required':
|
||||||
|
@ -894,6 +930,9 @@ def reststruct(cargo, r=Regexen()):
|
||||||
'description')
|
'description')
|
||||||
|
|
||||||
elif ptype != 'string' and ptype != 'boolean':
|
elif ptype != 'string' and ptype != 'boolean':
|
||||||
|
if ptype in swaggerFormats and ptype2 not in swaggerFormats[ptype]:
|
||||||
|
print >> sys.stderr, "RESTSTRUCT: ptype2 (format)[" + ptype2 + "] not valid: " + parameters(last)
|
||||||
|
raise Exception("'%s' is not one of %s!" % (ptype2, str(swaggerFormats)))
|
||||||
swagger['definitions'][className]['properties'][name]['format'] = ptype2
|
swagger['definitions'][className]['properties'][name]['format'] = ptype2
|
||||||
|
|
||||||
return generic_handler_desc(cargo, r, "restbodyparam", None,
|
return generic_handler_desc(cargo, r, "restbodyparam", None,
|
||||||
|
@ -905,7 +944,7 @@ def reststruct(cargo, r=Regexen()):
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
def restqueryparam(cargo, r=Regexen()):
|
def restqueryparam(cargo, r=Regexen()):
|
||||||
global swagger, operation, httpPath, method
|
global swagger, operation, httpPath, method, swaggerBaseTypes
|
||||||
(dummy, last) = cargo
|
(dummy, last) = cargo
|
||||||
|
|
||||||
parametersList = parameters(last).split(',')
|
parametersList = parameters(last).split(',')
|
||||||
|
@ -915,12 +954,17 @@ def restqueryparam(cargo, r=Regexen()):
|
||||||
required = True
|
required = True
|
||||||
else:
|
else:
|
||||||
required = False
|
required = False
|
||||||
|
swaggerType = parametersList[1].lower()
|
||||||
|
|
||||||
|
if swaggerType not in swaggerBaseTypes:
|
||||||
|
print >> sys.stderr, "RESTQUERYPARAM is supposed to be a swagger type."
|
||||||
|
raise Exception("'%s' is not one of %s!" % (swaggerType, str(swaggerBaseTypes)))
|
||||||
|
|
||||||
para = {
|
para = {
|
||||||
'name': parametersList[0],
|
'name': parametersList[0],
|
||||||
'in': 'query',
|
'in': 'query',
|
||||||
'description': '',
|
'description': '',
|
||||||
'type': parametersList[1].lower(),
|
'type': swaggerType,
|
||||||
'required': required
|
'required': required
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1152,7 +1196,7 @@ def example_arangosh_run(cargo, r=Regexen()):
|
||||||
examplefile = open(fn)
|
examplefile = open(fn)
|
||||||
except:
|
except:
|
||||||
print >> sys.stderr, "Failed to open example file:\n '%s'" % fn
|
print >> sys.stderr, "Failed to open example file:\n '%s'" % fn
|
||||||
raise
|
raise Exception("failed to open example file:" + fn)
|
||||||
operation['x-examples'][currentExample] = '\n\n**Example:**\n ' + exampleHeader.strip('\n ') + '\n\n<pre>'
|
operation['x-examples'][currentExample] = '\n\n**Example:**\n ' + exampleHeader.strip('\n ') + '\n\n<pre>'
|
||||||
|
|
||||||
for line in examplefile.readlines():
|
for line in examplefile.readlines():
|
||||||
|
@ -1275,7 +1319,7 @@ def getReference(name, source, verb):
|
||||||
except Exception:
|
except Exception:
|
||||||
print >>sys.stderr, "No reference in: "
|
print >>sys.stderr, "No reference in: "
|
||||||
print >>sys.stderr, name
|
print >>sys.stderr, name
|
||||||
raise
|
raise Exception("No reference in: " + name)
|
||||||
if not ref in swagger['definitions']:
|
if not ref in swagger['definitions']:
|
||||||
fn = ''
|
fn = ''
|
||||||
if verb:
|
if verb:
|
||||||
|
@ -1419,7 +1463,7 @@ for name, filenames in sorted(files.items(), key=operator.itemgetter(0)):
|
||||||
getOneApi(infile, name + " - " + ', '.join(filenames), fn)
|
getOneApi(infile, name + " - " + ', '.join(filenames), fn)
|
||||||
except Exception as x:
|
except Exception as x:
|
||||||
print >> sys.stderr, "\nwhile parsing file: '%s' error: %s" % (thisfn, x)
|
print >> sys.stderr, "\nwhile parsing file: '%s' error: %s" % (thisfn, x)
|
||||||
raise
|
raise Exception("while parsing file '%s' error: %s" %(thisfn, x))
|
||||||
infile.close()
|
infile.close()
|
||||||
currentDocuBlock = None
|
currentDocuBlock = None
|
||||||
lastDocuBlock = None
|
lastDocuBlock = None
|
||||||
|
|
Loading…
Reference in New Issue