Hi

On Mon, Apr 19, 2021 at 6:47 AM Steve Chavez <st...@supabase.io> wrote:

> Hi Dave,
>
> Thanks for the thoughtful reply. I got sidetracked but now I'm able to
> continue work on the CLI.
>
> > 1) Agree a standard for command line syntax.
> > 3) Make the code modular and extensible; perhaps using a Python module
> per CLI module.
>
> Cool, I agree with the standard. From my understanding, the "core" CLI
> module would be in charge of registering the servers, and thus it'll be
> needed by all the other CLI modules right?
>

'needed' in the sense that the CLI would be quite incomplete without at
least the ability to add/delete servers and users I think. I don't think it
would be absolutely required from a technical perspective.

BTW; I'm open to better names than 'core'. 'pgadmin' might be one option.


> Regarding the grant wizard, I'm not familiar with the module so I can't be
> of much help in implementing a CLI mode for it.
>
> However, I can definitely help with both core and schema diff. Would you
> agree if I scope my contribution to only those 2 modules?
>

Oh, definitely. I certainly wasn't suggesting you write everything! Your
help on the CLI framework, and core/schema diff modules would certainly be
appreciated.


>
> > 2) Figure out how to avoid the hacks in your existing code to do things
> like:
>
> Absolutely. I've been meaning to speed up the CLI start-up time, my
> implementation currently loads many unneeded modules. I'll also avoid the
> hack to hide stdout.
>
> > 4) Allow the use of saved connections as well as arbitrary connection
> strings.
>
> Agree. I think saved connections will come with the "core" CLI module
> implementation(the register-server command).
>

Right, that's my thinking.

Thanks!


>
> On Thu, 1 Apr 2021 at 03:44, Dave Page <dp...@pgadmin.org> wrote:
>
>> Hi
>>
>> On Thu, Apr 1, 2021 at 12:38 AM Steve Chavez <st...@supabase.io> wrote:
>>
>>> > but is this something you'd be interested in working on to become a
>>> more fully featured and production quality CLI?
>>>
>>> Yes, absolutely!
>>>
>>
>> Cool!
>>
>>
>>> What would be the next step? I'm all for doing a CLI that covers pgAdmin
>>> quality standards.
>>>
>>
>> I think there are a few things we'd need to do:
>>
>> 1) Agree a standard for command line syntax. CLIs can easily become very
>> messy - I've spent time designing such standards in the past
>> (unfortunately, I can't just share that), but some thoughts might be:
>>
>>   - have a consistent <command> <command options> <module> <action>
>> <action options> syntax. For example;
>>
>>         pgacli --output-format=json schema-diff generate-diff
>> --source=... --target=...
>>         pgacli core register-server --host=... --maintenance-db=... ...
>>         pgacli grant-wizard grant-acl --select --type=tables
>> --objects=schema.tb_*
>>
>>     (I've assumed a module name of 'core' for things directly related to
>> the heart of pgAdmin)
>>
>>     - Actions are in the form "verb-noun"
>>     - Every common option has both a short and a long form
>>     - Uncommon options have a long form only
>>     - Support various help options, showing appropriate info;
>>
>>     pgacli -h
>>     pgacli --help
>>     pgacli core -h
>>     pgacli schema-diff --help
>>
>> 2) Figure out how to avoid the hacks in your existing code to do things
>> like:
>>
>>     - Hide initialisation output
>>     - Setup the dummy SQLite database
>>
>> 3) Make the code modular and extensible; perhaps using a Python module
>> per CLI module.
>>
>> 4) Allow the use of saved connections as well as arbitrary connection
>> strings.
>>
>> I think 2 is the hardest issue. It may be that we add a flag to the main
>> application code that tells it it's running under the CLI, so that it can
>> avoid doing things it doesn't need to in those cases. One example is the
>> module loading; we might want to skip that entirely under the CLI, and have
>> the CLI module that's being called load just the modules it needs.
>>
>>
>>>
>>> On Wed, 31 Mar 2021 at 03:08, Dave Page <dp...@pgadmin.org> wrote:
>>>
>>>> Hi
>>>>
>>>> On Tue, Mar 30, 2021 at 3:36 PM Steve Chavez <st...@supabase.io> wrote:
>>>>
>>>>> Hey all,
>>>>>
>>>>> In case anyone is interested, I've managed to enable a CLI mode for
>>>>> the Schema Diff on this repo:
>>>>>
>>>>> https://github.com/steve-chavez/pgadmin4/blob/cli/web/cli.py
>>>>>
>>>>> It basically works by using a Flask test client that interacts with
>>>>> the Schema Diff endpoints.
>>>>> It's a single isolated file, I haven't patched any of the existing
>>>>> modules.
>>>>>
>>>>> For a quickstart, there's also a docker image that can be used like:
>>>>>
>>>>> docker run supabase/pgadmin-schema-diff \
>>>>>   'postgres://postgres@host/diff_source' \
>>>>>   'postgres://postgres@host/diff_target' \
>>>>>   > diff.sql
>>>>> ## the stderr output shows the same messages as the Schema Diff GUI:
>>>>>
>>>>> Starting schema diff...
>>>>> Comparision started......0%
>>>>> Comparing FTS Dictionaries ...35%
>>>>> Comparing Functions ...50%
>>>>> Comparing Trigger Functions ...60%
>>>>> Comparing Sequences ...70%
>>>>> Comparing Tables ...80%
>>>>> Comparing Views ...90%
>>>>> Done.
>>>>>
>>>>>
>>>> That's an interesting approach! Obviously the code is just a proof of
>>>> concept at the moment (redirecting stdout is masking errors for example),
>>>> but is this something you'd be interested in working on to become a more
>>>> fully featured and production quality CLI?
>>>>
>>>> --
>>>> Dave Page
>>>> Blog: http://pgsnake.blogspot.com
>>>> Twitter: @pgsnake
>>>>
>>>> EDB: http://www.enterprisedb.com
>>>>
>>>>
>>
>> --
>> Dave Page
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>>
>> EDB: http://www.enterprisedb.com
>>
>>

-- 
Dave Page
Blog: https://pgsnake.blogspot.com
Twitter: @pgsnake

EDB: https://www.enterprisedb.com

Reply via email to