小编mar*_*ark的帖子

pytest在辅助函数中断言内省

pytest确实很棒,assert introspection因此很容易找到字符串的差异,特别是如果差异在白色空间中.现在我使用了一个稍微复杂的测试助手,我在许多测试用例中重用了它.帮助器也有自己的模块,对于那个模块,我想添加断言内省.

helpers.py:

...
def my_helper():
    assert 'abcy' == 'abcx'
Run Code Online (Sandbox Code Playgroud)

test_mycase.py:

from .helpers import my_helper


def test_assert_in_tc():
    assert 'abcy' == 'abcx'


def test_assert_in_helper():
    my_helper()
Run Code Online (Sandbox Code Playgroud)

测试报告显示测试中断言的有用信息,但是not for asserts within the helper:

=============================================================== FAILURES ================================================================
___________________________________________________________ test_assert_in_tc ___________________________________________________________

    def test_assert_in_tc():
>       assert 'abcy' == 'abcx'
E       assert 'abcy' == 'abcx'
E         - abcy
E         ?    ^
E         + abcx
E         ?    ^

tests/test_pytest_assert.py:9: AssertionError
_________________________________________________________ test_assert_in_helper _________________________________________________________

    def test_assert_in_helper():
>       my_helper()

tests/test_pytest_assert.py:13: 
_ _ _ _ _ …
Run Code Online (Sandbox Code Playgroud)

python pytest

14
推荐指数
1
解决办法
1256
查看次数

是否有用于向AWS DynamoDB提交批量获取请求的Python API?

该软件包boto3- 亚马逊用于python的官方AWS API包装器 - 非常支持批量上传项目到DynamoDB.它看起来像这样:

db = boto3.resource("dynamodb", region_name = "my_region").Table("my_table")

with db.batch_writer() as batch:
    for item in my_items:
        batch.put_item(Item = item)
Run Code Online (Sandbox Code Playgroud)

my_items是一个Python字典列表,每个字典都必须包含表的主键.情况并不完美 - 例如,没有安全机制来阻止您超出吞吐量限制 - 但它仍然相当不错.

但是,从数据库中读取似乎没有任何对应物.我能找到的最接近的是DynamoDB.Client.batch_get_item(),但这里的API非常复杂.这是请求两个项目的样子:

db_client = boto3.client("dynamodb", "my_region")

db_client.batch_get_item(
    RequestItems = {
        "my_table": {
            "Keys": [
                {"my_primary_key": {"S": "my_key1"}},
                {"my_primary_key": {"S": "my_key2"}}
            ]
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

这可能是可以容忍的,但是响应也存在同样的问题:所有值都是字典,其键是数据类型("S"对于字符串,"N"数字,"M"映射等),并且解析所有内容会有点烦人.所以我的问题是:

是否有任何原生boto3支持从DynamoDb批量读取,类似于batch_writer上面的功能?

没错,

是否boto3提供任何内置方法来自动反序列化对DynamoDB.Client.batch_get_item()函数的响应?

我还要补充说,该函数boto3.resource("dynamodb").Table().get_item()具有我认为的"正确"API,因为输入或输出不需要类型解析.所以这似乎是开发人员的某种疏忽,我想我正在寻找一种解决方法.

python amazon-web-services amazon-dynamodb boto3

11
推荐指数
2
解决办法
4208
查看次数

javascript函数是对象吗?

我现在正在努力解决一个Javascript问题,我无法在网上找到解释.我想这是因为我没有输入正确的关键字,这也可能与我为什么要挣扎这个问题有关.

我的基本假设是可以改变对象:

> var x = {'n': 2};
> x['n']
2
> x['n'] = 3;
3
Run Code Online (Sandbox Code Playgroud)

pheww工作.但仍然(函数也是对象):

> var addn = function(a) {
    var n = 2;
    return n + a;
}

> addn(3);
5
> addn['n'] = 3;
3
> addn(3);
5
Run Code Online (Sandbox Code Playgroud)

这次我无法改变'n'.有没有办法解决这个问题,同时保持功能的味道?而不是完全OO.我有一个相关的问题是如何维护函数的依赖性以便进行测试 - 再次没有OO?因为我正在寻找解决方案,但如果可能的话,我也想了解Javascript中的哪种机制让我苦苦挣扎.

干杯,

标记

免责声明:通过提及OO我不打算对OO说任何话.而且我也不打算对VI或Emacs说任何话.如果我以某种方式伤害了你的感情,请跳过这个.

javascript scope function object

10
推荐指数
2
解决办法
9589
查看次数

轴的内联样式笔划宽度生成粗体刻度标签

我不使用css,因为我想保存和处理创建的SVG可视化文件.这意味着我需要使用内联样式.到目前为止,我经历了d3无瑕疵,所以我很可能做错了.

我期待{'stroke-width':'3px'}来制作粗轴线.但它制作粗体轴标签.我希望用{'font-style':'normal'}这样的字体相关样式来控制文本.

我怎么用'笔画宽度'怎么了?我在Chrome和Firefox中测试了这个.

这是我的代码:

<script>
    var margin = {top: 20, right: 10, bottom: 20, left: 40};
    var width = 960 - margin.left - margin.right;
    var height = 100 - margin.top - margin.bottom;

    var x = d3.scale.linear().range([0, width]);
    var y = d3.scale.linear().range([0, height]);
    var xAxis = d3.svg.axis().scale(x).orient("bottom");
          // .tickFormat(d3.time.format("%H:%M"));
    var yAxis = d3.svg.axis().scale(y).orient("left").ticks(height/10);

    var svg = d3.select("svg");
    var vis = svg.append("g")
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
        .style({'font-size': '10px', 'font-family': 'sans-serif',
            'font-style': 'normal', 'font-variant': 'normal', 
            'font-weight': 'normal'}); …
Run Code Online (Sandbox Code Playgroud)

d3.js

10
推荐指数
2
解决办法
2万
查看次数

Github拉请求问题

我有以下场景:

  • 我的Github默认分支是"开发"
  • 我有三个拉动请求"开发"分支
  • 构建并验证3个拉取请求(通过CI服务器)
  • 然后将一个拉取请求手动合并为"开发".'$ bumpversion --commit dev'自动执行,版本构建和发布.因此,包含版本的所有文件都在"develop"上更改(.bumpversion.cfg,module/__ init__.py)
  • 到现在为止还挺好.现在,由于"开发"中的更改,剩余的两个拉取请求变得无效,无法再通过Github GUI合并.我需要检查分支并与"开发"合并,如@Anirudha详细描述.
  • 我不希望我的拉取请求因这两个文件的更改而变得无效

我相信对于知道如何解决这个问题的git专家来说,解决方案是显而易见的.到目前为止我找不到它,所以请分享.

git github

10
推荐指数
2
解决办法
365
查看次数

AWS Athena创建表和分区

我将传感器数据存储在S3中(每5分钟写入一次数据):

farm_iot/sensor_data/farm/farm0001/sensor01/1541252701443
Run Code Online (Sandbox Code Playgroud)

1541252701443是一个包含度量的json文件:

{  "temperature": 14.78,  "pressure": 961.70,  "humidity": 68.32}
Run Code Online (Sandbox Code Playgroud)

我肯定错过了一些蜂巢技能.不幸的是,我没有找到一个提取我的时间序列json数据的例子.我也不确定Hive/Athena确实支持这种数据摔跤.

我正在为这个数据创建一个Athena表格...

CREATE EXTERNAL TABLE IF NOT EXISTS farm.sensor_data (
  device string,
  sensor string,
  data_point string,
  value double
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
) LOCATION 's3://farm-iot/sensor_data/farm/farm0001/sensor01/'
PARTITIONED BY (timestamp string)
TBLPROPERTIES ('has_encrypted_data'='false')
Run Code Online (Sandbox Code Playgroud)

我想的另一条道路是将数据存储在一个更容易处理的结构中/也许我没有足够的数据分区??!

所以也许我应该像这样添加dt到结构:

farm_iot/sensor_data/2018-11-03-02-45-02/farm/farm0001/sensor01/1541252701443
Run Code Online (Sandbox Code Playgroud)

仍然没有让我到达我想要的地方:

+---------------+----------+----------+-------------+--------+
| timestamp     | device   | sensor   | data_point  | value  |
+---------------+----------+----------+-------------+--------+
| 1541252701443 | farm0001 | sensor01 | temperature |  14.78 |
+---------------+----------+----------+-------------+--------+
| …
Run Code Online (Sandbox Code Playgroud)

hive amazon-s3 amazon-web-services amazon-athena

10
推荐指数
2
解决办法
3419
查看次数

Sphinx引用包含节号和节标题的其他节

我正在使用Sphinx编写一个包含大量引用的文档:

.. _human-factor:

The Human Factor
================

...

(see :ref:`human-factor` for details)
Run Code Online (Sandbox Code Playgroud)

编译后的文档包含以下内容:

(详见人体因素)

相反,我希望它的格式如下:

(详见5.1人为因素)

我试图谷歌解决方案,我发现乳胶hyperref包可以做到这一点,但我不知道如何将其添加到Sphinx构建.

latex restructuredtext python-sphinx

9
推荐指数
1
解决办法
969
查看次数

如何处理用于CLI测试的"fmt"golang库包

免责声明:祝你圣诞快乐,我希望我的问题不会打扰你!

sample.go:

package main

import(
    "fmt"
    "os"
)


type sample struct {
    value int64
}

func (s sample) useful() {
    if s.value == 0 {
        fmt.Println("Error: something is wrong!")
        os.Exit(1)
    } else {
        fmt.Println("May the force be with you!")
    }
}

func main() {
    s := sample{42}
    s.useful()

    s.value = 0
    s.useful()
}

// output:
// May the force be with you!
// Error: something is wrong!
// exit status 1
Run Code Online (Sandbox Code Playgroud)

我做了很多关于如何在golang测试中使用接口的研究.但到目前为止,我还是无法彻底解决这个问题.至少我无法看到界面如何帮助我,当我需要"模拟"(道歉使用这个词)golang std.像"fmt"这样的库包.

我想出了两个场景:

  1. 使用os/exec来测试命令行界面
  2. 包装fmt包所以我有控制权并能够检查输出字符串

我不喜欢这两种情况: …

testing mocking go

7
推荐指数
1
解决办法
765
查看次数

在Python Pyramid路由配置中使用查询字符串

这是我想要做的非常具体,所以我开始描述它是什么:

我想出了使用Matplotlib等渲染的所有部分,但我是Pyramid和Deform的新手.我还有一个工作视图,从文件中提供图.变形也是一种作品.目前还不清楚如何最好地构建ULR以区分服务,编辑和渲染用例.我猜在Pyramid中这意味着如何配置serve_view和edit_view的路由.

__init__.py:
    config.add_route('serve_route', 
        '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png')
    config.add_route('edit_route', 
        '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png')
# can I use query strings like "?action=edit" here to distinguish the difference?


views.py:
@view_config(context=Root, route_name='serve_route')
def plot_view(context, request):
... 
@view_config(context=Root, renderer='bunseki:templates/form.pt', route_name='edit_route')
def edit_view(request):
...
Run Code Online (Sandbox Code Playgroud)

我金字塔手册我找不到参考如何在路线中设置参数.我想指向一些文档或示例的指针就足够了,我可以自己弄清楚细节.谢谢!

python forms routes pyramid deform

6
推荐指数
1
解决办法
2864
查看次数

基于 socketserver 的 Python 3 服务器关闭挂起

我正在使用 Python 3 中的线程 SocketServer 开发一个“简单”服务器。

为此,我在实施关闭方面遇到了很多麻烦。我在互联网上找到的下面的代码最初可以工作,但在通过 telnet 从客户端发送一些命令后停止工作。一些调查告诉我它挂在 threading._shutdown... threading._wait_for_tstate_lock 中,但到目前为止这还没有敲响警钟。

我的研究告诉我,关于如何在不同的 Python 版本中做到这一点,有大约 42 种不同的解决方案、框架等。到目前为止我找不到 python3 的工作方法。例如,我喜欢python 2.7 的telnetsrvhttps://pypi.python.org/pypi/telnetsrv/0.4)(它使用 gevent 中的 greenlets),但这个不适用于 python 3。所以如果有更多 pythonic,std lib 方法或可靠工作的方法我很想听听!

我目前的赌注是使用套接字服务器,但我还不知道如何处理挂起的服务器。我删除了所有日志语句和大部分功能,因此我可以发布这个暴露问题的最小服务器:

# -*- coding: utf-8 -*-
import socketserver
import threading

SERVER = None


def shutdown_cmd(request):
    global SERVER
    request.send(bytes('server shutdown requested\n', 'utf-8'))
    request.close()
    SERVER.shutdown()
    print('after shutdown!!')
    #SERVER.server_close()


class service(socketserver.BaseRequestHandler):
    def handle(self):
        while True:
            try:
                msg = str(self.request.recv(1024).strip(), 'utf-8')
                if msg == 'shutdown':
                    shutdown_cmd(msg, self.request)
                else:
                    self.request.send(bytes("You …
Run Code Online (Sandbox Code Playgroud)

python gevent socketserver python-3.x

6
推荐指数
2
解决办法
5671
查看次数