跳转到主要内容

Mozilla产品的产品和区域详情。

项目描述

GHACI PyPI

Mozilla产品详情是一个包含,其中包含有关Mozilla产品(尤其是Firefox、Firefox移动版和Thunderbird)的最新版本、本地化等信息。

来自原始README文件

This library holds information about the current builds of Firefox and
Thunderbird that Mozilla ships including:

- Latest version numbers for all builds
- English and Native names for all languages we support

这是一个允许在Django项目中使用这些数据的Django应用程序。可以使用Django管理命令作为cron作业或手动调用,以保持数据与Mozilla同步。

为什么?

Mozilla产品详情的数据源是一个存储在Mozilla SVN服务器上的PHP库,最初是为了能够通过SVN外部引用包含到PHP项目中而编写的。执行简单的svn up操作可以在数据可用时获取最新数据。

与此同时,产品详情库接收了一个额外的JSON数据流,使得非PHP项目也能使用这些数据。然而,如果消费者没有像库那样存储在SVN中,就没有简单的方法来保持数据的更新。

对于Django项目,这个应用程序解决了这个问题。

开始使用

安装

使用pip安装此库

pip install django-mozilla-product-details

…或者下载product_details目录并将其放入您的Django项目中。

product_details添加到您的INSTALLED_APPS中,以启用管理命令。

配置

通常不需要配置。但是,如果您不同意默认值,可以将以下设置添加到您的settings.py文件中

  • PROD_DETAILS_URL默认为Mozilla SVN服务器上的JSON目录。如果您手头有一个二级镜像,或者希望这个工具从其他地方下载完全无关的JSON文件,请调整此设置。请包含一个尾部斜杠。

  • PROD_DETAILS_DIR是JSON文件的目标目录。它需要由执行管理命令的用户可写,并由运行Django项目的用户可读。默认为:.../install_dir_of_this_app/product_details/json/(仅用于使用PDFileStorage后端(见下文))。

您可以通过使用存储后端类来进一步决定JSON数据应该存储在哪里。目前该应用程序提供了2个,但应该很容易创建一个product_details.storage.ProductDetailsStorage的子类并将它们存储在任何您想要的位置。提供的两个是文件系统(默认)和数据库。要配置它使用的后端,请设置以下内容

  • PROD_DETAILS_STORAGE是一个存储类的点分隔路径字符串(类似于MIDDLEWARE_CLASSES)。应用程序提供的可用类包括product_details.storage.PDFileStorage(默认)和product_details.storage.PDDatabaseStorage。要使用数据库存储类,您应该运行迁移(./manage.py migrate),这将创建存储数据所需的数据库表,并用库中包含的JSON数据(或配置的数据目录中的数据)填充表。然后,您可以通过update_product_details管理命令(就像正常一样)保持数据更新。

此应用程序使用Django的缓存框架来存储产品数据,以便可以在不重新启动服务器的情况下更新网站上的数据。以下设置将允许您控制其工作方式。

  • PROD_DETAILS_CACHE_NAME默认为名为default的缓存(Django默认提供内存缓存)。如果您在Django配置中提供了缓存名称,它将使用该缓存来存储文件数据。

  • PROD_DETAILS_CACHE_TIMEOUT如果设置为整数,它表示每个文件缓存数据应保留的秒数。默认为12小时。

更新数据流

要更新数据,请执行以下操作

./manage.py update_product_details

您希望在安装应用程序后手动运行此操作一次。为了定期获取新数据,您可以将此操作设置为cron作业。

注意:在添加定时任务时,请考虑服务器的负载。数据更新频率不高,不需要每分钟更新一次。大多数应用程序如果每天或更少频率更新一次新数据,运行将非常良好。如有疑问,请联系本库的作者。

使用数据

要使用数据,只需导入库

from product_details import product_details

该库会自动将所有导入的JSON文件转换为Python对象。内容最好使用IPython检查。

版本比较

产品详细信息包含用于Mozilla风格产品版本的版本比较代码的实现。使用方法如下

>>> from product_details.version_compare import Version
>>> v1 = Version('4.0b10')
>>> v2 = Version('4.0b10pre')
>>> v1 < v2
False

版本比较代码的第二部分是生成一个按发布日期排序的唯一版本列表,如下所示

>>> from product_details import product_details
>>> from product_details.version_compare import version_list
>>> version_list(product_details.firefox_history_development_releases)
['3.6.4', '3.6.3', '3.6', '3.6b5', '3.6b4', '3.6b3', '3.6b2', ... ]

注意事项/已知问题

  1. 尽管管理任务在服务器返回无效数据(即空文档或无法解析的JSON数据)时不会覆盖现有文件,但此库也不会删除从服务器完全删除的JSON文件。这种情况很少发生。

  2. 不要在settings.py中导入product_details,因为这会导致导入循环(因为product_details自身导入django.conf.settings)。但是,如果必须这样做,可以像这样懒加载导入,以减轻问题

    from django.utils.functional import lazy
    
    MY_LANGUAGES = ('en-US', 'de')
    class LazyLangs(list):
        def __new__(self):
            from product_details import product_details
            return [(lang.lower(), product_details.languages[lang]['native'])
                    for lang in MY_LANGUAGES]
    LANGUAGES = lazy(LazyLangs, list)()
  3. 在使用Django完成初始化之前使用product_details,例如在应用程序的__init__.py中,可能会引发django.core.exceptions.AppRegistryNotReady异常。上面的懒加载示例可以帮助您克服这个问题。

开发

欢迎贡献补丁。

要运行测试,请安装tox,并从项目根目录运行tox。这将使用Python 3.7、3.8和3.9在各种适当的Django版本上运行测试。如果您没有tox和/或所有Python版本,请安装nosemockrequestsresponsesDjango(参见tox.inideps),并通过运行./runtests.py在当前Python版本中运行测试。

发布

  1. product_details/__init__.py中更新版本号。

  2. 在README文件中添加更改日志条目。

  3. 将您更改上述内容的提交标记为版本号:例如0.14.1

  4. 将提交和标签推送到github仓库。

  5. Github将构建并发布包到PyPI。

更改日志

1.0.3 - 2022-03-08

  • 之前的发布版本不包含产品详细信息数据。此版本包含数据副本。

1.0.2 - 2022-01-31

  • 将CI迁移到Github Actions。感谢stevejalim!

1.0.1 - 2022-01-13

  • 更新以能够处理大于100的Firefox版本。感谢robhudson!

1.0.0 - 2022-01-07

  • 放弃对Python 2的支持。

  • 将代码库转换为使用black格式。

  • 更新tox测试配置以添加新的Django和Python发布版本。

感谢stevejalim和tasos这些改进。

0.14.1 - 2019-06-03

  • 将目录列表中的最后修改数据添加回数据,以避免迁移失败。

0.14 - 2019-05-28

  • 删除目录列表的最后修改检查。修复#72。感谢pmac!

0.13.1 - 2019-03-03

  • 调整迁移以使Django 2+在Python 3下满意。修复#68。感谢peterbe!

0.13 - 2017-08-30

  • 懒加载存储类以避免在Django 1.9+中导入问题。感谢Giorgos!

0.12.1 - 2016-08-18

  • 将管理命令中的–database选项添加到允许在除“默认”之外配置的数据库中更新数据。

0.12 - 2016-07-29

0.11.1 - 2016-04-08

  • 在发布中包含更新的JSON数据。由于Travis部署中的问题,导致0.11版本未能包含数据。

0.11 - 2016-04-08

  • 在使用数据库存储后端时,将JSON数据的更新包裹在事务中(问题 1254664)。

  • 避免缓存空数据(问题 1254664)。

感谢jgmize这两项改进!

0.10 - 2016-01-25

  • 使用requests库获取远程数据以提高可靠性和更好的Py3k兼容性。

  • 更新管理命令以避免Django 1.9弃用警告。Django 1.8现在是最低支持的版本。

感谢Osmose这两项改进!

0.9 - 2015-12-28

  • 同时支持Python 3和2!还提供通用wheel包。

  • 支持Django 1.9。感谢Osmose!

0.8.2 - 2015-12-22

  • 默认使用HTTPS获取JSON数据。感谢jvehent!

  • 修复product_details.last_update属性。自从0.8以来就坏了。感谢报告diox!

0.8.1 - 2015-10-07

  • 添加数据迁移,在创建数据库表时将包含的JSON文件数据导入。

0.8 - 2015-09-30

  • 添加可配置的JSON数据文件存储后端。

  • 添加文件系统和数据库后端。

0.7.1 - 2015-06-15

  • 不要缓存文件未命中。

  • 捕获解析非JSON或损坏文件尝试。

0.7 - 2015-05-22

  • 使用Django缓存框架存储产品数据,允许在不重启服务器的情况下更新数据。

  • 添加和更新测试,为跨Python和Django版本的测试设置tox,并为CI设置Travis。

0.6 - 2015-05-08

  • 初始PyPI发布。在此之前,它通过github发布和安装。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

django-mozilla-product-details-1.0.3.tar.gz (357.2 KB 查看散列

上传时间

构建分布

django_mozilla_product_details-1.0.3-py2.py3-none-any.whl (499.1 KB 查看散列

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页