Skip to content
This repository has been archived by the owner on Apr 27, 2024. It is now read-only.

Commit

Permalink
Added cmd aliases
Browse files Browse the repository at this point in the history
  • Loading branch information
themagiulio committed May 27, 2023
1 parent 1eae717 commit 9ea7b2f
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 24 deletions.
6 changes: 3 additions & 3 deletions memos/cli.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import click
from click_aliases import ClickAliasedGroup
from memos import __VERSION__
from memos.click_aliases import ClickAliasedGroup
from memos.auth import auth_command
from memos.echo import echo_command
from memos.edit import edit_command
Expand All @@ -22,9 +22,9 @@ def version_command():
cli.add_command(auth_command)
cli.add_command(echo_command)
cli.add_command(edit_command)
cli.add_command(list_command)
cli.add_command(list_command, aliases=['ls'])
cli.add_command(new_command)
cli.add_command(remove_command)
cli.add_command(remove_command, aliases=['rm', 'delete', 'del'])
cli.add_command(version_command)

if __name__ == '__main__':
Expand Down
105 changes: 105 additions & 0 deletions memos/click_aliases.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
"""
This is a fork of the extension for the python
``click`` module to provide a group or command
with aliases.
Original project: https://github.com/click-contrib/click-aliases
"""

import click

_click7 = click.__version__[0] >= '7'


class ClickAliasedGroup(click.Group):
def __init__(self, *args, **kwargs):
super(ClickAliasedGroup, self).__init__(*args, **kwargs)
self._commands = {}
self._aliases = {}

def add_command(self, *args, **kwargs):
aliases = kwargs.pop('aliases', [])
super(ClickAliasedGroup, self).add_command(*args, **kwargs)
if aliases:
cmd = args[0]
name = args[1] if len(args) > 1 else None
name = name or cmd.name
if name is None:
raise TypeError('Command has no name.')

self._commands[name] = aliases
for alias in aliases:
self._aliases[alias] = cmd.name

def command(self, *args, **kwargs):
aliases = kwargs.pop('aliases', [])
decorator = super(ClickAliasedGroup, self).command(*args, **kwargs)
if not aliases:
return decorator

def _decorator(f):
cmd = decorator(f)
if aliases:
self._commands[cmd.name] = aliases
for alias in aliases:
self._aliases[alias] = cmd.name
return cmd

return _decorator

def group(self, *args, **kwargs):
aliases = kwargs.pop('aliases', [])
decorator = super(ClickAliasedGroup, self).group(*args, **kwargs)
if not aliases:
return decorator

def _decorator(f):
cmd = decorator(f)
if aliases:
self._commands[cmd.name] = aliases
for alias in aliases:
self._aliases[alias] = cmd.name
return cmd

return _decorator

def resolve_alias(self, cmd_name):
if cmd_name in self._aliases:
return self._aliases[cmd_name]
return cmd_name

def get_command(self, ctx, cmd_name):
cmd_name = self.resolve_alias(cmd_name)
command = super(ClickAliasedGroup, self).get_command(ctx, cmd_name)
if command:
return command

def format_commands(self, ctx, formatter):
rows = []

sub_commands = self.list_commands(ctx)

max_len = 0
if len(sub_commands) > 0:
max_len = max(len(cmd) for cmd in sub_commands)

limit = formatter.width - 6 - max_len

for sub_command in sub_commands:
cmd = self.get_command(ctx, sub_command)
if cmd is None:
continue
if hasattr(cmd, 'hidden') and cmd.hidden:
continue
if sub_command in self._commands:
aliases = ','.join(sorted(self._commands[sub_command]))
sub_command = '{0} ({1})'.format(sub_command, aliases)
if _click7:
cmd_help = cmd.get_short_help_str(limit)
else:
cmd_help = cmd.short_help or ''
rows.append((sub_command, cmd_help))

if rows:
with formatter.section('Commands'):
formatter.write_dl(rows)
20 changes: 1 addition & 19 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "memos-cli"
version = "0.1.0"
version = "0.1.1"
description = "A CLI frontend for memos self-hosted memo hub"
authors = ["Giulio De Matteis <[email protected]>"]
readme = "README.md"
Expand All @@ -14,7 +14,6 @@ packages = [
python = "^3.11"
click = "^8.1.3"
requests = "^2.30.0"
click-aliases = "^1.0.1"
prettytable = "^3.7.0"

[tool.poetry.scripts]
Expand Down

0 comments on commit 9ea7b2f

Please sign in to comment.