Hey, what the -- this is my thing. ^_^ What's it doing at the top of HN?
A quick reply to some of the comments about argparse. Gooey is super old at this point. Argparse was a solid choice at the time when Gooey started. These days, Gooey itself speaks in JSON and is decoupled from argparse itself. However, argparse remains the main "blessed" interface (mostly because nobody else has built a different one).
Some fun FYIs: You can also invoke any arbitrary executable[0], not just python, which is pretty handy.
Re: last commit being 2 years ago. It gets harder to justify working for free on niche software as you get older and priorities change :( If it's any consolation, I DO feel guilty all the time. I have no idea why, but where I live, there's "GOOEY" graffiti tagged all over the place, so it's a nice ever-present reminder of the issue tracker that's currently going unloved. haha.
[0] https://chriskiehl.com/article/gooey-as-a-universal-frontend
This is a really cool idea. I love interface disconnected from APIs. We have so many annoyances these days because applications can't be programmatically controlled. Honestly, I'd like to see legislation saying all application functionality needs to have APIs.
I would not like to have to concern myself with exposing government-compliant APIs when coding any arbitrary tool...the free market can reward good development.
Markets cannot regulate nuanced behavior like this. Microsoft is a trivial example of anti-user practices and generally garbage design nonetheless being adopted due to their tremendous efforts of corporate propaganda and scaremongering the decision makers about their products.
ha ha
No way, especially because all the people taking most market-business-related decisions (eg which software to buy) are not tech-oriented. If we had more power on these decisions, that would mean that development, and even advertising of products, would be closer to what the parent comment suggest. But alas.
The security implications of this give me heart palpitations.
The opportunities for abuse are manifold.
I think legislation demanding most tools have an API would be a good thing. Not 'tho shalt expose a REST endpoint'. But instead something like 'every operation a user can do with this tool, they also need to be able to trigger with an interface that is programable, and that interface needs to be documented'.
Saying 'our programable interface is the gui, use autohotkey' is fine, as long as you properly document all click regions.
This would be a massive productivity boost to anyone using such tools. It would also be great for disabled people.
Maybe think of incentives rather than legislation
Argparse is still a pretty solid choice, because it's so ubiquitous and well documented and fairly easy. Typer and Click are both very nice, with some good ergonomics, but I find Typer's "tutorial" style documentation to be rather hard to search to find answers to things like "What arguments does Typer.App() take?"
I have a program I'm working on right now that does user-initiated argument parsing, and argparse is a great fit for it. I'd love to have a text-based UI as an option to drop users into, but Textualize requires Click (IIRC), and using Textual directly in my code to create the UI I've spent hours on and had absolutely no luck even getting started.
While Typer looks nice, I found it to be annoying. It outputs everything depending on the width of your terminal emulator with spaces instead of newlines. Not sure who thought that was a good idea, but try copy pasting any output of it in any chat or anywhere that is not the same width in chars as your terminal emulator. The output becomes complete shit and unreadable. The second thing is, that it forces you to adhere to its paradigm of being a global mutable state object, instrad of being passed around neatly like argsparse, which makes code less understandable and tests needlessly more complicated.
Overall I have found it to be very much not worth it adding typer as a dependency. Hard pass.
On the other hand, I've switched to using Typer for most of my argument parsing because it's not an object I have to pass around. It lets me have the arguments co-located with the code, which is convenient. Especially for more complicated argument parsing, like one of my commands for our deploy process which has maybe 15 sub-commands, that sort of parsing with argparse is kind of a nightmare.
Argparse also does not require tens of external libraries.
That right there is the real winner. I already get queasy when my dependency list gets too long. Invoking an extra collection for what is mostly developer quality of life is not a trade-off I like to make.
Notably, argparse is way faster than click/typer. If you just need a few —options it’s probably preferable.
Hey! Cool project! I have a question: why do you dump out sys.argv to a local file in the CWD? [0] tmp.txt is hardly a unique name… or am I missing something?
[0] https://github.com/chriskiehl/Gooey/blob/be4b11b8f27f500e732...
Seems like it's potentially used for debugging, especially given that pycharm apparently appends additional params when invoking a new process (as noted in the comment at the top of the file).
Graffiti?? Where do you live? Any pics of it?
Presumably Seattle; Gooey is a prolific tagger. This appears to be their instagram: https://www.instagram.com/gooeygue/
This sounds cool. I saw the headline and before clicking anything, my first thought was "bet this heavily depends on argparse", so this is surprising - in a very nice way.
I'm a hardcore getopt fan, mostly because I believe the developer's convenience is nowhere as important as the convenience of the user, and the user shouldn't need to care what programming language or option parsing library the developer chose. argparse, Click, Go's flag/X11-style, and many other similar libraries break conventions that are ingrained in half a century's collective muscle memory.
But with a layer in the middle, it sounds like you can eat your cake and have it too.
It's only super old because you abandoned it (and I don't mean to be judgemental, it is what it is). Worse yet, no viable alternative has shown up to replace it nor either of its forks gained traction.