Ejemplo n.º 1
0
def parse_args(sbg):
    """Argument processing of the command line.

    :param sbg: the `isbg.ISBG` instance which would be updated with the
                parameters.
    :type sbg: isbg.ISBG
    :return: `None`

    :Example: You can run it using:

        >>> sbg = isbg.ISBG()
        >>> parse_args(sbg)
    """
    try:
        opts = docopt(__cmd_opts__.__doc__, version="isbg_v" +
                      isbg.__version__ + ", from: " +
                      os.path.abspath(__file__) + "\n\n" + isbg.__license__)
        opts = dict([(k, v) for k, v in opts.items()
                     if v is not None])
    except DocoptExit as exc:
        raise isbg.ISBGError(isbg.__exitcodes__['flags'],
                             "Option processing failed - " + str(exc))

    if opts.get("--usage"):
        print(printable_usage(__cmd_opts__.__doc__))
        return 1

    if opts.get("--deletehigherthan") is not None:
        try:
            sbg.deletehigherthan = float(opts["--deletehigherthan"])
        except Exception:  # pylint: disable=broad-except
            raise isbg.ISBGError(isbg.__exitcodes__['flags'],
                                 "Unrecognized score - " +
                                 opts["--deletehigherthan"])
        if sbg.deletehigherthan < 1:
            raise isbg.ISBGError(isbg.__exitcodes__['flags'],
                                 "Score " + repr(sbg.deletehigherthan) +
                                 " is too small")

    if opts["--flag"] is True:
        sbg.spamflags.append("\\Flagged")

    sbg.imapsets.host = opts.get('--imaphost', sbg.imapsets.host)
    sbg.imapsets.passwd = opts.get('--imappasswd',
                                   sbg.imapsets.passwd)
    sbg.imapsets.port = opts.get('--imapport', sbg.imapsets.port)
    sbg.imapsets.user = opts.get('--imapuser', sbg.imapsets.user)
    sbg.imapsets.inbox = opts.get('--imapinbox', sbg.imapsets.inbox)
    sbg.imapsets.spaminbox = opts.get('--spaminbox', sbg.imapsets.spaminbox)
    sbg.imapsets.learnspambox = opts.get('--learnspambox')
    sbg.imapsets.learnhambox = opts.get('--learnhambox')
    sbg.imapsets.nossl = opts.get('--nossl', sbg.imapsets.nossl)

    sbg.lockfilegrace = float(opts.get('--lockfilegrace', sbg.lockfilegrace))

    sbg.nostats = opts.get('--nostats', False)
    sbg.dryrun = opts.get('--dryrun', False)
    sbg.delete = opts.get('--delete', False)
    sbg.gmail = opts.get('--gmail', False)

    if opts.get("--maxsize") is not None:
        try:
            sbg.maxsize = int(opts["--maxsize"])
        except (TypeError, ValueError):
            raise isbg.ISBGError(isbg.__exitcodes__['flags'],
                                 "Unrecognised size - " + opts["--maxsize"])
        if sbg.maxsize < 1:
            raise isbg.ISBGError(isbg.__exitcodes__['flags'],
                                 "Size " + repr(sbg.maxsize) + " is too small")

    sbg.movehamto = opts.get('--movehamto')

    if opts["--noninteractive"] is True:
        sbg.interactive = 0

    sbg.noreport = opts.get('--noreport', sbg.noreport)

    sbg.lockfilename = opts.get('--lockfilename', sbg.lockfilename)

    sbg.trackfile = opts.get('--trackfile', sbg.trackfile)

    #: ..v2.0: partialrun now has a default value of 50, use 0 if not
    #:         partialrun shoud be used.
    sbg.partialrun = opts.get('--partialrun', sbg.partialrun)
    try:
        sbg.partialrun = int(opts["--partialrun"])
    except ValueError:
        raise isbg.ISBGError(isbg.__exitcodes__['flags'],
                             "partialrun \'{}\' must be a integer".format(
                             repr(sbg.partialrun)))
    if sbg.partialrun < 0:
        raise isbg.ISBGError(isbg.__exitcodes__['flags'],
                             ("Partial run \'{}\' number must be equal to " +
                              "0 or higher").format(repr(sbg.partialrun)))
    elif sbg.partialrun == 0:
        sbg.partialrun = None

    sbg.verbose = opts.get('--verbose', sbg.verbose)
    sbg.verbose_mails = opts.get('--verbose-mails', sbg.verbose_mails)
    sbg.ignorelockfile = opts.get("--ignorelockfile", sbg.ignorelockfile)
    sbg.savepw = opts.get('--savepw', sbg.savepw)
    sbg.passwdfilename = opts.get('--passwdfilename', sbg.passwdfilename)

    sbg.imaplist = opts.get('--imaplist', sbg.imaplist)

    sbg.learnunflagged = opts.get('--learnunflagged', sbg.learnunflagged)
    sbg.learnflagged = opts.get('--learnflagged', sbg.learnflagged)
    sbg.learnthendestroy = opts.get('--learnthendestroy', sbg.learnthendestroy)
    sbg.learnthenflag = opts.get('--learnthendestroy', sbg.learnthenflag)
    sbg.expunge = opts.get('--expunge', sbg.expunge)

    sbg.teachonly = opts.get('--teachonly', sbg.teachonly)
    sbg.spamc = opts.get('--spamc', sbg.spamc)

    sbg.exitcodes = opts.get('--exitcodes', sbg.exitcodes)

    # fixup any arguments
    if opts.get("--imapport") is None:
        if opts["--nossl"] is True:
            sbg.imapsets.port = 143
        else:
            sbg.imapsets.port = 993
Ejemplo n.º 2
0
def test_ISBGError():
    """Test a ISBGError object creation."""
    with pytest.raises(isbg.ISBGError, match="foo"):
        raise isbg.ISBGError(0, "foo")