15f9996aaSopenharmony_ci#!/usr/bin/env python3
25f9996aaSopenharmony_ci# -*- coding: utf-8 -*-
35f9996aaSopenharmony_ci
45f9996aaSopenharmony_ci#
55f9996aaSopenharmony_ci# Copyright (c) 2023 Huawei Device Co., Ltd.
65f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
75f9996aaSopenharmony_ci# you may not use this file except in compliance with the License.
85f9996aaSopenharmony_ci# You may obtain a copy of the License at
95f9996aaSopenharmony_ci#
105f9996aaSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
115f9996aaSopenharmony_ci#
125f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
135f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
145f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
155f9996aaSopenharmony_ci# See the License for the specific language governing permissions and
165f9996aaSopenharmony_ci# limitations under the License.
175f9996aaSopenharmony_ci#
185f9996aaSopenharmony_ci
195f9996aaSopenharmony_ciimport argparse
205f9996aaSopenharmony_ci
215f9996aaSopenharmony_cifrom exceptions.ohos_exception import OHOSException
225f9996aaSopenharmony_cifrom containers.status import throw_exception
235f9996aaSopenharmony_ci
245f9996aaSopenharmony_ci
255f9996aaSopenharmony_ciclass ArgsFactory():
265f9996aaSopenharmony_ci
275f9996aaSopenharmony_ci    @staticmethod
285f9996aaSopenharmony_ci    @throw_exception
295f9996aaSopenharmony_ci    def genetic_add_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
305f9996aaSopenharmony_ci        if arg['arg_type'] == 'bool':
315f9996aaSopenharmony_ci            return _add_bool_option(parser, arg)
325f9996aaSopenharmony_ci        elif arg['arg_type'] == 'str':
335f9996aaSopenharmony_ci            return _add_str_option(parser, arg)
345f9996aaSopenharmony_ci        elif arg['arg_type'] == 'list':
355f9996aaSopenharmony_ci            return _add_list_option(parser, arg)
365f9996aaSopenharmony_ci        elif arg['arg_type'] == 'subparsers':
375f9996aaSopenharmony_ci            return _add_list_option(parser, arg)
385f9996aaSopenharmony_ci        else:
395f9996aaSopenharmony_ci            raise OHOSException('Unknown arg type "{}" for arg "{}"'
405f9996aaSopenharmony_ci                                .format(arg['arg_type'], arg['arg_name']), "0003")
415f9996aaSopenharmony_ci
425f9996aaSopenharmony_ci
435f9996aaSopenharmony_cidef _add_bool_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
445f9996aaSopenharmony_ci    if arg['arg_attribute'].get('abbreviation'):
455f9996aaSopenharmony_ci        return _add_bool_abbreviation_option(parser, arg)
465f9996aaSopenharmony_ci    else:
475f9996aaSopenharmony_ci        return parser.add_argument(arg['arg_name'], help=arg['arg_help'], nargs='?',
485f9996aaSopenharmony_ci                                   default=arg['argDefault'])
495f9996aaSopenharmony_ci
505f9996aaSopenharmony_ci
515f9996aaSopenharmony_cidef _add_str_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
525f9996aaSopenharmony_ci    if arg['arg_attribute'].get('optional'):
535f9996aaSopenharmony_ci        if arg['arg_attribute'].get('abbreviation'):
545f9996aaSopenharmony_ci            return _add_str_optional_abbreviation_option(parser, arg)
555f9996aaSopenharmony_ci        else:
565f9996aaSopenharmony_ci            return _add_str_optional_option(parser, arg)
575f9996aaSopenharmony_ci    elif arg['arg_attribute'].get('abbreviation'):
585f9996aaSopenharmony_ci        return _add_str_abbreviation_option(parser, arg)
595f9996aaSopenharmony_ci    else:
605f9996aaSopenharmony_ci        return parser.add_argument(arg['arg_name'], help=arg['arg_help'],
615f9996aaSopenharmony_ci                                   default=arg['argDefault'])
625f9996aaSopenharmony_ci
635f9996aaSopenharmony_ci
645f9996aaSopenharmony_cidef _add_list_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
655f9996aaSopenharmony_ci    if arg['arg_attribute'].get('abbreviation'):
665f9996aaSopenharmony_ci        return _add_list_abbreviation_option(parser, arg)
675f9996aaSopenharmony_ci    else:
685f9996aaSopenharmony_ci        return parser.add_argument(arg['arg_name'], help=arg['arg_help'],
695f9996aaSopenharmony_ci                                   nargs='*', default=arg['argDefault'], action='append')
705f9996aaSopenharmony_ci
715f9996aaSopenharmony_ci
725f9996aaSopenharmony_cidef _add_bool_abbreviation_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
735f9996aaSopenharmony_ci    return parser.add_argument(arg['arg_attribute'].get('abbreviation'), arg['arg_name'], help=arg['arg_help'],
745f9996aaSopenharmony_ci                               nargs='?', default=arg['argDefault'])
755f9996aaSopenharmony_ci
765f9996aaSopenharmony_ci
775f9996aaSopenharmony_cidef _add_str_abbreviation_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
785f9996aaSopenharmony_ci    return parser.add_argument(arg['arg_attribute'].get('abbreviation'), arg['arg_name'], help=arg['arg_help'],
795f9996aaSopenharmony_ci                               default=arg['argDefault'])
805f9996aaSopenharmony_ci
815f9996aaSopenharmony_ci
825f9996aaSopenharmony_cidef _add_str_optional_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
835f9996aaSopenharmony_ci    return parser.add_argument(arg['arg_name'], help=arg['arg_help'],
845f9996aaSopenharmony_ci                               default=arg['argDefault'], choices=arg['arg_attribute'].get('optional'))
855f9996aaSopenharmony_ci
865f9996aaSopenharmony_ci
875f9996aaSopenharmony_cidef _add_str_optional_abbreviation_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
885f9996aaSopenharmony_ci    return parser.add_argument(arg['arg_attribute'].get('abbreviation'), arg['arg_name'], help=arg['arg_help'],
895f9996aaSopenharmony_ci                               default=arg['argDefault'], choices=arg['arg_attribute'].get('optional'))
905f9996aaSopenharmony_ci
915f9996aaSopenharmony_ci
925f9996aaSopenharmony_cidef _add_list_abbreviation_option(parser: argparse.ArgumentParser, arg: dict) -> argparse.ArgumentParser:
935f9996aaSopenharmony_ci    return parser.add_argument(arg['arg_attribute'].get('abbreviation'), arg['arg_name'], help=arg['arg_help'],
945f9996aaSopenharmony_ci                               nargs='*', default=arg['argDefault'], action='append')
95