Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3878)

Unified Diff: chrome/common/extensions/docs/build/directory.py

Issue 10082038: Hack together a quick doc generator for IDL files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: separate alarms change Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/build/directory.py
diff --git a/chrome/common/extensions/docs/build/directory.py b/chrome/common/extensions/docs/build/directory.py
old mode 100644
new mode 100755
index b11c56e2d5f2a0fc14358ae2197a3b374f8422a0..64f701ca7527dc640d607a10fb6fd0b35cbd5eb3
--- a/chrome/common/extensions/docs/build/directory.py
+++ b/chrome/common/extensions/docs/build/directory.py
@@ -18,6 +18,14 @@ import json_minify as minify
# default C locale.
locale.setlocale(locale.LC_ALL, 'C')
+import sys
+_script_path = os.path.realpath(__file__)
+_build_dir = os.path.dirname(_script_path)
+_base_dir = os.path.normpath(_build_dir + "/..")
+sys.path.insert(0, os.path.normpath(_base_dir +
+ "/../../../../tools/json_schema_compiler"))
+import idl_schema
+
def sorted_walk(path):
""" A version of os.walk that yields results in order sorted by name.
@@ -58,18 +66,55 @@ def parse_json_file(path, encoding="utf-8"):
return json_obj
+def parse_idl_file(path):
+ """ Load the specified file and parse it as IDL.
+
+ Args:
+ path: Path to a file containing JSON-encoded data.
+ """
+ api_def = idl_schema.Load(path)
+ return api_def
+
+def write_json_to_file(manifest, path):
+ """ Writes the contents of this manifest file as a JSON-encoded text file.
+
+ Args:
+ manifest: The manifest structure to write.
+ path: The path to write the manifest file to.
+
+ Raises:
+ Exception: If the file could not be written.
+ """
+ manifest_text = json.dumps(manifest, indent=2,
+ sort_keys=True, separators=(',', ': '))
+ output_path = os.path.realpath(path)
+ try:
+ output_file = open(output_path, 'w')
+ except IOError, msg:
+ raise Exception("Failed to write the samples manifest file."
+ "The specific error was: %s." % msg)
+ output_file.write(manifest_text)
+ output_file.close()
+
class ApiManifest(object):
""" Represents the list of API methods contained in the extension API JSON """
- def __init__(self, manifest_paths):
- """ Read the supplied manifest file and parse its contents.
+ def __init__(self, json_paths, idl_paths):
+ """ Read the supplied json files and idl files and parse their contents.
Args:
- manifest_paths: Array of paths to API schemas.
+ json_paths: Array of paths to .json API schemas.
+ idl_paths: Array of paths to .idl API schemas.
"""
- self._manifest = [];
- for path in manifest_paths:
+ self._manifest = []
+ self._temporary_json_files = []
+ for path in json_paths:
self._manifest.extend(parse_json_file(path))
+ for path in idl_paths:
+ module = parse_idl_file(path)
+ json_path = os.path.realpath(path.replace('.idl', '.json'))
+ self._temporary_json_files.append((module, json_path))
+ self._manifest.extend(module)
def _parseModuleDocLinksByKeyTypes(self, module, key):
"""
@@ -186,6 +231,22 @@ class ApiManifest(object):
api_dict.update(self._parseModuleDocLinksByKeyTypes(module, 'events'))
return api_dict
+ def generateJSONFromIDL(self):
+ """ Writes temporary .json files for every .idl file we have read, for
+ use by the documentation generator.
+ """
+ for (module, json_path) in self._temporary_json_files:
+ if os.path.exists(json_path):
+ print ("WARNING: Overwriting existing file '%s'"
+ " with generated content." % (json_path))
+ write_json_to_file(module, json_path)
+
+ def cleanupGeneratedFiles(self):
+ """ Removes the temporary .json files we generated from .idl before.
+ """
+ for (module, json_path) in self._temporary_json_files:
+ os.remove(json_path)
+
class SamplesManifest(object):
""" Represents a manifest file containing information about the sample
extensions available in the codebase. """
@@ -262,16 +323,7 @@ class SamplesManifest(object):
Args:
path: The path to write the samples manifest file to.
"""
- manifest_text = json.dumps(self._manifest_data, indent=2,
- sort_keys=True, separators=(',', ': '))
- output_path = os.path.realpath(path)
- try:
- output_file = open(output_path, 'w')
- except IOError, msg:
- raise Exception("Failed to write the samples manifest file."
- "The specific error was: %s." % msg)
- output_file.write(manifest_text)
- output_file.close()
+ write_json_to_file(self._manifest_data, path)
def writeZippedSamples(self):
""" For each sample in the current manifest, create a zip file with the
« no previous file with comments | « chrome/common/extensions/docs/build/build.py ('k') | chrome/common/extensions/docs/experimental.alarms.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698