【问题标题】:How one can store user's settings in Calibre's plugin?如何将用户的设置存储在 Calibre 的插件中?
【发布时间】:2017-03-30 18:20:34
【问题描述】:

我正在开发 Calibre 的插件,我想存储用户设置(例如,如果插件应该在导入后从一种格式转换为另一种格式 - 在我的 案例:pdfdjvu)。

如何存储用户设置? Calibre 是否有内置方法来执行此操作?

例如,我有一个字典prefs_org_dict,其中的键和值表示用户设置的首选项。如何可靠地存储这些数据并在以后读取?

【问题讨论】:

    标签: python python-2.7 plugins calibre


    【解决方案1】:

    manual 建议的方法是创建JSONConfig 对象并在其中存储用户偏好。

    基本上只是:

    import os
    from calibre.utils.config import JSONConfig
    
    prefs = JSONConfig(os.path('plugins', 'PLUGINNAME'))
    # JSONConfig inherits after Dict so use it as dictionary
    
    for key, val in prefs_org_dict.iteritems():
        prefs[key] = val
    prefs.commit() # explanation in 3rd section of this post
    

    但是这种方法有一些注意事项:

    1. 设置文件的名称。释义手册:

      请记住,此名称(即'plugins/PLUGINNAME')也在全局命名空间中,因此请使其尽可能唯一。你应该总是在你的配置文件名前加上plugins/,以确保你不会意外破坏一个calibre的配置文件。

      将任何内容保存到此对象后,您可以在 Calibre 插件的 config folder 中看到您的 PLUGINNAME.json 文件(对于 Windows:%APPDATA%\calibre\plugins)(您可以通过编程方式获取此路径:from calibre.utils.config import config_dir 并附加 /plugins) .

    2. 默认设置。

      prefs.defaults 是一个字典,如果您的prefs 对象中不存在给定键,则其值为returned。因此,您可以为插件设置创建一些默认值,例如:

      prefs.defaults['postimport'] = False
      

      主要问题是当您尝试使用其他 dict 方法时,例如 .values().items().iteritems(),它们返回“真实”prefs,而不是默认值,即对于我们的示例,如果 prefs['postimport'] 不是进一步定义:

      >>> prefs.defaults['postimport']
      False
      >>> prefs.defaults.items()
      [('postimport', False)]
      >>> prefs['postimport']
      False
      >>> prefs.items()
      []
      
    3. 提交嵌套字典。

      如果您想将JSONConfig 对象用作真正的.json 存储,您可能需要使用嵌套字典。例如:

      prefs['pdf'] = {}
      prefs['pdf']['convert'] = True
      

      但是,如果您将值设置(或删除)嵌套字典 prefs['pdf'],则将其 will not 保存到 .json 文件中。你必须:

      prefs.commit()
      

      将数据设置为嵌套字典后保存到文件。

    4. JSON 格式的限制。

      一些 Python 功能无法转换为 JSON 格式,例如JSON 没有元组,所以 json.dumps translates 元组到数组。同样在 Python 中,您可以将每个可散列对象(例如元组或冻结集)作为键。 JSON 只接受字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多