#!/usr/bin/env python
#
# This script is designed to be invoked by soy2html.sh.
# Usage:
#
#    buck/docs$ python soy2html.py <output_dir>
#
# This will write all of the static content to the specified output directory.
# You may want to verify that things worked correctly by running:
#
#    python -m SimpleHTTPServer <output_dir>
#
# and then navigating to http://localhost:8000/.
#
# When this script is run, soyweb should already be running locally on port
# 9811.

import os
import sys
import urllib2


def main(output_dir):
  # Create opener.
  opener = urllib2.OpenerDirector()
  opener.add_handler(urllib2.ProxyHandler())
  opener.add_handler(urllib2.UnknownHandler())
  opener.add_handler(urllib2.HTTPHandler())
  opener.add_handler(urllib2.HTTPDefaultErrorHandler())
  opener.add_handler(urllib2.HTTPSHandler())
  opener.add_handler(urllib2.HTTPErrorProcessor())

  # Iterate over the files in the docs directory and copy them, as appropriate.
  for root, dirs, files in os.walk('.'):
    for file_name in files:
      if file_name.endswith('.soy') and not file_name.startswith('__'):
        # Strip the './' prefix, if appropriate.
        if root.startswith('./'):
          root = root[2:]

        # Construct the URL where the .soy file is being served.
        soy_file = file_name
        html_file = root + '/' + soy_file[:-len('.soy')] + '.html'
        url = 'http://localhost:9811/' + html_file

        # Fetch url and copy its contents to output_dir.
        req = urllib2.Request(url)
        res = opener.open(req)
        html = res.read()
        copy_to_output_dir(html_file, output_dir, html)
      elif file_name.endswith('.css') or file_name.endswith('.js'):
        #  Copy the static resource to output_dir.
        relative_path = os.path.join(root, file_name)
        with open(relative_path) as resource_file:
          resource = resource_file.read()
          copy_to_output_dir(relative_path, output_dir, resource)


def copy_to_output_dir(path, output_dir, content):
  # Make sure that the directory for the destination path exists.
  last_slash = path.rfind('/')
  if last_slash != -1:
    output_subdir = os.path.join(output_dir, path[:last_slash])
    if not os.path.exists(output_subdir):
      os.makedirs(output_subdir)

  # Copy the file.
  output_file = os.path.join(output_dir, path)
  with open(output_file, 'w') as f:
    f.write(content)


if __name__ == '__main__':
  output_dir = sys.argv[1]
  main(output_dir)

#!/usr/bin/env python
#
# This script is designed to be invoked by soy2html.sh.
# Usage:
#
#    buck/docs$ python soy2html.py <output_dir>
#
# This will write all of the static content to the specified output directory.
# You may want to verify that things worked correctly by running:
#
#    python -m SimpleHTTPServer <output_dir>
#
# and then navigating to http://localhost:8000/.
#
# When this script is run, soyweb should already be running locally on port
# 9811.

import os
import sys
import urllib2


def main(output_dir):
  # Create opener.
  opener = urllib2.OpenerDirector()
  opener.add_handler(urllib2.ProxyHandler())
  opener.add_handler(urllib2.UnknownHandler())
  opener.add_handler(urllib2.HTTPHandler())
  opener.add_handler(urllib2.HTTPDefaultErrorHandler())
  opener.add_handler(urllib2.HTTPSHandler())
  opener.add_handler(urllib2.HTTPErrorProcessor())

  # Iterate over the files in the docs directory and copy them, as appropriate.
  for root, dirs, files in os.walk('.'):
    for file_name in files:
      if file_name.endswith('.soy') and not file_name.startswith('__'):
        # Strip the './' prefix, if appropriate.
        if root.startswith('./'):
          root = root[2:]

        # Construct the URL where the .soy file is being served.
        soy_file = file_name
        html_file = root + '/' + soy_file[:-len('.soy')] + '.html'
        url = 'http://localhost:9811/' + html_file

        # Fetch url and copy its contents to output_dir.
        req = urllib2.Request(url)
        res = opener.open(req)
        html = res.read()
        copy_to_output_dir(html_file, output_dir, html)
      elif (file_name.endswith('.css') or
            file_name.endswith('.js') or
            file_name.endswith('.png')):
        #  Copy the static resource to output_dir.
        relative_path = os.path.join(root, file_name)
        with open(relative_path) as resource_file:
          resource = resource_file.read()
          copy_to_output_dir(relative_path, output_dir, resource)


def copy_to_output_dir(path, output_dir, content):
  # Make sure that the directory for the destination path exists.
  last_slash = path.rfind('/')
  if last_slash != -1:
    output_subdir = os.path.join(output_dir, path[:last_slash])
    if not os.path.exists(output_subdir):
      os.makedirs(output_subdir)

  # Copy the file.
  output_file = os.path.join(output_dir, path)
  with open(output_file, 'w') as f:
    f.write(content)


if __name__ == '__main__':
  output_dir = sys.argv[1]
  main(output_dir)

Include .png files when uploading documentation.