%PDF- %PDF-
| Direktori : /lib/calibre/calibre/db/cli/ |
| Current File : //lib/calibre/calibre/db/cli/cmd_add_custom_column.py |
#!/usr/bin/env python3
# License: GPLv3 Copyright: 2017, Kovid Goyal <kovid at kovidgoyal.net>
import json
from calibre import prints
from calibre.db.legacy import LibraryDatabase
from calibre.library.custom_columns import CustomColumns
readonly = False
version = 0 # change this if you change signature of implementation()
no_remote = True
def implementation(db, notify_changes, *args):
raise NotImplementedError()
def option_parser(get_parser, args):
parser = get_parser(
_(
'''\
%prog add_custom_column [options] label name datatype
Create a custom column. label is the machine friendly name of the column. Should
not contain spaces or colons. name is the human friendly name of the column.
datatype is one of: {0}
'''
).format(', '.join(sorted(CustomColumns.CUSTOM_DATA_TYPES)))
)
parser.add_option(
'--is-multiple',
default=False,
action='store_true',
help=_(
'This column stores tag like data (i.e. '
'multiple comma separated values). Only '
'applies if datatype is text.'
)
)
parser.add_option(
'--display',
default='{}',
help=_(
'A dictionary of options to customize how '
'the data in this column will be interpreted. This is a JSON '
' string. For enumeration columns, use '
'--display="{\\"enum_values\\":[\\"val1\\", \\"val2\\"]}"'
'\n'
'There are many options that can go into the display variable.'
'The options by column type are:\n'
'composite: composite_template, composite_sort, make_category,'
'contains_html, use_decorations\n'
'datetime: date_format\n'
'enumeration: enum_values, enum_colors, use_decorations\n'
'int, float: number_format\n'
'text: is_names, use_decorations\n'
'\n'
'The best way to find legal combinations is to create a custom '
'column of the appropriate type in the GUI then look at the '
'backup OPF for a book (ensure that a new OPF has been created '
'since the column was added). You will see the JSON for the '
'"display" for the new column in the OPF.'
)
)
return parser
def do_add_custom_column(db, label, name, datatype, is_multiple, display):
num = db.create_custom_column(
label, name, datatype, is_multiple, display=display
)
prints('Custom column created with id: %s' % num)
def main(opts, args, dbctx):
if len(args) < 3:
raise SystemExit(_('You must specify label, name and datatype'))
do_add_custom_column(
dbctx.db, args[0], args[1], args[2], opts.is_multiple,
json.loads(opts.display)
)
# Update the stored field_metadata
dbctx.db.close()
db = LibraryDatabase(dbctx.db.library_path)
m = db.field_metadata.all_metadata()
db.new_api.set_pref('field_metadata', m)
return 0