#2483 - Add pgAdmin users via a CLI or script call

From: Khushboo Vashi <khushboo(dot)vashi(at)enterprisedb(dot)com>
To: pgadmin-hackers <pgadmin-hackers(at)postgresql(dot)org>
Subject: #2483 - Add pgAdmin users via a CLI or script call
Date: 2023-09-04 11:50:28
Message-ID: CAFOhELegGrRJH=wOOcCaH0fOeE3jDnvQk7Ca8hnLU_iGS_G-Hw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

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 'test(at)gmail(dot)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

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Dave Page 2023-09-04 14:36:11 [pgadmin-org/pgadmin4] e5c249: Remove version from SSL libs
Previous Message Akshay Joshi 2023-09-04 10:33:18 [pgadmin-org/pgadmin4] c0b868: Added Strategy, Locale Provider, ICU Locale, ICU R...