PCQRSCANER/venv/Lib/site-packages/imapclient/interact.py
2019-12-22 21:51:47 +01:00

104 lines
3.3 KiB
Python

#!/usr/bin/python
# Copyright (c) 2014, Menno Smits
# Released subject to the New BSD License
# Please see http://en.wikipedia.org/wiki/BSD_licenses
from __future__ import unicode_literals
from getpass import getpass
from optparse import OptionParser
from six import iteritems
from .config import parse_config_file, create_client_from_config, get_config_defaults
def command_line():
p = OptionParser()
p.add_option('-H', '--host', dest='host', action='store',
help='IMAP host connect to')
p.add_option('-u', '--username', dest='username', action='store',
help='Username to login with')
p.add_option('-p', '--password', dest='password', action='store',
help='Password to login with')
p.add_option('-P', '--port', dest='port', action='store', type=int,
default=None,
help='IMAP port to use (default is 993 for TLS, or 143 otherwise)')
p.add_option('-s', '--ssl', dest='ssl', action='store_true', default=None,
help='Use SSL/TLS connection (default)')
p.add_option('', '--insecure', dest='insecure', action='store_true', default=False,
help='Use insecure connection (i.e. without SSL/TLS)')
p.add_option('-f', '--file', dest='file', action='store', default=None,
help='Config file (same as livetest)')
opts, args = p.parse_args()
if args:
p.error('unexpected arguments %s' % ' '.join(args))
if opts.file:
if opts.host or opts.username or opts.password or opts.port or opts.ssl or opts.insecure:
p.error('If -f/--file is given no other options can be used')
# Use the options in the config file
opts = parse_config_file(opts.file)
else:
if opts.ssl and opts.insecure:
p.error("Can't use --ssl and --insecure at the same time")
opts.ssl = not opts.insecure
# Scan through options, filling in defaults and prompting when
# a compulsory option wasn't provided.
compulsory_opts = ('host', 'username', 'password')
for name, default_value in iteritems(get_config_defaults()):
value = getattr(opts, name, default_value)
if name in compulsory_opts and value is None:
value = getpass(name + ': ')
setattr(opts, name, value)
return opts
def main():
opts = command_line()
print('Connecting...')
client = create_client_from_config(opts)
print('Connected.')
banner = '\nIMAPClient instance is "c"'
def ipython_400(c):
from IPython.terminal.embed import InteractiveShellEmbed
ipshell = InteractiveShellEmbed(banner1=banner)
ipshell('')
def ipython_011(c):
from IPython.frontend.terminal.embed import InteractiveShellEmbed
ipshell = InteractiveShellEmbed(banner1=banner)
ipshell('')
def ipython_010(c):
from IPython.Shell import IPShellEmbed
IPShellEmbed('', banner=banner)()
def builtin(c):
import code
code.interact(banner, local=dict(c=c))
shell_attempts = (
ipython_400,
ipython_011,
ipython_010,
builtin,
)
for shell in shell_attempts:
try:
shell(client)
except ImportError:
pass
else:
break
if __name__ == '__main__':
main()