jp (list): implement set and delete subcommands.
This commit is contained in:
parent
75a5716e17
commit
e07aa31cfe
1 changed files with 120 additions and 1 deletions
|
|
@ -71,6 +71,125 @@ class Get(base.CommandBase):
|
|||
self.host.quit(C.EXIT_OK)
|
||||
|
||||
|
||||
class Set(base.CommandBase):
|
||||
|
||||
def __init__(self, host):
|
||||
base.CommandBase.__init__(
|
||||
self,
|
||||
host,
|
||||
"set",
|
||||
use_pubsub=True,
|
||||
pubsub_defaults={"service": _("auto"), "node": _("auto")},
|
||||
help=_("set a list item"),
|
||||
)
|
||||
|
||||
def add_parser_options(self):
|
||||
self.parser.add_argument(
|
||||
"-f",
|
||||
"--field",
|
||||
action="append",
|
||||
nargs="+",
|
||||
dest="fields",
|
||||
required=True,
|
||||
metavar=("NAME", "VALUES"),
|
||||
help=_("field(s) to set (required)"),
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"-U",
|
||||
"--update",
|
||||
choices=("auto", "true", "false"),
|
||||
default="auto",
|
||||
help=_("update existing item instead of replacing it (DEFAULT: auto)"),
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"item",
|
||||
nargs="?",
|
||||
default="",
|
||||
help=_("id, URL of the item to update, or nothing for new item"),
|
||||
)
|
||||
|
||||
async def start(self):
|
||||
await common.fill_well_known_uri(self, os.getcwd(), "tickets", meta_map={})
|
||||
if self.args.update == "auto":
|
||||
# we update if we have a item id specified
|
||||
update = bool(self.args.item)
|
||||
else:
|
||||
update = C.bool(self.args.update)
|
||||
|
||||
values = {}
|
||||
|
||||
for field_data in self.args.fields:
|
||||
values.setdefault(field_data[0], []).extend(field_data[1:])
|
||||
|
||||
extra = {"update": update}
|
||||
|
||||
try:
|
||||
item_id = await self.host.bridge.listSet(
|
||||
self.args.service,
|
||||
self.args.node,
|
||||
values,
|
||||
'',
|
||||
self.args.item,
|
||||
data_format.serialise(extra),
|
||||
self.profile
|
||||
)
|
||||
except Exception as e:
|
||||
self.disp(f"can't set list item: {e}", error=True)
|
||||
self.host.quit(C.EXIT_BRIDGE_ERRBACK)
|
||||
else:
|
||||
self.disp(f"item {str(item_id or self.args.item)!r} set successfully")
|
||||
self.host.quit(C.EXIT_OK)
|
||||
|
||||
|
||||
class Delete(base.CommandBase):
|
||||
|
||||
def __init__(self, host):
|
||||
base.CommandBase.__init__(
|
||||
self,
|
||||
host,
|
||||
"delete",
|
||||
use_pubsub=True,
|
||||
pubsub_defaults={"service": _("auto"), "node": _("auto")},
|
||||
help=_("delete a list item"),
|
||||
)
|
||||
|
||||
def add_parser_options(self):
|
||||
self.parser.add_argument(
|
||||
"-f", "--force", action="store_true", help=_("delete without confirmation")
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"-N", "--notify", action="store_true", help=_("notify deletion")
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"item",
|
||||
help=_("id of the item to delete"),
|
||||
)
|
||||
|
||||
async def start(self):
|
||||
await common.fill_well_known_uri(self, os.getcwd(), "tickets", meta_map={})
|
||||
if not self.args.item:
|
||||
self.parser.error(_("You need to specify a list item to delete"))
|
||||
if not self.args.force:
|
||||
message = _("Are you sure to delete list item {item_id} ?").format(
|
||||
item_id=self.args.item
|
||||
)
|
||||
await self.host.confirmOrQuit(message, _("item deletion cancelled"))
|
||||
try:
|
||||
await self.host.bridge.listDeleteItem(
|
||||
self.args.service,
|
||||
self.args.node,
|
||||
self.args.item,
|
||||
self.args.notify,
|
||||
self.profile,
|
||||
)
|
||||
except Exception as e:
|
||||
self.disp(_(f"can't delete item: {e}"), error=True)
|
||||
self.host.quit(C.EXIT_BRIDGE_ERRBACK)
|
||||
else:
|
||||
self.disp(_(f"item {self.args.item} has been deleted"))
|
||||
self.host.quit(C.EXIT_OK)
|
||||
|
||||
|
||||
class Import(base.CommandBase):
|
||||
# TODO: factorize with blog/import
|
||||
|
||||
|
|
@ -212,7 +331,7 @@ class Import(base.CommandBase):
|
|||
|
||||
|
||||
class List(base.CommandBase):
|
||||
subcommands = (Get, Import)
|
||||
subcommands = (Get, Set, Delete, Import)
|
||||
|
||||
def __init__(self, host):
|
||||
super(List, self).__init__(
|
||||
|
|
|
|||
Loading…
Reference in a new issue