Source code for flexget.components.trakt.cli
from flexget import options, plugin
from flexget.event import event
from flexget.manager import Session
from flexget.terminal import TerminalTable, console, table_parser
from . import db
[docs]
def action_auth(options):
if not (options.account):
console(
'You must specify an account (local identifier) so we know where to save your access token!'
)
return
try:
db.get_access_token(options.account, options.pin, re_auth=True, called_from_cli=True)
console('Successfully authorized Flexget app on Trakt.tv. Enjoy!')
except plugin.PluginError as e:
console(f'Authorization failed: {e}')
[docs]
def action_list(options):
with Session() as session:
if not options.account:
# Print all accounts
accounts = session.query(db.TraktUserAuth).all()
if not accounts:
console('No trakt authorizations stored in database.')
return
header = ['Account', 'Created', 'Expires']
table = TerminalTable(*header, table_type=options.table_type)
for auth in accounts:
table.add_row(
auth.account,
auth.created.strftime('%Y-%m-%d'),
auth.expires.strftime('%Y-%m-%d'),
)
console(table)
return
# Show a specific account
acc = (
session
.query(db.TraktUserAuth)
.filter(db.TraktUserAuth.account == options.account)
.first()
)
if acc:
console(f'Authorization expires on {acc.expires}')
else:
console('Flexget has not been authorized to access your account.')
[docs]
def action_refresh(options):
if not options.account:
console('Please specify an account')
return
try:
db.get_access_token(options.account, refresh=True)
console('Successfully refreshed your access token.')
except plugin.PluginError as e:
console(f'Authorization failed: {e}')
[docs]
def action_delete(options):
if not options.account:
console('Please specify an account')
return
try:
db.delete_account(options.account)
console('Successfully deleted your access token.')
except plugin.PluginError as e:
console(f'Deletion failed: {e}')
[docs]
def do_cli(manager, options):
action_map = {
'auth': action_auth,
'list': action_list,
'refresh': action_refresh,
'delete': action_delete,
}
action_map[options.action](options)
[docs]
@event('options.register')
def register_parser_arguments():
acc_text = 'Local identifier which should be used in your config to refer these credentials'
# Register subcommand
parser = options.register_command(
'trakt', do_cli, help='View and manage trakt authentication.'
)
# Set up our subparsers
subparsers = parser.add_subparsers(title='actions', metavar='<action>', dest='action')
auth_parser = subparsers.add_parser(
'auth', help='Authorize Flexget to access your Trakt.tv account'
)
auth_parser.add_argument('account', metavar='<account>', help=acc_text)
auth_parser.add_argument(
'pin',
metavar='<pin>',
help='Get this by authorizing FlexGet to use your trakt account '
f'at {db.PIN_URL}. WARNING: DEPRECATED.',
nargs='?',
)
show_parser = subparsers.add_parser(
'list',
help="List expiration date for Flexget authorization(s) (don't worry, "
'they will automatically refresh when expired)',
parents=[table_parser],
)
show_parser.add_argument('account', metavar='<account>', nargs='?', help=acc_text)
refresh_parser = subparsers.add_parser(
'refresh',
help='Manually refresh your access token associated with your --account <name>',
)
refresh_parser.add_argument('account', metavar='<account>', help=acc_text)
delete_parser = subparsers.add_parser(
'delete', help='Delete the specified <account> name from local database'
)
delete_parser.add_argument('account', metavar='<account>', help=acc_text)