mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
cli: precache generator
- Adds precache generator for all verbs in grammar - ignore precache.py Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
This commit is contained in:
parent
7f08c9db57
commit
9070795be0
1
.gitignore
vendored
1
.gitignore
vendored
@ -49,6 +49,7 @@ git-remote-https.exe.stackdump
|
||||
*.swp
|
||||
tools/devcloud/devcloudbox/.vagrant
|
||||
tools/cli/cloudmonkey/marvin/
|
||||
tools/cli/cloudmonkey/precache.py
|
||||
*.jar
|
||||
*.war
|
||||
*.mar
|
||||
|
||||
92
tools/cli/cloudmonkey/cachegen.py
Normal file
92
tools/cli/cloudmonkey/cachegen.py
Normal file
@ -0,0 +1,92 @@
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
try:
|
||||
from common import grammar
|
||||
from marvin.cloudstackAPI import *
|
||||
from marvin import cloudstackAPI
|
||||
except ImportError, e:
|
||||
pass
|
||||
|
||||
completions = cloudstackAPI.__all__
|
||||
|
||||
|
||||
def get_api_module(api_name, api_class_strs=[]):
|
||||
try:
|
||||
api_mod = __import__("marvin.cloudstackAPI.%s" % api_name,
|
||||
globals(), locals(), api_class_strs, -1)
|
||||
except ImportError, e:
|
||||
print "Error: API not found", e
|
||||
return None
|
||||
return api_mod
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
cachegen.py creates a precached dictionary for all the available verbs in
|
||||
the predefined grammar of cloudmonkey, it dumps the dictionary in an
|
||||
importable python module. This way we cheat on the runtime overhead of
|
||||
completing commands and help docs. This reduces the overall search and
|
||||
cache_miss (computation) complexity from O(n) to O(1) for any valid cmd.
|
||||
"""
|
||||
# datastructure {'verb': {cmd': ['api', [params], doc, required=[]]}}
|
||||
cache_verbs = {}
|
||||
for verb in grammar:
|
||||
completions_found = filter(lambda x: x.startswith(verb), completions)
|
||||
cache_verbs[verb] = {}
|
||||
for api_name in completions_found:
|
||||
api_cmd_str = "%sCmd" % api_name
|
||||
api_mod = get_api_module(api_name, [api_cmd_str])
|
||||
if api_mod is None:
|
||||
continue
|
||||
try:
|
||||
api_cmd = getattr(api_mod, api_cmd_str)()
|
||||
required = api_cmd.required
|
||||
doc = api_mod.__doc__
|
||||
except AttributeError, e:
|
||||
print "Error: API attribute %s not found!" % e
|
||||
params = filter(lambda x: '__' not in x and 'required' not in x,
|
||||
dir(api_cmd))
|
||||
if len(required) > 0:
|
||||
doc += "\nRequired args: %s" % " ".join(required)
|
||||
doc += "\nArgs: %s" % " ".join(params)
|
||||
api_name_lower = api_name.replace(verb, '').lower()
|
||||
cache_verbs[verb][api_name_lower] = [api_name, params, doc,
|
||||
required]
|
||||
f = open("precache.py", "w")
|
||||
f.write("""# Auto-generated code by cachegen.py
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.""")
|
||||
f.write("\nprecached_verbs = %s" % cache_verbs)
|
||||
f.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
x
Reference in New Issue
Block a user