Esempio n. 1
0
 def retrieve_monolithe_config_from_folder(self):
     """
     """
     parser = self.folder_manager.get_monolithe_config()
     self.monolithe_config = MonolitheConfig()
     self.monolithe_config.set_config(parser)
     self.folder_manager.monolithe_config = self.monolithe_config
Esempio n. 2
0
 def retrieve_monolithe_config_from_repo(self, branch):
     """
     """
     parser = self.repository_manager.get_monolithe_config(branch=branch)
     self.monolithe_config = MonolitheConfig()
     self.monolithe_config.set_config(parser)
     self.repository_manager.monolithe_config = self.monolithe_config
Esempio n. 3
0
def main(argv=sys.argv):
    """
    """

    parser = argparse.ArgumentParser(description="SDK Documentation Generator")

    parser.add_argument("-c", "--config",
                        dest="config_path",
                        help="Path the monolithe configuration file",
                        required=True,
                        type=str)

    parser.add_argument("--vanilla-prefix",
                        dest="vanilla_prefix",
                        help="Prefix added to all vanilla path declared in the monolithe configuration file",
                        required=False,
                        type=str)

    args = parser.parse_args()

    monolithe_config = MonolitheConfig.config_with_path(args.config_path)

    if args.vanilla_prefix:
        monolithe_config.set_option("sdk_user_vanilla", "%s/%s" % (args.vanilla_prefix, monolithe_config.get_option("sdk_user_vanilla", "sdk")), "sdk")
        monolithe_config.set_option("sdkdoc_user_vanilla", "%s/%s" % (args.vanilla_prefix, monolithe_config.get_option("sdkdoc_user_vanilla", "sdkdoc")), "sdkdoc")
        monolithe_config.set_option("apidoc_user_vanilla", "%s/%s" % (args.vanilla_prefix, monolithe_config.get_option("apidoc_user_vanilla", "apidoc")), "apidoc")

    generator = SDKDocGenerator(monolithe_config=monolithe_config)
    generator.generate()
Esempio n. 4
0
 def retrieve_monolithe_config_from_repo(self, branch):
     """
     """
     parser = self.repository_manager.get_monolithe_config(branch=branch)
     self.monolithe_config = MonolitheConfig()
     self.monolithe_config.set_config(parser)
     self.repository_manager.monolithe_config = self.monolithe_config
Esempio n. 5
0
 def retrieve_monolithe_config_from_folder(self):
     """
     """
     parser = self.folder_manager.get_monolithe_config()
     self.monolithe_config = MonolitheConfig()
     self.monolithe_config.set_config(parser)
     self.folder_manager.monolithe_config = self.monolithe_config
Esempio n. 6
0
    def setUp(self):
        """ Generate a new SDK

        """
        base_path = self.get_base_path()

        monolithe_config = MonolitheConfig.config_with_path("%s/conf/conf.ini" % base_path)
        generator = SDKGenerator(monolithe_config=monolithe_config)
        generator.generate_from_folder(folder="%s/specifications" % base_path)
Esempio n. 7
0
 def retrieve_monolithe_config_from_folder(self, language="python"):
     """
     """
     parser = self.folder_manager.get_monolithe_config()
     self.monolithe_config = MonolitheConfig()
     self.monolithe_config.set_config(parser)
     self.monolithe_config.language = language
     self.folder_manager.monolithe_config = self.monolithe_config
     return self.monolithe_config
    def setUp(self):
        """ Generate SDK Documentation

        """
        base_path = self.get_base_path()

        monolithe_config = MonolitheConfig.config_with_path("%s/conf/conf.ini" % base_path)
        doc_generator = SDKDocGenerator(monolithe_config=monolithe_config)
        doc_generator.generate()
    def setUp(self):
        """ Generate SDK Documentation

        """
        base_path = self.get_base_path()

        monolithe_config = MonolitheConfig.config_with_path("%s/conf/conf.ini" % base_path)
        doc_generator = SDKDocGenerator(monolithe_config=monolithe_config)
        doc_generator.generate()
Esempio n. 10
0
    def setUp(self):
        """ Generate a new SDK

        """
        base_path = self.get_base_path()

        monolithe_config = MonolitheConfig.config_with_path("%s/conf/conf.ini" % base_path)
        generator = SDKGenerator(monolithe_config=monolithe_config)
        generator.initialize_folder_manager(folder="%s/specifications" % base_path)
        generator.generate_from_folder()
Esempio n. 11
0
    def setUp(self):
        """ Generate API Documentation

        """
        base_path = self.get_base_path()

        monolithe_config = MonolitheConfig.config_with_path("%s/conf/conf.ini" % base_path)
        generator = APIDocumentationGenerator(monolithe_config=monolithe_config)
        generator.initialize_folder_manager(folder="%s/specifications" % base_path)
        generator.generate_from_folder()
Esempio n. 12
0
    def setUp(self):
        """ Generate API Documentation

        """
        base_path = self.get_base_path()

        monolithe_config = MonolitheConfig.config_with_path(
            "%s/conf/conf.ini" % base_path)
        generator = APIDocumentationGenerator(
            monolithe_config=monolithe_config)
        generator.generate_from_folder(folder="%s/specifications" % base_path)
Esempio n. 13
0
class Generator(object):

    def __init__(self, monolithe_config):
        """
        """
        self.monolithe_config = monolithe_config

    def initialize_folder_manager(self, folder):
        """
        """
        self.folder_manager = FolderManager(folder=folder, monolithe_config=self.monolithe_config)

    def retrieve_monolithe_config_from_folder(self, language="python"):
        """
        """
        parser = self.folder_manager.get_monolithe_config()
        self.monolithe_config = MonolitheConfig()
        self.monolithe_config.set_config(parser)
        self.monolithe_config.language = language
        self.folder_manager.monolithe_config = self.monolithe_config
        return self.monolithe_config

    def generate_from_folder(self):
        """
        """
        specification_info = []

        Printer.log("retrieving specifications from folder \"%s\"" % (self.folder_manager.folder))
        api_info = self.folder_manager.get_api_info()
        specifications = self.folder_manager.get_all_specifications()
        self._resolve_parent_apis(specifications)
        specification_info.append({"specifications": specifications, "api": api_info})
        Printer.log("%d specifications retrieved from folder \"%s\" (api version: %s)" % (len(specifications), self.folder_manager.folder, api_info["version"]))

        self.generate(specification_info=specification_info)

    def initialize_repository_manager(self, api_url, login_or_token, password, organization, repository, repository_path):
        """
        """
        self.repository_manager = RepositoryManager(monolithe_config=self.monolithe_config,
                                                    api_url=api_url,
                                                    login_or_token=login_or_token,
                                                    password=password,
                                                    organization=organization,
                                                    repository=repository,
                                                    repository_path=repository_path)

    def retrieve_monolithe_config_from_repo(self, branch, language):
        """
        """
        parser = self.repository_manager.get_monolithe_config(branch=branch)
        self.monolithe_config = MonolitheConfig()
        self.monolithe_config.set_config(parser)
        self.monolithe_config.language = language
        self.repository_manager.monolithe_config = self.monolithe_config
        return self.monolithe_config

    def generate_from_repo(self, branches):
        """
        """
        specification_info = []

        for branch in branches:
            Printer.log("retrieving specifications from github \"%s/%s%s@%s\"" % (self.repository_manager.organization.lower(), self.repository_manager.repository.lower(), self.repository_manager.repository_path, branch))
            api_info = self.repository_manager.get_api_info(branch=branch)
            specifications = self.repository_manager.get_all_specifications(branch=branch)
            self._resolve_parent_apis(specifications)
            specification_info.append({"specifications": specifications, "api": api_info})
            Printer.log("%d specifications retrieved from branch \"%s\" (api version: %s)" % (len(specifications), branch, api_info["version"]))

        self.generate(specification_info=specification_info)

    def generate(self, specification_info):
        """
        """
        pass

    def install_user_vanilla(self, user_vanilla_path, output_path, multi_lang=True):
        """
        """
        if not user_vanilla_path or not len(user_vanilla_path):
            return

        if multi_lang:
            user_vanilla_path = os.path.join(user_vanilla_path, self.monolithe_config.language)
        else:
            user_vanilla_path = os.path.join(user_vanilla_path)

        if not os.path.exists(user_vanilla_path):
            Printer.warn("Could not find user vanilla folder at path %s. Ignoring" % user_vanilla_path)
            return

        for item in os.listdir(user_vanilla_path):
            s = os.path.join(user_vanilla_path, item)
            d = os.path.join(output_path, item)
            if os.path.isdir(s):
                shutil.copytree(s, d, False, None)
            else:
                shutil.copy2(s, d)

    # Utilities
    def _resolve_parent_apis(self, specifications):
        """
        """

        # certainly not the best algo ever... but I need to get somthing done :)
        for specification_rest_name, specification in specifications.items():

            for rest_name, remote_spec in specifications.items():

                for related_child_api in remote_spec.child_apis:

                    if related_child_api.rest_name == specification.rest_name:

                        parent_api = SpecificationAPI(specification=specification)
                        parent_api.rest_name = related_child_api.rest_name
                        if specification.allows_get:
                            parent_api.allows_get = True
                        if specification.allows_create:
                            parent_api.allows_create = True
                        if specification.allows_update:
                            parent_api.allows_update = True
                        if specification.allows_delete:
                            parent_api.allows_Delete = True

                        specification.parent_apis.append(parent_api)
Esempio n. 14
0
 def get_monolithe_config(self, config_path):
     if config_path is None:
         config_path = "%s/monolithe.ini" % self.folder
     return MonolitheConfig(config_path)
Esempio n. 15
0
class Generator(object):
    def __init__(self, monolithe_config):
        """
        """
        self.monolithe_config = monolithe_config

    def initialize_folder_manager(self, folder):
        """
        """
        self.folder_manager = FolderManager(
            folder=folder, monolithe_config=self.monolithe_config)

    def retrieve_monolithe_config_from_folder(self):
        """
        """
        parser = self.folder_manager.get_monolithe_config()
        self.monolithe_config = MonolitheConfig()
        self.monolithe_config.set_config(parser)
        self.folder_manager.monolithe_config = self.monolithe_config

    def generate_from_folder(self):
        """
        """
        specification_info = []

        Printer.log("retrieving specifications from folder \"%s\"" %
                    (self.folder_manager.folder))
        api_info = self.folder_manager.get_api_info()
        specifications = self.folder_manager.get_all_specifications()
        self._resolve_parent_apis(specifications)
        specification_info.append({
            "specifications": specifications,
            "api": api_info
        })
        Printer.log(
            "%d specifications retrieved from folder \"%s\" (api version: %s)"
            % (len(specifications), self.folder_manager.folder,
               api_info["version"]))

        self.generate(specification_info=specification_info)

    def initialize_repository_manager(self, api_url, login_or_token, password,
                                      organization, repository,
                                      repository_path):
        """
        """
        self.repository_manager = RepositoryManager(
            monolithe_config=self.monolithe_config,
            api_url=api_url,
            login_or_token=login_or_token,
            password=password,
            organization=organization,
            repository=repository,
            repository_path=repository_path)

    def retrieve_monolithe_config_from_repo(self, branch):
        """
        """
        parser = self.repository_manager.get_monolithe_config(branch=branch)
        self.monolithe_config = MonolitheConfig()
        self.monolithe_config.set_config(parser)
        self.repository_manager.monolithe_config = self.monolithe_config

    def generate_from_repo(self, branches):
        """
        """
        specification_info = []

        for branch in branches:
            Printer.log(
                "retrieving specifications from github \"%s/%s%s@%s\"" %
                (self.repository_manager.organization.lower(),
                 self.repository_manager.repository.lower(),
                 self.repository_manager.repository_path, branch))
            api_info = self.repository_manager.get_api_info(branch=branch)
            specifications = self.repository_manager.get_all_specifications(
                branch=branch)
            self._resolve_parent_apis(specifications)
            specification_info.append({
                "specifications": specifications,
                "api": api_info
            })
            Printer.log(
                "%d specifications retrieved from branch \"%s\" (api version: %s)"
                % (len(specifications), branch, api_info["version"]))

        self.generate(specification_info=specification_info)

    def generate(self, specification_info):
        """
        """
        pass

    def install_system_vanilla(self, current_file, output_path):
        """
        """
        if os.path.exists(output_path):
            shutil.rmtree(output_path)

        system_vanilla_path = os.path.join(os.path.dirname(current_file),
                                           "vanilla")
        shutil.copytree(system_vanilla_path, output_path)

    def install_user_vanilla(self, user_vanilla_path, output_path):
        """
        """
        if not user_vanilla_path or not len(user_vanilla_path):
            return

        if not os.path.exists(user_vanilla_path):
            Printer.raiseError(
                "Could not find user vanilla folder at path %s" %
                user_vanilla_path)

        for item in os.listdir(user_vanilla_path):
            s = os.path.join(user_vanilla_path, item)
            d = os.path.join(output_path, item)
            if os.path.isdir(s):
                shutil.copytree(s, d, False, None)
            else:
                shutil.copy2(s, d)

    ## Utilities

    def _resolve_parent_apis(self, specifications):
        """
        """

        # certainly not the best algo ever... but I need to get somthing done :)
        for specification_rest_name, specification in specifications.iteritems(
        ):

            for rest_name, remote_spec in specifications.iteritems():

                for related_child_api in remote_spec.child_apis:

                    if related_child_api.remote_specification_name == specification.rest_name:

                        parent_api = SpecificationAPI(
                            remote_specification_name=related_child_api.
                            remote_specification_name,
                            specification=specification)

                        if specification.allows_get:
                            parent_api.allows_get = True
                        if specification.allows_create:
                            parent_api.allows_create = True
                        if specification.allows_update:
                            parent_api.allows_update = True
                        if specification.allows_delete:
                            parent_api.allows_Delete = True

                        specification.parent_apis.append(parent_api)
Esempio n. 16
0
def main(argv=sys.argv):
    """
    """
    parser = argparse.ArgumentParser(description="Generates an API documentation from a specification set")

    parser.add_argument("-g", "--github",
                        dest="api_url",
                        metavar="github_api_url",
                        help="The GitHub API URL. Can be given by setting the environment variable \"MONOLITHE_GITHUB_API_URL\"",
                        type=str)

    parser.add_argument("-l", "--login",
                        dest="login",
                        metavar="login_login",
                        help="The GitHub Login (if set, you will be prompted for your password). Can be given by setting the environment variable \"MONOLITHE_GITHUB_LOGIN\"",
                        type=str)

    parser.add_argument("-t", "--token",
                        dest="token",
                        metavar="github_token",
                        help="The GitHub Token (if set, --login will be ignored). To generate a token, go here https://github.com/settings/tokens. Can be given by setting the environment variable \"$MONOLITHE_GITHUB_TOKEN\"",
                        type=str)

    parser.add_argument("-o", "--organization",
                        dest="organization",
                        metavar="github_organization",
                        help="The GitHub Organization. Can be given by setting the environment variable \"MONOLITHE_GITHUB_ORGANIZATION\"",
                        type=str)

    parser.add_argument("-r", "--repository",
                        dest="repository",
                        metavar="github_repository",
                        help="The GitHub Repository. Can be given by setting the environment variable \"MONOLITHE_GITHUB_REPOSITORY\"",
                        type=str)

    parser.add_argument("-p", "--path",
                        dest="repository_path",
                        metavar="path",
                        help="The relative repository path of the specification folder. Can be given by setting the environment variable \"MONOLITHE_GITHUB_REPOSITORY_PATH\"",
                        type=str)

    parser.add_argument("-b", "--branches",
                        dest="branches",
                        metavar="branches",
                        help="The branches of the specifications to use to generate the documentation (examples: \"master 3.2\")",
                        nargs="*",
                        type=str)

    parser.add_argument("-f", "--folder",
                        dest="folder",
                        metavar="folder",
                        help="Path of the specifications folder. If set, all other attributes will be ignored",
                        type=str)

    parser.add_argument("-c", "--config",
                        dest="config_path",
                        metavar="config_path",
                        help="Path the monolithe configuration file",
                        type=str)

    parser.add_argument("--vanilla-prefix",
                        dest="vanilla_prefix",
                        help="Prefix added to all vanilla path declared in the monolithe configuration file",
                        required=False,
                        type=str)

    args = parser.parse_args()

    monolithe_config = None
    if args.config_path:
        monolithe_config = MonolitheConfig.config_with_path(args.config_path)

    if monolithe_config and args.vanilla_prefix:
        monolithe_config.set_option("sdk_user_vanilla", "%s/%s" % (args.vanilla_prefix, monolithe_config.get_option("sdk_user_vanilla", "sdk")), "sdk")
        monolithe_config.set_option("sdkdoc_user_vanilla", "%s/%s" % (args.vanilla_prefix, monolithe_config.get_option("sdkdoc_user_vanilla", "sdkdoc")), "sdkdoc")
        monolithe_config.set_option("apidoc_user_vanilla", "%s/%s" % (args.vanilla_prefix, monolithe_config.get_option("apidoc_user_vanilla", "apidoc")), "apidoc")

    generator = APIDocumentationGenerator(monolithe_config=monolithe_config)

    if args.folder:
        generator.initialize_folder_manager(folder=args.folder)
        if not monolithe_config: generator.retrieve_monolithe_config_from_folder()
        generator.generate_from_folder()
    else:
        # Use environment variable if necessary
        if not args.api_url and "MONOLITHE_GITHUB_API_URL" in os.environ:
            args.api_url = os.environ["MONOLITHE_GITHUB_API_URL"]

        if not args.token and not args.login:

            if "MONOLITHE_GITHUB_TOKEN" in os.environ:
                args.token = os.environ["MONOLITHE_GITHUB_TOKEN"]

            elif "MONOLITHE_GITHUB_LOGIN" in os.environ:
                args.login = os.environ["MONOLITHE_GITHUB_LOGIN"]

        if not args.organization and "MONOLITHE_GITHUB_ORGANIZATION" in os.environ:
            args.organization = os.environ["MONOLITHE_GITHUB_ORGANIZATION"]

        if not args.repository and "MONOLITHE_GITHUB_REPOSITORY" in os.environ:
            args.repository = os.environ["MONOLITHE_GITHUB_REPOSITORY"]

        if not args.repository_path and "MONOLITHE_GITHUB_REPOSITORY_PATH" in os.environ:
            args.repository_path = os.environ["MONOLITHE_GITHUB_REPOSITORY_PATH"]

        if not args.config_path and "MONOLITHE_CONFIG_PATH" in os.environ:
            args.config_path = os.environ["MONOLITHE_CONFIG_PATH"]

        if not args.login and not args.token:
            args.login = raw_input("Enter your GitHub login: "******"/"

        # Ask for password
        if args.login:
            password = getpass.getpass(prompt="Enter your GitHub password for %s: " % args.login)
            login_or_token = args.login
        else:
            password = None
            login_or_token = args.token

        generator.initialize_repository_manager(api_url=args.api_url,
                                                login_or_token=login_or_token,
                                                password=password,
                                                organization=args.organization,
                                                repository=args.repository,
                                                repository_path=args.repository_path)

        if not monolithe_config: generator.retrieve_monolithe_config_from_repo(branch=args.branches[0])
        generator.generate_from_repo(branches=args.branches)
Esempio n. 17
0
def main(argv=sys.argv):
    """

    """
    parser = argparse.ArgumentParser(
        description="Generates a SDK according from a specification set")

    parser.add_argument(
        "-g",
        "--github",
        dest="api_url",
        metavar="github_api_url",
        help=
        "The GitHub API URL. Can be given by setting the environment variable \"MONOLITHE_GITHUB_API_URL\"",
        type=str)

    parser.add_argument(
        "-l",
        "--login",
        dest="login",
        metavar="login_login",
        help=
        "The GitHub Login (if set, you will be prompted for your password). Can be given by setting the environment variable \"MONOLITHE_GITHUB_LOGIN\"",
        type=str)

    parser.add_argument(
        "-t",
        "--token",
        dest="token",
        metavar="github_token",
        help=
        "The GitHub Token (if set, --login will be ignored). To generate a token, go here https://github.com/settings/tokens. Can be given by setting the environment variable \"$MONOLITHE_GITHUB_TOKEN\"",
        type=str)

    parser.add_argument(
        "-o",
        "--organization",
        dest="organization",
        metavar="github_organization",
        help=
        "The GitHub Organization. Can be given by setting the environment variable \"MONOLITHE_GITHUB_ORGANIZATION\"",
        type=str)

    parser.add_argument(
        "-r",
        "--repository",
        dest="repository",
        metavar="github_repository",
        help=
        "The GitHub Repository. Can be given by setting the environment variable \"MONOLITHE_GITHUB_REPOSITORY\"",
        type=str)

    parser.add_argument(
        "-b",
        "--branches",
        dest="branches",
        metavar="branches",
        help=
        "The branches of the specifications to use to generate the documentation (examples: \"master 3.2\")",
        nargs="*",
        type=str)

    parser.add_argument(
        "-p",
        "--path",
        dest="repository_path",
        metavar="path",
        help=
        "The relative repository path of the specification folder. Can be given by setting the environment variable \"MONOLITHE_GITHUB_REPOSITORY_PATH\"",
        type=str)

    parser.add_argument(
        "-f",
        "--folder",
        dest="folder",
        metavar="folder",
        help=
        "Path of the specifications folder. If set, all other attributes will be ignored",
        type=str)

    parser.add_argument("-c",
                        "--config",
                        dest="config_path",
                        metavar="config_path",
                        help="Path the monolithe configuration file",
                        type=str)

    parser.add_argument("-d",
                        "--doc",
                        dest="generate_doc",
                        help="generate documentation of the SDK",
                        action="store_true")

    parser.add_argument(
        "--vanilla-prefix",
        dest="vanilla_prefix",
        help=
        "Prefix added to all vanilla path declared in the monolithe configuration file",
        required=False,
        type=str)

    args = parser.parse_args()

    monolithe_config = None
    if args.config_path:
        monolithe_config = MonolitheConfig.config_with_path(args.config_path)

    if monolithe_config and args.vanilla_prefix:
        monolithe_config.set_option(
            "sdk_user_vanilla",
            "%s/%s" % (args.vanilla_prefix,
                       monolithe_config.get_option("sdk_user_vanilla", "sdk")),
            "sdk")
        monolithe_config.set_option(
            "sdkdoc_user_vanilla", "%s/%s" %
            (args.vanilla_prefix,
             monolithe_config.get_option("sdkdoc_user_vanilla", "sdkdoc")),
            "sdkdoc")
        monolithe_config.set_option(
            "apidoc_user_vanilla", "%s/%s" %
            (args.vanilla_prefix,
             monolithe_config.get_option("apidoc_user_vanilla", "apidoc")),
            "apidoc")

    generator = SDKGenerator(monolithe_config=monolithe_config)

    if args.folder:
        generator.initialize_folder_manager(folder=args.folder)
        if not monolithe_config:
            generator.retrieve_monolithe_config_from_folder()
        generator.generate_from_folder()

    else:
        # Use environment variable if necessary
        if not args.api_url and "MONOLITHE_GITHUB_API_URL" in os.environ:
            args.api_url = os.environ["MONOLITHE_GITHUB_API_URL"]

        if not args.token and not args.login:

            if "MONOLITHE_GITHUB_TOKEN" in os.environ:
                args.token = os.environ["MONOLITHE_GITHUB_TOKEN"]

            elif "MONOLITHE_GITHUB_LOGIN" in os.environ:
                args.login = os.environ["MONOLITHE_GITHUB_LOGIN"]

        if not args.organization and "MONOLITHE_GITHUB_ORGANIZATION" in os.environ:
            args.organization = os.environ["MONOLITHE_GITHUB_ORGANIZATION"]

        if not args.repository and "MONOLITHE_GITHUB_REPOSITORY" in os.environ:
            args.repository = os.environ["MONOLITHE_GITHUB_REPOSITORY"]

        if not args.repository_path and "MONOLITHE_GITHUB_REPOSITORY_PATH" in os.environ:
            args.repository_path = os.environ[
                "MONOLITHE_GITHUB_REPOSITORY_PATH"]

        if not args.config_path and "MONOLITHE_CONFIG_PATH" in os.environ:
            args.config_path = os.environ["MONOLITHE_CONFIG_PATH"]

        # Additional validation
        if not args.login and not args.token:
            args.login = raw_input("Enter your GitHub login: "******"/"

        # Ask for password
        if args.login:
            password = getpass.getpass(
                prompt="Enter your GitHub password for %s: " % args.login)
            login_or_token = args.login
        else:
            password = None
            login_or_token = args.token

        generator.initialize_repository_manager(
            api_url=args.api_url,
            login_or_token=login_or_token,
            password=password,
            organization=args.organization,
            repository=args.repository,
            repository_path=args.repository_path)

        if not monolithe_config:
            generator.retrieve_monolithe_config_from_repo(
                branch=args.branches[0])
        generator.generate_from_repo(branches=args.branches)

    # Generate SDK documentation
    if args.generate_doc:
        doc_generator = SDKDocGenerator(monolithe_config=monolithe_config)
        doc_generator.generate()
Esempio n. 18
0
def main(argv=sys.argv):
    """

    """
    parser = argparse.ArgumentParser(description="Generates a SDK according from a specification set")

    parser.add_argument("-g", "--github",
                        dest="api_url",
                        metavar="github_api_url",
                        help="The GitHub API URL. Can be given by setting the environment variable \"MONOLITHE_GITHUB_API_URL\"",
                        type=str)

    parser.add_argument("-l", "--login",
                        dest="login",
                        metavar="login_login",
                        help="The GitHub Login (if set, you will be prompted for your password). Can be given by setting the environment variable \"MONOLITHE_GITHUB_LOGIN\"",
                        type=str)

    parser.add_argument("-t", "--token",
                        dest="token",
                        metavar="github_token",
                        help="The GitHub Token (if set, --login will be ignored). To generate a token, go here https://github.com/settings/tokens. Can be given by setting the environment variable \"$MONOLITHE_GITHUB_TOKEN\"",
                        type=str)

    parser.add_argument("-o", "--organization",
                        dest="organization",
                        metavar="github_organization",
                        help="The GitHub Organization. Can be given by setting the environment variable \"MONOLITHE_GITHUB_ORGANIZATION\"",
                        type=str)

    parser.add_argument("-r", "--repository",
                        dest="repository",
                        metavar="github_repository",
                        help="The GitHub Repository. Can be given by setting the environment variable \"MONOLITHE_GITHUB_REPOSITORY\"",
                        type=str)

    parser.add_argument("-b", "--branches",
                        dest="branches",
                        metavar="branches",
                        help="The branches of the specifications to use to generate the documentation (examples: \"master 3.2\")",
                        nargs="*",
                        type=str)

    parser.add_argument("-p", "--path",
                        dest="repository_path",
                        metavar="path",
                        help="The relative repository path of the specification folder. Can be given by setting the environment variable \"MONOLITHE_GITHUB_REPOSITORY_PATH\"",
                        type=str)

    parser.add_argument("-f", "--folder",
                        dest="folder",
                        metavar="folder",
                        help="Path of the specifications folder. If set, all other attributes will be ignored",
                        type=str)

    parser.add_argument("-c", "--config",
                        dest="config_path",
                        metavar="config_path",
                        help="Path the monolithe configuration file",
                        type=str)

    parser.add_argument("-d", "--doc",
                        dest="generate_doc",
                        help="generate documentation of the SDK",
                        action="store_true")

    parser.add_argument("--vanilla-prefix",
                        dest="vanilla_prefix",
                        help="Prefix added to all vanilla path declared in the monolithe configuration file",
                        required=False,
                        type=str)

    parser.add_argument("--generation-version",
                        dest="generation_version",
                        help="Overwrite the sdk version given in monolithe.conf",
                        required=False,
                        type=str)

    parser.add_argument("-L", "--language",
                        dest="language",
                        help="Choose the output language of the SDK. Default is python",
                        default='python',
                        type=str)

    args = parser.parse_args()

    monolithe_config = None
    if args.config_path:
        monolithe_config = MonolitheConfig.config_with_path(args.config_path)

    if monolithe_config and args.vanilla_prefix:
        monolithe_config.set_option("user_vanilla", "%s/%s" % (args.vanilla_prefix, monolithe_config.get_option("user_vanilla", "transformer")), "transformer")

    if monolithe_config and args.generation_version:
        monolithe_config.set_option("version", args.generation_version, "transformer")

    if monolithe_config:
        monolithe_config.language = args.language

    generator = SDKGenerator(monolithe_config=monolithe_config)

    if args.folder:
        generator.initialize_folder_manager(folder=args.folder)
        if not monolithe_config:
            monolithe_config = generator.retrieve_monolithe_config_from_folder(language=args.language)
        generator.generate_from_folder()

    else:
        if not args.branches:
            print("You must provide the --branches options. Use --help for help.")
            sys.exit(1)

        # Use environment variable if necessary
        if not args.api_url and "MONOLITHE_GITHUB_API_URL" in os.environ:
            args.api_url = os.environ["MONOLITHE_GITHUB_API_URL"]

        if not args.token and not args.login:

            if "MONOLITHE_GITHUB_TOKEN" in os.environ:
                args.token = os.environ["MONOLITHE_GITHUB_TOKEN"]

            elif "MONOLITHE_GITHUB_LOGIN" in os.environ:
                args.login = os.environ["MONOLITHE_GITHUB_LOGIN"]

        if not args.organization and "MONOLITHE_GITHUB_ORGANIZATION" in os.environ:
            args.organization = os.environ["MONOLITHE_GITHUB_ORGANIZATION"]

        if not args.repository and "MONOLITHE_GITHUB_REPOSITORY" in os.environ:
            args.repository = os.environ["MONOLITHE_GITHUB_REPOSITORY"]

        if not args.repository_path and "MONOLITHE_GITHUB_REPOSITORY_PATH" in os.environ:
            args.repository_path = os.environ["MONOLITHE_GITHUB_REPOSITORY_PATH"]

        if not args.config_path and "MONOLITHE_CONFIG_PATH" in os.environ:
            args.config_path = os.environ["MONOLITHE_CONFIG_PATH"]

        if not args.repository_path:
            args.repository_path = "/"

        login_or_token = None
        password = None
        if args.token:
            password = None
            login_or_token = args.token
        elif args.login:
            login_or_token = args.login
            password = getpass.getpass(prompt="Enter your GitHub password for %s: " % args.login)

        generator.initialize_repository_manager(api_url=args.api_url,
                                                login_or_token=login_or_token,
                                                password=password,
                                                organization=args.organization,
                                                repository=args.repository,
                                                repository_path=args.repository_path)
        if not monolithe_config:
            monolithe_config = generator.retrieve_monolithe_config_from_repo(branch=args.branches[0], language=args.language)

        generator.generate_from_repo(branches=args.branches)

    # Generate SDK documentation
    if args.generate_doc:
        generator.generate_documentation()