# Path: girlfriend/util/module.py
# def load_module(module_path, module_name=None, entry_point=None):
#     """根据不同形式的module_path来对模块进行加载
#        :param module_path
#               如果以冒号开头，那么加载指定entry_point注册的模块
#               如果以.py结尾，那么按照文件进行加载。
#               其它情况按照当前PYTHONPATH中的模块名进行加载
#        :return 如果加载成功，那么返回加载的模块对象
#                如果加载失败，那么返回None
#     """
# 
#     if module_path[0] == ":":
#         # 加载entry_point模块
#         if not entry_point:
#             raise InvalidArgumentException(u"必须指定entry_point参数")
#         module_path = module_path[1:]
#         for ep in pkg_resources.iter_entry_points(entry_point):
#             if ep.name == module_path:
#                 return ep.load()
#         return None
#     elif module_path.endswith(".py"):
#         # 加载文件模块
#         if module_name is None:
#             module_name = os.path.split(module_path)[1].split(".")[0]
#         if not os.path.exists(module_path):
#             raise InvalidArgumentException(u"找不到模块文件 '{}'".format(module_path))
#         return imp.load_source()
#     else:
#         # 按模块名称加载模块
#         return __import__(module_path, fromlist=[""])
# 
# Path: girlfriend/util/cmdargs.py
# def print_help(parser, color=None):
#     """输出帮助信息"""
#     help_text = []
#     for action in parser._actions:
#         if isinstance(action, argparse._HelpAction):
#             continue
#         option_strings = ",".join(action.option_strings)
#         help_text.append(u"{}  {}".format(option_strings, action.help))
#     print "\n", colored("\n".join(help_text), color)
# 
# Path: girlfriend/util/script.py
# def show_msg_and_exit(msg, color="red"):
#     """显示消息并退出程序
#     """
#     print colored(msg, color)
#     exit(0)


import os
import sys
import argparse
from girlfriend.util.module import load_module
from girlfriend.util.cmdargs import print_help
from girlfriend.util.script import show_msg_and_exit
# coding: utf-8

"""GirlFriend需要很多第三方的代码支持，比如自定义的插件、工作流等等，
这些第三方的代码和项目往往都是固定的格式，因此完全可以通过填充模板的方式来减少工作量。
gf_gen就是这种根据据设定好的模板生成代码和项目结构的工具。

Usage:
    gf_gen -t TEMPLATE_MODULE -p PROJECT_DIR --other_tpl_args xxxx
"""



def main():
    options = parse_cmd_args()
    if not options.template:
        show_msg_and_exit(u"您必须指定一个生成模板，比如 -t :workflow")
    tpl_module = load_module(options.template,
                             entry_point="girlfriend.code_template")
    if tpl_module is None:

# Path: girlfriend/util/module.py
# def load_module(module_path, module_name=None, entry_point=None):
#     """根据不同形式的module_path来对模块进行加载
#        :param module_path
#               如果以冒号开头，那么加载指定entry_point注册的模块
#               如果以.py结尾，那么按照文件进行加载。
#               其它情况按照当前PYTHONPATH中的模块名进行加载
#        :return 如果加载成功，那么返回加载的模块对象
#                如果加载失败，那么返回None
#     """
# 
#     if module_path[0] == ":":
#         # 加载entry_point模块
#         if not entry_point:
#             raise InvalidArgumentException(u"必须指定entry_point参数")
#         module_path = module_path[1:]
#         for ep in pkg_resources.iter_entry_points(entry_point):
#             if ep.name == module_path:
#                 return ep.load()
#         return None
#     elif module_path.endswith(".py"):
#         # 加载文件模块
#         if module_name is None:
#             module_name = os.path.split(module_path)[1].split(".")[0]
#         if not os.path.exists(module_path):
#             raise InvalidArgumentException(u"找不到模块文件 '{}'".format(module_path))
#         return imp.load_source()
#     else:
#         # 按模块名称加载模块
#         return __import__(module_path, fromlist=[""])
# 
# Path: girlfriend/util/cmdargs.py
# def print_help(parser, color=None):
#     """输出帮助信息"""
#     help_text = []
#     for action in parser._actions:
#         if isinstance(action, argparse._HelpAction):
#             continue
#         option_strings = ",".join(action.option_strings)
#         help_text.append(u"{}  {}".format(option_strings, action.help))
#     print "\n", colored("\n".join(help_text), color)
# 
# Path: girlfriend/util/script.py
# def show_msg_and_exit(msg, color="red"):
#     """显示消息并退出程序
#     """
#     print colored(msg, color)
#     exit(0)


# Path: girlfriend/tools/gf_gen.py
import os
import sys
import argparse
from girlfriend.util.module import load_module
from girlfriend.util.cmdargs import print_help
from girlfriend.util.script import show_msg_and_exit

# coding: utf-8

"""GirlFriend需要很多第三方的代码支持，比如自定义的插件、工作流等等，
这些第三方的代码和项目往往都是固定的格式，因此完全可以通过填充模板的方式来减少工作量。
gf_gen就是这种根据据设定好的模板生成代码和项目结构的工具。

Usage:
    gf_gen -t TEMPLATE_MODULE -p PROJECT_DIR --other_tpl_args xxxx
"""



def main():
    options = parse_cmd_args()
    if not options.template:
        show_msg_and_exit(u"您必须指定一个生成模板，比如 -t :workflow")
    tpl_module = load_module(options.template,
                             entry_point="girlfriend.code_template")
    if tpl_module is None:

        show_msg_and_exit(u"找不到模板模块 '{}'".format(options.template))