在整个armstrong中使用的通用后端系统
armstrong.utils.backends的Python项目详细描述
在整个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。
- pip install armstrong.utils.backends
贡献
在github上进行开发。欢迎参与!
- 找到虫子了吗?在Github Issues上归档。包括尽可能多的细节 因为我们使用的是集中式的, 项目范围问题跟踪程序。
- 测试?pip install tox并运行tox
- 有代码要提交吗?从回购协议中分离出来,整合你对某个主题的更改 分支并创建一个pull request。armstrong.dev包提供 用于测试、覆盖和南部迁移的工具,以及 使用此组件的设置很容易运行完整的django环境。
- 问题,需要帮助,讨论?使用我们的Google Group邮件列表。
项目状态
Armstrong是一个开源的新闻平台,任何人都可以免费使用 组织。它是Texas Tribune之间协作的结果 以及Bay Citizen和John S. and James L. Knight Foundation的拨款。阿姆斯特朗是作为一个完整的捆绑包和个人, 独立组件。