小编bee*_*ego的帖子

不同的 YAML 数组表示

我正在使用 Python 和 PyYAML 为一个项目编写文件类型转换器,我在该项目中多次与 YAML 文件相互转换。这些文件随后由我无法控制的单独服务使用,因此我需要将 YAML 翻译回与最初获得的相同。我的原始文件包含以下部分:

key:
- value1
- value2
- value3
Run Code Online (Sandbox Code Playgroud)

其评估为{key: [value1,value2,value3]}使用yaml.load(). 当我将其转换回 YAML 时,我的新文件如下所示:

key: [value1,value2,value3]
Run Code Online (Sandbox Code Playgroud)

我的问题是,就 YAML 文件的各种语言解析器而言,这两种形式是否等效。显然,使用 PyYaml,这些是等效的,但是对于应用程序正在使用的 Ruby 或其他语言,这是否适用?否则,应用程序将无法正确显示数据。

ruby python yaml pyyaml

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

PyYAML自动将某些键转换为布尔值

我已经使用PyYAML解析器几个月了,将文件类型转换为数据管道的一部分.我发现解析器有时非常特殊,似乎今天我偶然发现了另一个奇怪的行为.我正在转换的文件包含以下部分:

off:
    yes: "Flavor text for yes"
    no: "Flavor text for no"
Run Code Online (Sandbox Code Playgroud)

我保留了字典中当前嵌套的列表,以便我可以构建一个平面文档,但保存嵌套以便稍后转换回YAML.我得到一个TypeError说法,我试图连接strbool键入在一起.我调查并发现PyYaml实际上是将上面的部分文本转换为以下内容:

with open(filename, "r") as f:
    data = yaml.load(f.read())
print data

>> {False: {True: "Flavor text for yes", False: "Flavor text for no}}
Run Code Online (Sandbox Code Playgroud)

我做了一个快速检查,发现PyYAML是做这行yes,no,true,false,on,off.如果键不加引号,它只会执行此转换.引用的值和键将被正确传递.寻找解决方案,我发现这里记录这种行为.

虽然对其他人来说知道引用键会停止PyYAML这样做可能会有所帮助,但我没有这个选项,因为我不是这些文件的作者,并且编写了我的代码来尽可能少地触摸数据.

是否有针对此问题的解决方法或覆盖默认转换行为的方法PyYAML

python yaml pyyaml

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

在Django中使用原子块进行错误处理

我有一个Django 1.9应用程序,该应用程序正在运行一段代码,根据对某些远程API的查询结果,对数据库进行更改。例如,这可能是有关提交,文件更改,审阅者,拉取请求等的数据,这些数据我想另存为数据库中的实体。

commit_data = commit_API_client.get_commit_info(argument1, argument2)
new_commit = models.Commit.Create(**commit_data)

#if the last API failed, this will fail
#I will need to run this again to get these files, so I need
#to get the commit all over again, too
files = file_API_client.get_file_info(new_commit.id)
new_files = models.Files.Create(**files)

#do some more stuff here 
Run Code Online (Sandbox Code Playgroud)

我正在调用的少数几个API之一很有可能会返回一些错误而不是有效数据。实际上,我基本上需要使这一部分成为一个原子事务,以便如果从中没有返回错误HTTP requests,我会将所有更改提交给数据库。否则,如果2个API正确返回,我可能会丢失一些数据,但第3个不会。

我看到Django支持commit hooks数据库事务,但是我想知道这是否适用于这种情况,以及我将如何实现这一点。

database django transactions rollback

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

标签 统计

python ×2

pyyaml ×2

yaml ×2

database ×1

django ×1

rollback ×1

ruby ×1

transactions ×1