穴居人:HTML5缓存清单的验证

caveman的Python项目详细描述


穴居人是一个分析和验证的包。 HTML5 cache manifests。HTML5 众所周知,应用程序对其缓存清单非常挑剔, 很难检查所有组件是否都是正常的。

Caveman提供了一个命令行脚本,check\u manifest 页面,为已使用的资源清理它,分析其缓存清单,并验证 清单上的资源:

$ check_manifest URL

清单的问题被写入标准输出。更多细节 如果将日志级别设置为不同的严重性,则输出关于进程的信息 使用–level=level开关,其中level是debug、info、warning或error。

编程使用

穴居人被设计成可以从你自己的代码中使用,例如 作为大型验证过程的一部分,或作为web中单元测试的一部分 申请。

穴居人的工作是由manifestchecker类完成的。你实例化它 有两个助手:一个从url获取数据的函数 记录器获取记录消息的对象:

from caveman import ManifestChecker

def get_url(url): ...

logger = ...

man_checker = ManifestChecker(get_url=get_url, logger=logger)

然后使用html页面的url调用其check\u manifest方法:

man_checker.check_manifest(url)

未返回值:输出已记录到记录器对象。 有关详细信息,请参见源代码中的docstrings。

django单元测试

作为编程使用的一个例子,这里有一种在django中使用穴居人的方法 测试套件:

from caveman import ManifestChecker

class TestManifest(django.test.TestCase):
    def setUp(self):
        self.checker = ManifestChecker(get_url=self.get_url, logger=self)
        self.caveman_log = []

    def get_url(self, url):
        """A get_url function for `caveman.ManifestChecker`."""
        # Use the Django test client to fetch the URL.
        response = self.client.get(url)
        return response.status_code, response.content, response

    # Record the serious Caveman messages in `self.caveman_log`.
    def debug(self, msg):       pass
    def info(self, msg):        pass
    def warning(self, msg):     self.caveman_log.append(msg)
    def error(self, msg):       self.caveman_log.append(msg)

    def test_my_manifest(self):
        """Caveman produces no warnings or errors for the cache manifest."""
        self.checker.check_manifest("/")
        self.assertEqual([], self.caveman_log)

限制

Caveman只提取指定的HTML页面。尽管它验证到 对清单的其他html页面,它不拉那些链接到页面的页面 并核实他们的资源。

HTML5规范中的某些规则未经验证。

更多信息

穴居人可以从pypi下载:http://pypi.python.org/pypi/caveman

html5缓存清单规范位于http://www.w3.org/TR/html5/offline.html

文档位于http://nedbatchelder.com/code/caveman

代码库和问题跟踪程序位于bitbucket.org

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

推荐PyPI第三方库


热门话题
java Kafka producer大量内存使用(泄漏?)   java NullPointerException。。。正在插入数据但无法检索数据[Mysql DB]   java spring+jpa+hibernate=没有可用于当前线程的实际事务的EntityManager无法可靠地处理“persist”调用   getelementbyid在没有ID的情况下如何在java中使用GetElementsById   java有没有一种使用WatchService强制轮询的方法?   java将值从jframe传递给另一个jframe并使用它   Java/Groovy中带重试的反应式事件处理   具有两个包装器元素的java Jackson XML ArrayList输出   java总是在范围内使用不同的随机元素   取消选择java下拉列表值   多线程如何在Java中为对象的不同成员拥有不同的同步块   java如何使用多线程从文本文件中读取输入   java Spring启动附加崩溃命令   java使用公共或单独的actionPerfomed方法有什么区别   java用Spring3.0中的SpEL替换JSP中的EL   java作为windows服务运行应用程序时无法访问共享文件夹   java xml 1.1规范中的“解析数据”是什么意思?   以编程方式设置JComboBox索引时java触发ItemListener   java Android WebView:只加载HTML,不加载JS或CSS(在某些设备中)   Java:计算do/while循环的数量