Seems good to me. On Mon, Sep 4, 2023 at 5:20 PM Khushboo Vashi < khushboo.va...@enterprisedb.com> wrote:
> Hello hackers, > > I am working on #2483 - Add pgAdmin users via a CLI or script call. > As we want a consistent and centralised CLI, I suggest replacing Argparse > with the Typer <https://pypi.org/project/typer/> package. > The main advantage of the Typer is that it decreases the complexity and is > built upon CLICK, the most used library for Python CLI. > > We will use the setup.py file for all the CLI modules; we can introduce > one function per CLI feature (per command) as described below. > So, the below line will cover all the combinations of Load server > functionality. > > @app.command() > def load_servers(loadservers: str, user: Optional[str] = None, sqlite_path: > Optional[str] = None, replace: Optional[bool] = False): > > > The command will be like this: > > python setup.py load-servers test.json > python setup.py load-servers test.json --replace > python setup.py load-servers a.json --user 't...@gmail.com' --replace > > > ====================================================================== > > An example of reducing complexity: > > *ArgParse code:* > > if __name__ == '__main__': >> # Configuration settings >> parser = argparse.ArgumentParser(description='Setup the pgAdmin config >> DB') > > > imp_group = parser.add_argument_group('Load server config') >> imp_group.add_argument('--load-servers', metavar="INPUT_FILE", >> help='Load servers into the DB', required=False) >> imp_group.add_argument('--replace', dest='replace', action='store_true', >> help='replace server configurations', >> required=False) > > > imp_group.set_defaults(replace=False) >> > > args, extra = parser.parse_known_args() > > > # What to do? >> if args.dump_servers is not None: >> try: >> dump_servers(args) >> except Exception as e: >> print(str(e)) > > ====================================================================== > > *Equivalent Typer code:* > > @app.command() >> >> def load_servers(loadservers: str, user: Optional[str] = None, sqlite_path: >> Optional[str] = None, replace: Optional[bool] = False): >> >> ....... >> app = typer.Typer() >> if __name__ == "__main__": >> app() > > > > If anyone has any suggestions/questions, do let me know. > > Thanks, > Khushboo > > >