python什么版本引入json_如何使用Python导入正确调用jsonnet

默认的导入器使用相对于从中导入它们的文件的路径.如果是valuate_snippet,则需要手动传递路径.这样jsonnet知道在哪里寻找导入的文件.

如果您打算处理文件,则可以使用自定义导入程序. (题外话:jsonnet试图避免对源文件进行预处理,因此jsonnet中可能存在更好的方法或缺少了功能.)

以下是有关如何在Python中使用自定义导入程序的完整有效示例(根据提供的目录结构进行了调整):

import os

import unittest

import _jsonnet

# Returns content if worked, None if file not found, or throws an exception

def try_path(dir, rel):

if not rel:

raise RuntimeError('Got invalid filename (empty string).')

if rel[0] == '/':

full_path = rel

else:

full_path = dir + rel

if full_path[-1] == '/':

raise RuntimeError('Attempted to import a directory')

if not os.path.isfile(full_path):

return full_path, None

with open(full_path) as f:

return full_path, f.read()

def import_callback(dir, rel):

full_path, content = try_path(dir, rel)

if content:

return full_path, content

raise RuntimeError('File not found')

class JsonnetTests(unittest.TestCase):

def setUp(self):

self.input_filename = os.path.join(

"jsonnet",

"bar.jsonnet",

)

self.expected_str = '{

"num": 42,

"str": "The answer to life ..."

}

'

with open(self.input_filename, "r") as infile:

self.input_snippet = infile.read()

def test_evaluate_file(self):

json_str = _jsonnet.evaluate_file(

self.input_filename,

import_callback=import_callback,

)

self.assertEqual(json_str, self.expected_str)

def test_evaluate_snippet(self):

json_str = _jsonnet.evaluate_snippet(

"jsonnet/bar.jsonnet",

self.input_snippet,

import_callback=import_callback,

)

self.assertEqual(json_str, self.expected_str)

if __name__ == '__main__':

unittest.main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值