Ejemplo n.º 1
0
def main(argv):
    got_input = False
    module_directory = None
    preprocessed_output = None
    dictionary = {}
    json_dict = {}
    got_output = False
    plugins = []
    output_name = None
    got_preprocessed_input = False
    output_merged = None

    try:
        opts, args = getopt.getopt(argv, 'hM:m:d:o:p:t:P:w:')
    except getopt.GetoptError:
        out('Unknown option')
        showhelp()
        sys.exit(2)

    for opt, arg in opts:
        if opt == '-h':
            out('Displaying showhelp')
            showhelp()
            sys.exit()
        elif opt == '-o':
            if got_output:
                out('Got more than one output')
                showhelp()
                sys.exit(3)
            got_output = True
            output_name = arg
        elif opt == '-m':
            if module_directory is not None:
                out('Got more than one cache directory')
                showhelp()
                sys.exit(4)
            module_directory = arg
        elif opt == '-M':
            if output_merged is not None:
                out('Got more than one output merged path')
                showhelp()
                sys.exit(5)
            output_merged = arg
        elif opt == '-P':
            assert not got_preprocessed_input
            assert json_dict == {}
            sys.path.insert(
                0,
                os.path.abspath(
                    os.path.join(os.path.dirname(sys.argv[0]), 'plugins')))
            with open(arg, 'r') as dict_file:
                dictionary = pickle.load(dict_file)
            got_preprocessed_input = True
        elif opt == '-d':
            assert not got_preprocessed_input
            with open(arg, 'r') as dict_file:
                bunch.merge_json(json_dict, yaml.load(dict_file.read()))
        elif opt == '-p':
            plugins.append(import_plugin(arg))
        elif opt == '-w':
            preprocessed_output = arg

    if not got_preprocessed_input:
        for plugin in plugins:
            plugin.mako_plugin(json_dict)
        if output_merged:
            with open(output_merged, 'w') as yaml_file:
                yaml_file.write(yaml.dump(json_dict))
        for k, v in json_dict.items():
            dictionary[k] = bunch.to_bunch(v)

    if preprocessed_output:
        with open(preprocessed_output, 'w') as dict_file:
            pickle.dump(dictionary, dict_file)

    cleared_dir = False
    for arg in args:
        got_input = True
        with open(arg) as f:
            srcs = list(yaml.load_all(f.read()))
        for src in srcs:
            if isinstance(src, basestring):
                assert len(srcs) == 1
                template = Template(src,
                                    filename=arg,
                                    module_directory=module_directory,
                                    lookup=TemplateLookup(directories=['.']))
                with open(output_name, 'w') as output_file:
                    template.render_context(Context(output_file, **dictionary))
            else:
                # we have optional control data: this template represents
                # a directory
                if not cleared_dir:
                    if not os.path.exists(output_name):
                        pass
                    elif os.path.isfile(output_name):
                        os.unlink(output_name)
                    else:
                        shutil.rmtree(output_name, ignore_errors=True)
                    cleared_dir = True
                items = []
                if 'foreach' in src:
                    for el in dictionary[src['foreach']]:
                        if 'cond' in src:
                            args = dict(dictionary)
                            args['selected'] = el
                            if not eval(src['cond'], {}, args):
                                continue
                        items.append(el)
                    assert items
                else:
                    items = [None]
                for item in items:
                    args = dict(dictionary)
                    args['selected'] = item
                    item_output_name = os.path.join(
                        output_name,
                        Template(src['output_name']).render(**args))
                    if not os.path.exists(os.path.dirname(item_output_name)):
                        os.makedirs(os.path.dirname(item_output_name))
                    template = Template(
                        src['template'],
                        filename=arg,
                        module_directory=module_directory,
                        lookup=TemplateLookup(directories=['.']))
                    with open(item_output_name, 'w') as output_file:
                        template.render_context(Context(output_file, **args))

    if not got_input and not preprocessed_output:
        out('Got nothing to do')
        showhelp()
Ejemplo n.º 2
0
def main(argv):
  got_input = False
  module_directory = None
  dictionary = {}
  json_dict = {}
  got_output = False
  output_file = sys.stdout
  plugins = []

  try:
    opts, args = getopt.getopt(argv, 'hm:d:o:p:')
  except getopt.GetoptError:
    out('Unknown option')
    showhelp()
    sys.exit(2)

  for opt, arg in opts:
    if opt == '-h':
      out('Displaying showhelp')
      showhelp()
      sys.exit()
    elif opt == '-o':
      if got_output:
        out('Got more than one output')
        showhelp()
        sys.exit(3)
      got_output = True
      output_file = open(arg, 'w')
    elif opt == '-m':
      if module_directory is not None:
        out('Got more than one cache directory')
        showhelp()
        sys.exit(4)
      module_directory = arg
    elif opt == '-d':
      dict_file = open(arg, 'r')
      bunch.merge_json(json_dict, simplejson.loads(dict_file.read()))
      dict_file.close()
    elif opt == '-p':
      plugins.append(import_plugin(arg))

  for plugin in plugins:
    plugin.mako_plugin(json_dict)

  for k, v in json_dict.items():
    dictionary[k] = bunch.to_bunch(v)

  ctx = Context(output_file, **dictionary)

  for arg in args:
    got_input = True
    template = Template(filename=arg,
                        module_directory=module_directory,
                        lookup=TemplateLookup(directories=['.']))
    template.render_context(ctx)

  if not got_input:
    out('Got nothing to do')
    showhelp()

  output_file.close()
Ejemplo n.º 3
0
def main(argv):
  got_input = False
  module_directory = None
  preprocessed_output = None
  dictionary = {}
  json_dict = {}
  got_output = False
  plugins = []
  output_name = None
  got_preprocessed_input = False

  try:
    opts, args = getopt.getopt(argv, 'hm:d:o:p:t:P:w:')
  except getopt.GetoptError:
    out('Unknown option')
    showhelp()
    sys.exit(2)

  for opt, arg in opts:
    if opt == '-h':
      out('Displaying showhelp')
      showhelp()
      sys.exit()
    elif opt == '-o':
      if got_output:
        out('Got more than one output')
        showhelp()
        sys.exit(3)
      got_output = True
      output_name = arg
    elif opt == '-m':
      if module_directory is not None:
        out('Got more than one cache directory')
        showhelp()
        sys.exit(4)
      module_directory = arg
    elif opt == '-P':
      assert not got_preprocessed_input
      assert json_dict == {}
      sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), 'plugins')))
      with open(arg, 'r') as dict_file:
        dictionary = pickle.load(dict_file)
      got_preprocessed_input = True
    elif opt == '-d':
      assert not got_preprocessed_input
      with open(arg, 'r') as dict_file:
        bunch.merge_json(json_dict, yaml.load(dict_file.read()))
    elif opt == '-p':
      plugins.append(import_plugin(arg))
    elif opt == '-w':
      preprocessed_output = arg

  if not got_preprocessed_input:
    for plugin in plugins:
      plugin.mako_plugin(json_dict)
    for k, v in json_dict.items():
      dictionary[k] = bunch.to_bunch(v)

  if preprocessed_output:
    with open(preprocessed_output, 'w') as dict_file:
      pickle.dump(dictionary, dict_file)

  cleared_dir = False
  for arg in args:
    got_input = True
    with open(arg) as f:
      srcs = list(yaml.load_all(f.read()))
    for src in srcs:
      if isinstance(src, basestring):
        assert len(srcs) == 1
        template = Template(src,
                            filename=arg,
                            module_directory=module_directory,
                            lookup=TemplateLookup(directories=['.']))
        with open(output_name, 'w') as output_file:
          template.render_context(Context(output_file, **dictionary))
      else:
        # we have optional control data: this template represents
        # a directory
        if not cleared_dir:
          if not os.path.exists(output_name):
            pass
          elif os.path.isfile(output_name):
            os.unlink(output_name)
          else:
            shutil.rmtree(output_name, ignore_errors=True)
          cleared_dir = True
        items = []
        if 'foreach' in src:
          for el in dictionary[src['foreach']]:
            if 'cond' in src:
              args = dict(dictionary)
              args['selected'] = el
              if not eval(src['cond'], {}, args):
                continue
            items.append(el)
          assert items
        else:
          items = [None]
        for item in items:
          args = dict(dictionary)
          args['selected'] = item
          item_output_name = os.path.join(
              output_name, Template(src['output_name']).render(**args))
          if not os.path.exists(os.path.dirname(item_output_name)):
            os.makedirs(os.path.dirname(item_output_name))
          template = Template(src['template'],
                              filename=arg,
                              module_directory=module_directory,
                              lookup=TemplateLookup(directories=['.']))
          with open(item_output_name, 'w') as output_file:
            template.render_context(Context(output_file, **args))

  if not got_input and not preprocessed_output:
    out('Got nothing to do')
    showhelp()
Ejemplo n.º 4
0
def main(argv):
    got_input = False
    module_directory = None
    dictionary = {}
    json_dict = {}
    got_output = False
    output_file = sys.stdout
    plugins = []

    try:
        opts, args = getopt.getopt(argv, 'hm:d:o:p:')
    except getopt.GetoptError:
        out('Unknown option')
        showhelp()
        sys.exit(2)

    for opt, arg in opts:
        if opt == '-h':
            out('Displaying showhelp')
            showhelp()
            sys.exit()
        elif opt == '-o':
            if got_output:
                out('Got more than one output')
                showhelp()
                sys.exit(3)
            got_output = True
            output_file = open(arg, 'w')
        elif opt == '-m':
            if module_directory is not None:
                out('Got more than one cache directory')
                showhelp()
                sys.exit(4)
            module_directory = arg
        elif opt == '-d':
            dict_file = open(arg, 'r')
            bunch.merge_json(json_dict, simplejson.loads(dict_file.read()))
            dict_file.close()
        elif opt == '-p':
            plugins.append(import_plugin(arg))

    for plugin in plugins:
        plugin.mako_plugin(json_dict)

    for k, v in json_dict.items():
        dictionary[k] = bunch.to_bunch(v)

    ctx = Context(output_file, **dictionary)

    for arg in args:
        got_input = True
        template = Template(filename=arg,
                            module_directory=module_directory,
                            lookup=TemplateLookup(directories=['.']))
        template.render_context(ctx)

    if not got_input:
        out('Got nothing to do')
        showhelp()

    output_file.close()