跳转到主要内容

用于Armstrong全系统的通用后端系统

项目描述

TravisCI status Coverage status PyPI Version License

用于Armstrong全系统的通用后端系统

使用方法

在运行时动态加载Python模块,并直接使用它,就像您直接编写了该模块一样。这提供了灵活性。这是多态性的体现。

为什么?在Armstrong内部,我们通过后端执行许多操作。如果您想以不同的方式执行这些操作,请创建一个具有相同接口的类,并提供您的类作为后端。Armstrong将以您想要的方式执行其魔法。在许多情况下,Armstrong随附了对多个常见场景的支持(作为后端实现),您可以选择适合您需求的一个。

遵循Django范式,在settings.py中创建一个key = value,其中value是一个字符串或字符串列表,代表完整的点分Python导入路径。该模块将在运行时导入,并像直接实例化一样使用。例如:

# hello/world.py
class Hello(object):
    def hi(self):
        print("Hello world!")

# hello/armstrong.py
class Hello(object):
    def hi(self):
        print("Hello Armstrong!")

# settings.py  <-- armstrong.utils.backends uses Django settings by default
HELLO_CLASS = "hello.armstrong.Hello"

# somewhere_else.py or in a console
>>> from armstrong.utils.backends import GenericBackend
>>> hello = GenericBackend("HELLO_CLASS").get_backend()
>>> hello.hi()
Hello Armstrong!

可以提供一个默认值,过程类似于Python标准字典的dict.get(),如果键在设置中不存在,将提供回退值。(这是Armstrong指定默认值的方式,如果对默认行为满意,则不需要更改settings.py。)

>>> backend = GenericBackend("MISSING_KEY", defaults="hello.world.Hello")
>>> hello = backend.get_backend()
>>> hello.hi()
Hello world!

调用get_backend()相当于实例化。因此,当您准备好使用动态加载的类时,请调用get_backend。传入您通常使用的任何参数。将其视为__init__。这些是相同的:

GenericBackend("HELLO_CLASS").get_backend(1, two=2)
Hello(1, two=2)

如果您想让后端加载器在其他地方查找而不是Django设置,可以使用settings参数传递不同的设置模块。

多个后端

另一个强大的功能?输入多个可能的后端。Armstrong将按顺序执行您想要执行的操作,直到遇到第一个能够处理它的后端。如果后端的方法引发了BackendDidNotHandle异常,Armstrong将尝试下一个后端。以下是一个伪代码示例:

default_backends = ["myapp.backends.TwitterBackend",
                    "myapp.backends.FacebookBackend"]
backend = GenericBackend("SOCIAL_NETWORKS", defaults=default_backends)

# myapp.backends.py
class TwitterBackend(object):
    def post(msg):
        if not self.user.has_account:
            raise BackendDidNotHandle("No account for that user")

social_network = backend.get_backend(user)
social_network.post("Armstrong is pretty sweet you guys")

编写后端

后端是类。GenericBackend是一种动态加载这些类的方式。除了使用get_backend来处理后端的创建之外,您可以像直接调用它一样处理它。

如果您正在使用多个后端,后端的所有属性(和方法)都会被代理以处理分发。要使后端放弃并让加载器使用列表中的下一个后端,请让后端方法引发armstrong.utils.backends.BackendDidNotHandle

安装和配置

支持Python 2.6和2.7上的Django 1.3、1.4、1.5、1.6、1.7。

  1. pip install armstrong.utils.backends

贡献

开发在GitHub上进行。欢迎参与!

  • 发现了错误?在GitHub Issues上提交。请提供尽可能多的详细信息,并确保列出具体的组件,因为我们使用的是集中式、项目级的问题跟踪器。

  • 进行测试?pip install tox并运行tox

  • 有要提交的代码?分叉存储库,将您的更改合并到主题分支,并创建一个pull requestarmstrong.dev包提供了测试、覆盖率以及South迁移的工具,以及使用此组件的设置轻松运行完整Django环境。

  • 有问题、需要帮助、讨论?请使用我们的Google Group邮件列表。

项目状态

Armstrong是一个开源新闻平台,任何组织都可以免费使用。它是Texas TribuneBay Citizen之间的合作成果,以及John S. and James L. Knight Foundation的资助。Armstrong可以作为完整捆绑包和单独组件提供。

项目详情


下载文件

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

源分发

armstrong.utils.backends-1.1.1.tar.gz (9.2 kB 查看哈希值)

上传时间

由以下组织支持