在整个armstrong中使用的通用后端系统

armstrong.utils.backends的Python项目详细描述


TravisCI statusCoverage statusPyPI VersionLicense

在整个armstrong中使用的通用后端系统

用法

在运行时动态加载python模块,并将其用作硬编码 直接进入模块。这允许灵活性。它的作用是多态性。

为什么?在阿姆斯特朗的内部,我们通过后端做一些事情。如果你 想用不同的方法来做,用相同的接口创建一个类,然后 提供您的类作为后端。阿姆斯特朗将以这种方式工作 你想要。在很多情况下,Armstrong支持多个 场景(作为后端实现),您可以选择适合您的 需要。

遵循django范式,在^{tt2}中创建一个key = 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!

可以提供一个default,流程的工作方式与标准python类似 如果设置中不存在键,则有后退。 (这就是阿姆斯特朗指定其默认值的方式,因此不需要更改 您的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)

您可以使用settingskwarg传入不同的设置模块 希望后端加载程序查找Django设置以外的其他位置。

多个后端

另一个强大的功能?在多个可能的后端上料。阿姆斯特朗 将执行所需的操作,方法是向下搜索后端停止列表 在第一个完成任务的时候。如果后端的方法引发 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

安装和配置

在Python2.6和2.7上支持Django1.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包提供 用于测试、覆盖和南部迁移的工具,以及 使用此组件的设置很容易运行完整的django环境。
  • 问题,需要帮助,讨论?使用我们的Google Group邮件列表。

项目状态

Armstrong是一个开源的新闻平台,任何人都可以免费使用 组织。它是Texas Tribune之间协作的结果 以及Bay CitizenJohn S. and James L. Knight Foundation的拨款。阿姆斯特朗是作为一个完整的捆绑包和个人, 独立组件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从数组中打印int值?   prepared语句Java中奇怪的异常PreparedStatement:参数索引超出范围   封装如何在OOP Java中为主方法编码?   java某些手机显示快捷方式徽章需要什么权限?   java TextView不会随OnItemSelectedListener更改   java注释处理器不会自动触发吗?   java Spring JPA如何计算外键数   c#对于这个简单的OOAD问题,哪种设计最优雅?   java如何处理while循环中的异常?   Android Studio错误:进程'command'/home/draven/Downloads/安卓studio/jre/bin/java''结束,退出值为非零2   在使用Payara服务器的Vaadin应用程序中导航到根目录时,java将丢失上下文根目录   使用contentType application/json而不是application/jsonpatch+json的java修补程序   带有tomcat的java HAproxy连接不足   Java:在应用过滤器后创建一个简单的通用方法进行计数   java如何使用多态性创建一个实例化对象的方法,然后用它们高效地填充ArrayList?