Common objects for CLI commands with Typer
2QdxY4RzWzUUiLuE at potatochowder.com
2QdxY4RzWzUUiLuE at potatochowder.com
Sat Sep 21 06:40:37 EDT 2024
On 2024-09-21 at 06:38:05 +0100,
Barry via Python-list <python-list at python.org> wrote:
> > On 20 Sep 2024, at 21:01, Loris Bennett via Python-list <python-list at python.org> wrote:
> >
> > Hi,
> >
> > Apologies if the following description is to brief - I can expand if no
> > one knows what I'm on about, but maybe a short description is enough.
> >
> > I am developing a command line application using Typer. Most commands
> > need to do something in a database and also do LDAP stuff. Currently
> > each command creates its own Database and LDAP objects, since each
> > command forms an entry point to the program.
> >
> > With Typer, is there a way I can define the equivalent of class
> > attributes at a single point which are then available to all commands?
>
> I do not know typer. But the general solution is to create an instance of your class
> and tell typer to call member function of the instance.
>
> app = Application()
> …
> typer.set_callback(app.my_handler)
Despite the fact that "everything is an object" in Python, you don't
have to put data or functions inside classes or objects. I also know
nothing about Typer, but there's nothing wrong with functions in a
module.
There's also nothing wrong with writing a function that creates and
returns the database and LDAP connections (perhas as instances of
application-level classes), amd calling that function from within each
command.
DRY. Yeah, yeah, yeah. :-/ So there's one line at the top of each
comamnd that initializes things, and possibly a line at the bottom to
close those things down. Turn those lines into a context manager, which
is actually a sub-framework inside Typer. Don't convolute/compilicate
your design to eliminate one line at the top of each command.
Go ahead, accuse me of writing FORTRAN (all caps, no numbers or
qualifiers, as $deity intended) in Python. But neither optimize
prematurely nor invoke the Inner Platform Effect to save one or two
lines in your not-yet-written commands, either.
Sorry for the rant. :-)
Simple is better than complex.
Complex is better than complicated.
HTH.
More information about the Python-list
mailing list