⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config_wizard.py

📁 用python实现的邮件过滤器
💻 PY
字号:
# not sure where this should go yet.import configimport copyimport os# NOTE: The Wizard works from a *complete* copy of the standard options# but with an extra "Wizard" section to maintain state etc for the wizard.# This initial option set may or may not have had values copied from the# real runtime config - this allows either a "re-configure" or a# "clean configure".# Thus, the Wizard still uses standard config option where suitable - eg# filter.watch_folder_idswizard_defaults = {    "Wizard" : (        ("preparation", "How prepared? radio on welcome", 0,            """""",        config.INTEGER, config.RESTORE),        ("need_train", "Will moving to the train page actually train?", True,            """""",        config.BOOLEAN, config.RESTORE),        ("will_train_later", "The user opted to cancel and train later", False,            """""",        config.BOOLEAN, config.RESTORE),        # Spam        ("spam_folder_name", "Name of spam folder - ignored if ID set", "Junk E-Mail",            """""",            "", config.RESTORE),        # unsure        ("unsure_folder_name", "Name of unsure folder - ignored if ID set", "Junk Suspects",            """""",            "", config.RESTORE),        ("temp_training_names", "", [], "", "", config.RESTORE),    ),}def InitWizardConfig(manager, new_config, from_existing):    manager.wizard_classifier_data = None # this is hacky    new_config.filter.watch_folder_ids = []    new_config.filter.watch_include_sub = False    wc = new_config.wizard    if from_existing:        ids = copy.copy(manager.config.filter.watch_folder_ids)        for id in ids:            # Only get the folders that actually exist.            try:                manager.message_store.GetFolder(id)                # if we get here, it exists!                new_config.filter.watch_folder_ids.append(id)            except manager.message_store.MsgStoreException:                pass    if not new_config.filter.watch_folder_ids:        for folder in manager.message_store.YieldReceiveFolders():            new_config.filter.watch_folder_ids.append(folder.GetID())    if from_existing:        fc = manager.config.filter        if fc.spam_folder_id:            try:                folder = manager.message_store.GetFolder(fc.spam_folder_id)                new_config.filter.spam_folder_id = folder.GetID()                wc.spam_folder_name = ""            except manager.message_store.MsgStoreException:                pass        if fc.unsure_folder_id:            try:                folder = manager.message_store.GetFolder(fc.unsure_folder_id)                new_config.filter.unsure_folder_id = folder.GetID()                wc.unsure_folder_name = ""            except manager.message_store.MsgStoreException:                pass        tc = manager.config.training        if tc.ham_folder_ids:            new_config.training.ham_folder_ids = tc.ham_folder_ids        if tc.spam_folder_ids:            new_config.training.spam_folder_ids = tc.spam_folder_ids    if new_config.training.ham_folder_ids or new_config.training.spam_folder_ids:        wc.preparation = 1 # "already prepared"def _CreateFolder(manager, name, comment):    try:        root = manager.message_store.GetRootFolder()        new_folder = root.CreateFolder(name, comment, open_if_exists = True)        return new_folder    except:        msg = _("There was an error creating the folder named '%s'\r\n" \                "Please restart Outlook and try again") % name        manager.ReportError(msg)        return Nonedef CommitWizardConfig(manager, wc):    # If the user want to manually configure, then don't do anything    if wc.wizard.preparation == 2: # manually configure        import dialogs        dialogs.ShowDialog(0, manager, manager.config, "IDD_MANAGER")        manager.SaveConfig()        return    # Create the ham and spam folders, if necessary.    manager.config.filter.watch_folder_ids = wc.filter.watch_folder_ids    if wc.filter.spam_folder_id:        manager.config.filter.spam_folder_id = wc.filter.spam_folder_id    else:        assert wc.wizard.spam_folder_name, "No ID, and no name!!!"        f = _CreateFolder(manager, wc.wizard.spam_folder_name, "contains spam filtered by SpamBayes")        manager.config.filter.spam_folder_id = f.GetID()    if wc.filter.unsure_folder_id:        manager.config.filter.unsure_folder_id = wc.filter.unsure_folder_id    else:        assert wc.wizard.unsure_folder_name, "No ID, and no name!!!"        f = _CreateFolder(manager, wc.wizard.unsure_folder_name, "contains messages SpamBayes is uncertain about")        manager.config.filter.unsure_folder_id = f.GetID()    if wc.training.ham_folder_ids:        manager.config.training.ham_folder_ids = wc.training.ham_folder_ids    if wc.training.spam_folder_ids:        manager.config.training.spam_folder_ids = wc.training.spam_folder_ids    wiz_cd = manager.wizard_classifier_data    manager.wizard_classifier_data = None    if wiz_cd:        manager.classifier_data.Adopt(wiz_cd)    if wc.wizard.will_train_later:        # User cancelled, but said they will sort their mail for us.        # don't save the config - this will force the wizard up next time        # outlook is started.        pass    else:        # All done - enable, and save the config        manager.config.filter.enabled = True        manager.SaveConfig()def CancelWizardConfig(manager, wc):    if manager.wizard_classifier_data:        manager.wizard_classifier_data.Close()        manager.wizard_classifier_data = None    # Cleanup temp files that may have been created.    for fname in wc.wizard.temp_training_names:        if os.path.exists(fname):            try:                os.remove(fname)            except OSError:                print "Warning: unable to remove", fnamedef CreateWizardConfig(manager, from_existing):    import config    defaults = wizard_defaults.copy()    defaults.update(config.defaults)    options = config.CreateConfig(defaults)    cfg = config.OptionsContainer(options)    InitWizardConfig(manager, cfg, from_existing)    return cfg

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -