[PATCH 2 of 3 PoC] cli: add commands to handle front-end generation

Thomas De Schampheleire patrickdepinguin at gmail.com
Wed Sep 26 19:34:14 UTC 2018


El mié., 26 sept. 2018 a las 13:00, Mads Kiilerich
(<mads at kiilerich.com>) escribió:
>
> On 9/24/18 10:45 PM, Thomas De Schampheleire wrote:
> > # HG changeset patch
> > # User Thomas De Schampheleire <thomas.de_schampheleire at nokia.com>
> > # Date 1537814676 -7200
> > #      Mon Sep 24 20:44:36 2018 +0200
> > # Node ID b807b1e90e61d2c8c16c5e3ec5978ef7dd7a2d31
> > # Parent  dd4da443ed94fd93ca09d5f5fd9cf1b2c72b3cc4
> > cli: add commands to handle front-end generation
>
>
> It would be nice with examples of how to use it and what the user
> experience is.
>
> (It will probably also be obvious from the accompanying documentation
> changes.)
>
>
> > diff --git a/kallithea/bin/kallithea_cli.py b/kallithea/bin/kallithea_cli.py
> > --- a/kallithea/bin/kallithea_cli.py
> > +++ b/kallithea/bin/kallithea_cli.py
> > @@ -14,7 +14,11 @@
> >
> >   import click
> >
> > +from kallithea.bin.kallithea_cli_frontend import frontend
> > +
> >   @click.group()
> >   def cli():
> >       """Various commands to set up a Kallithea instance."""
> >       pass
> > +
> > +cli.add_command(frontend)
> > diff --git a/kallithea/bin/kallithea_cli_frontend.py b/kallithea/bin/kallithea_cli_frontend.py
> > new file mode 100644
> > --- /dev/null
> > +++ b/kallithea/bin/kallithea_cli_frontend.py
> > @@ -0,0 +1,52 @@
> > +# -*- coding: utf-8 -*-
> > +# This program is free software: you can redistribute it and/or modify
> > +# it under the terms of the GNU General Public License as published by
> > +# the Free Software Foundation, either version 3 of the License, or
> > +# (at your option) any later version.
> > +#
> > +# This program is distributed in the hope that it will be useful,
> > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > +# GNU General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU General Public License
> > +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> > +
> > +import click
> > +import os
> > +import subprocess
> > +
> > +import kallithea
> > +
> > +rootdir = os.path.dirname(os.path.dirname(os.path.abspath(kallithea.__file__)))
> > +
> > + at click.group(name='front-end')
> > +def frontend():
> > +    pass
>
>
> I haven't tested and don't know exactly how this shows up, but could it
> be confusing that this "sub command" "isn't the front-end itself", but
> just tooling for management/installation of the front-end?

Currently implemented CLI is as follows:

kallithea config create
kallithea frontend create

and the specific commands that 'frontend create' is wrapping:
kallithea frontend install-deps
kallithea frontend generate-css

The way I saw the conversion of existing commands:

kallithea cache-keys show        cache-keys --show
kallithea cache-keys cleanup      cache-keys --cleanup

kallithea celery run                      celeryd

kallithea repo cleanup               cleanup-repos
kallithea repo scan                     repo-scan
kallithea repo update-cache     update-repoinfo
kallithea repo invalidate-cache   update-repoinfo --invalidatecache
(Not exactly sure about the difference between both, to be discussed)

kallithea iis install                         install-iis

kallithea ishell                               ishell

kallithea config create              make-config

kallithea index create               make-index -f (full)
kallithea index update              make-index    (parameters to this
tool are unclear to me)

kallithea extensions create       make-rcext

kallithea db create                    setup-db
kallithea db upgrade                upgrade-db

kallithea front-end create

>
>
> > + at frontend.command(name='install-deps')
> > +def install_deps():
> > +    """Install required dependencies"""
>
>
> I guess we should clarify that it is npm dependencies it is installing
> ... and that it thus needs npm.
>
> Especially, for a correct understanding of what is going on, it must be
> clear to the user that Python dependencies must be installed first ...
> and that the Python dependency installation doesn't cover this.
>

Ok


>
> > +    click.echo("Running 'npm install' to install front-end dependencies from package.json\n")
> > +    subprocess.check_call(['npm', 'install'], cwd=rootdir)
> > +
> > + at frontend.command(name='generate-css')
> > +def generate_css():
> > +    """Generate CSS files"""
> > +    click.echo("\nGenerating pygments.css")
> > +    with open(os.path.join(rootdir, 'kallithea', 'public', 'css', 'pygments.css'), 'w') as f:
> > +        subprocess.check_call(['pygmentize',
> > +                '-S', 'default',
> > +                '-f', 'html',
> > +                '-a', '.code-highlight'],
> > +                stdout=f)
> > +
> > +    click.echo("\nRunning 'npm run less' to generate CSS from LESS")
>
>
> The "less" command is our own custom command. That one should perhaps
> also be cleaned up, and more should be moved into this command?

Yes, I agree. It is doing:

    "less": "lessc --relative-urls --source-map
--source-map-less-inline kallithea/public/less/main.less
kallithea/public/css/style.css"

so this can be called directly from the new CLI. Only thing to take
care of is the path to the lessc tool, somewhere in the node_modules
directory.

>
> It is perhaps not so important that we generate from .less files. What
> really matters is that we generate from Kallithea source and npm package
> content (bootstrap) and perhaps user customization/configuration. (But
> ok, that bigger context might be covered by the previous "generating"
> message, and it is fine that this one just show actually is being run
> now ...)

You are referring to the 'echo' text here, right?
I'm fine with whatever detail or no-detail you prefer here.

>
>
> > +    subprocess.check_call(['npm', 'run', 'less'], cwd=rootdir)
> > +
> > + at frontend.command()
> > + at click.pass_context
> > +def create(ctx):
> > +    """Create the front-end completely"""
> > +    ctx.invoke(install_deps)
> > +    ctx.invoke(generate_css)

I was thinking that we maybe should make it more clear that the
'create' step is the master command that does everything, and the
other steps are just for finer control for power users. Not sure how
to do that best...

/Thomas


More information about the kallithea-general mailing list