test_yaml.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. import datetime
  4. import difflib
  5. import finoex
  6. import ioex.calcex
  7. import ioex.datetimeex
  8. import os
  9. import pytz
  10. yaml = pytest.importorskip('yaml')
  11. def get_figure_a():
  12. return ioex.calcex.Figure(12.3, u'km')
  13. def get_figure_b():
  14. return ioex.calcex.Figure(12300, u'米')
  15. def get_sum_a():
  16. return finoex.Sum(1.23, u'EUR')
  17. def get_sum_b():
  18. return finoex.Sum(20.45, u'€')
  19. def get_item_a():
  20. return finoex.Item(
  21. name = u'item a',
  22. price_brutto = get_sum_a(),
  23. )
  24. def get_item_b():
  25. return finoex.Item(
  26. name = u'item β',
  27. price_brutto = get_sum_b(),
  28. )
  29. def get_service_a():
  30. return finoex.Service(
  31. duration = ioex.datetimeex.Duration(years = 2),
  32. ip_addresses = ['::1'],
  33. location = 'vienna',
  34. name = u'service',
  35. price_brutto = finoex.Sum(1.0, u'EUR'),
  36. state = 'success',
  37. )
  38. def get_hosting_service():
  39. return finoex.HostingService(
  40. duration = ioex.datetimeex.Duration(years = 2),
  41. ip_addresses = ['127.0.0.1', '::1'],
  42. location = 'vienna',
  43. name = u'virtual server',
  44. operating_system = 'debian 8',
  45. price_brutto = finoex.Sum(1.0, u'EUR'),
  46. state = 'running',
  47. )
  48. def get_cloud_mining():
  49. return finoex.CloudMining(
  50. hashrate = ioex.calcex.Figure(8, u'TH/s'),
  51. name = u'sha256 BTC',
  52. price_brutto = finoex.Sum(1.0, u'EUR'),
  53. )
  54. def get_service_b():
  55. return finoex.Service(
  56. name = u'service',
  57. price_brutto = finoex.Sum(1.0, u'EUR'),
  58. period = ioex.datetimeex.Period(
  59. start = datetime.datetime(2017, 4, 2, 10, 23),
  60. end = None,
  61. ),
  62. )
  63. def get_person_a():
  64. return finoex.Person(
  65. first_name = u'Fabian Peter',
  66. last_name = u'Hammerle',
  67. )
  68. def get_person_b():
  69. return finoex.Person(
  70. first_name = u'名字',
  71. last_name = u'贵姓',
  72. )
  73. def get_campaign_a():
  74. return finoex.Campaign(
  75. name = u'campaign a',
  76. founder = u'company',
  77. end = datetime.datetime(2016, 7, 23, 9, 23, 17, tzinfo = pytz.timezone('Europe/Vienna')),
  78. )
  79. def get_campaign_b():
  80. return finoex.Campaign(
  81. founder = u'company',
  82. name = u'campaign without end',
  83. website_url = u'http://campaign.com',
  84. )
  85. def get_pledge():
  86. return finoex.Pledge(
  87. campaign = get_campaign_a(),
  88. price_brutto = finoex.Sum(10.0, u'EUR'),
  89. reward = u'great',
  90. )
  91. def get_contribution():
  92. return finoex.Contribution(
  93. campaign = get_campaign_a(),
  94. price_brutto = finoex.Sum(10.0, u'EUR'),
  95. reward = u'product',
  96. )
  97. def get_article():
  98. return finoex.Article(
  99. authors = ['a', 'b'],
  100. depth = finoex.Distance(12.3, u'dm'),
  101. features = u'supergeil',
  102. height = finoex.Distance(123., u'cm'),
  103. maximum_load = ioex.calcex.Figure(40., u'kg'),
  104. name = u'article name',
  105. price_brutto = get_sum_a(),
  106. product_id = u'0815',
  107. quantity = 1,
  108. reseller = u'seller',
  109. shipper = u'shipper',
  110. state = u'goood',
  111. width = finoex.Distance(1.23, u'm'),
  112. )
  113. def get_transportation():
  114. return finoex.Transportation(
  115. name = u'ticket',
  116. price_brutto = get_sum_a(),
  117. departure_point = u'home',
  118. destination_point = u'city',
  119. distance = finoex.Distance(3.21, u'km'),
  120. passenger = get_person_a(),
  121. valid_from = datetime.datetime(2016, 7, 14, 13, 50, 4, 0, tzinfo = pytz.timezone('Europe/Vienna')),
  122. valid_until = datetime.datetime(2016, 7, 14, 18, 50, 4, 0, tzinfo = pytz.utc),
  123. ticket_url = u'https://www.example.com',
  124. estimated_arrival_time = ioex.datetimeex.Period(
  125. start = pytz.timezone('Europe/Vienna').localize(datetime.datetime(2016, 7, 24, 23, 47, 2)),
  126. end = pytz.utc.localize(datetime.datetime(2016, 7, 24, 23, 48, 5)),
  127. ),
  128. arrival_time = pytz.timezone('Europe/Vienna').localize(
  129. datetime.datetime(2016, 7, 24, 23, 47, 35)
  130. ),
  131. )
  132. def get_shipping():
  133. return finoex.Shipping(
  134. price_brutto = get_sum_a(),
  135. destination_point = u'home',
  136. tracking_number = 'LX123456789CN',
  137. )
  138. def get_taxi_ride():
  139. return finoex.TaxiRide(
  140. name = u'taxi ride',
  141. price_brutto = get_sum_a(),
  142. departure_point = u'home',
  143. destination_point = u'city',
  144. distance = finoex.Distance(3.21, u'km'),
  145. driver = u'driver',
  146. arrival_time = datetime.datetime(2016, 5, 2, 18, 10, tzinfo = pytz.timezone('Europe/Vienna')),
  147. departure_time = datetime.datetime(2016, 5, 2, 18, 25, tzinfo = pytz.timezone('Europe/Vienna')),
  148. )
  149. def get_discount_a():
  150. return finoex.Discount(
  151. name = u'discount a',
  152. amount = get_sum_a(),
  153. )
  154. def get_discount_b():
  155. return finoex.Discount(
  156. name = u'discount β',
  157. amount = get_sum_b(),
  158. )
  159. def get_discount_c():
  160. return finoex.Discount(
  161. amount = get_sum_b(),
  162. code = 'DISCΓ',
  163. name = u'discount c',
  164. )
  165. def get_order_a(items = True, discounts = True):
  166. order = finoex.Order(
  167. platform = u'platformπ',
  168. order_id = u'id',
  169. order_date = datetime.datetime(2016, 5, 8, 0, 18, 17),
  170. customer_id = u'customer',
  171. )
  172. if items:
  173. order.items.append(get_item_a())
  174. order.items.append(get_item_b())
  175. if discounts:
  176. order.discounts.append(get_discount_a())
  177. order.discounts.append(get_discount_b())
  178. return order
  179. def get_order_b():
  180. order = finoex.Order(
  181. platform = u'platformπ',
  182. order_id = u'order_b',
  183. order_date = datetime.datetime(2015, 5, 8, 0, 18, 17),
  184. )
  185. return order
  186. def get_order_c():
  187. order = finoex.Order(
  188. platform = u'γάμμα',
  189. order_id = u'order_βήτα',
  190. order_date = datetime.datetime(2014, 5, 8, 0, 18, 17),
  191. customer_id = u'ρώ',
  192. )
  193. return order
  194. def get_invoice(items = True, discounts = True):
  195. inv = finoex.Invoice(
  196. creditor = u'platformπ',
  197. invoice_id = u'id',
  198. invoice_date = datetime.datetime(2016, 5, 8, 0, 18, 17),
  199. debitor_id = u'customer',
  200. )
  201. if items:
  202. inv.items.append(get_item_a())
  203. inv.items.append(get_item_b())
  204. if discounts:
  205. inv.discounts.append(get_discount_a())
  206. return inv
  207. def get_distance():
  208. return finoex.Distance(2.4142, u'km')
  209. def to_yaml(data):
  210. class Dumper(yaml.Dumper):
  211. pass
  212. ioex.datetimeex.Duration.register_yaml_representer(yaml.Dumper)
  213. ioex.datetimeex.Period.register_yaml_representer(yaml.Dumper)
  214. ioex.calcex.Figure.register_yaml_representer(yaml.Dumper)
  215. finoex.Sum.register_yaml_representer(yaml.Dumper)
  216. finoex.Distance.register_yaml_representer(yaml.Dumper)
  217. return yaml.dump(
  218. data,
  219. default_flow_style = False,
  220. allow_unicode = True,
  221. Dumper = Dumper,
  222. ) #.decode('utf-8')
  223. def yaml_diff(a, b):
  224. return '\n'.join(difflib.ndiff(
  225. to_yaml(a).split('\n'),
  226. to_yaml(b).split('\n'),
  227. ))
  228. @pytest.mark.parametrize('source_object,expected_yaml', [
  229. [datetime.datetime(2016, 7, 14, 13, 50, 4, 0), '2016-07-14 13:50:04\n...\n'],
  230. [datetime.datetime(2016, 7, 14, 13, 50, 4, 0, tzinfo = pytz.timezone('Europe/Vienna')), '2016-07-14 13:50:04+01:05\n...\n'],
  231. [datetime.datetime(2016, 7, 14, 13, 50, 4, 0, tzinfo = pytz.utc), '2016-07-14 13:50:04+00:00\n...\n'],
  232. [finoex.Distance(1.34, u'km'), u"!distance '1.34 km'\n"],
  233. [finoex.Distance(1.34, u'μm'), u"!distance '1.34 μm'\n"],
  234. [get_discount_a(), u"!discount\namount: !sum '1.23 EUR'\nname: discount a\n"],
  235. [get_discount_b(), u"!discount\namount: !sum '20.45 EUR'\nname: discount β\n"],
  236. [get_discount_c(), u"""!discount
  237. amount: !sum '20.45 EUR'
  238. code: DISCΓ
  239. name: discount c
  240. """],
  241. [get_figure_a(), u"!figure '12.3 km'\n"],
  242. [get_figure_b(), u"!figure '12300 米'\n"],
  243. [get_item_a(), u"!item\nname: item a\nprice_brutto: !sum '1.23 EUR'\n"],
  244. [get_item_b(), u"!item\nname: item β\nprice_brutto: !sum '20.45 EUR'\n"],
  245. [get_person_a(), u'!person\nfirst_name: Fabian Peter\nlast_name: Hammerle\n'],
  246. [get_person_b(), u'!person\nfirst_name: 名字\nlast_name: 贵姓\n'],
  247. [get_campaign_a(), u"""!campaign
  248. end: 2016-07-23 09:23:17+01:05
  249. founder: company
  250. name: campaign a
  251. """],
  252. [get_campaign_b(), u"""!campaign
  253. founder: company
  254. name: campaign without end
  255. website_url: http://campaign.com
  256. """],
  257. [get_service_a(), u"""!service
  258. duration: !duration
  259. years: 2
  260. ip_addresses:
  261. - ::1
  262. location: vienna
  263. name: service
  264. price_brutto: !sum '1.0 EUR'
  265. state: success
  266. """],
  267. [get_service_b(), u"""!service
  268. name: service
  269. period: !period
  270. end: null
  271. start: 2017-04-02 10:23:00
  272. price_brutto: !sum '1.0 EUR'
  273. """],
  274. [get_hosting_service(), u"""!hosting-service
  275. duration: !duration
  276. years: 2
  277. ip_addresses:
  278. - 127.0.0.1
  279. - ::1
  280. location: vienna
  281. name: virtual server
  282. operating_system: debian 8
  283. price_brutto: !sum '1.0 EUR'
  284. state: running
  285. """],
  286. [get_cloud_mining(), u"""!cloud-mining
  287. hashrate: !figure '8 TH/s'
  288. name: sha256 BTC
  289. price_brutto: !sum '1.0 EUR'
  290. """],
  291. [get_pledge(), u"""!pledge
  292. campaign: !campaign
  293. end: 2016-07-23 09:23:17+01:05
  294. founder: company
  295. name: campaign a
  296. price_brutto: !sum '10.0 EUR'
  297. reward: great
  298. """],
  299. [get_contribution(), u"""!contribution
  300. campaign: !campaign
  301. end: 2016-07-23 09:23:17+01:05
  302. founder: company
  303. name: campaign a
  304. price_brutto: !sum '10.0 EUR'
  305. reward: product
  306. """],
  307. [get_order_a(), u"""!order
  308. customer_id: customer
  309. discounts:
  310. - !discount
  311. amount: !sum '1.23 EUR'
  312. name: discount a
  313. - !discount
  314. amount: !sum '20.45 EUR'
  315. name: discount β
  316. items:
  317. - !item
  318. name: item a
  319. price_brutto: !sum '1.23 EUR'
  320. - !item
  321. name: item β
  322. price_brutto: !sum '20.45 EUR'
  323. order_date: 2016-05-08 00:18:17
  324. order_id: id
  325. platform: platformπ
  326. """],
  327. [get_order_a(discounts = False), u"""!order
  328. customer_id: customer
  329. items:
  330. - !item
  331. name: item a
  332. price_brutto: !sum '1.23 EUR'
  333. - !item
  334. name: item β
  335. price_brutto: !sum '20.45 EUR'
  336. order_date: 2016-05-08 00:18:17
  337. order_id: id
  338. platform: platformπ
  339. """],
  340. [get_article(), u"""!article
  341. authors:
  342. - a
  343. - b
  344. depth: !distance '12.3 dm'
  345. features: supergeil
  346. height: !distance '123.0 cm'
  347. maximum_load: !figure '40.0 kg'
  348. name: article name
  349. price_brutto: !sum '1.23 EUR'
  350. product_id: 0815
  351. quantity: 1
  352. reseller: seller
  353. shipper: shipper
  354. state: goood
  355. width: !distance '1.23 m'
  356. """],
  357. [get_transportation(), u"""!transportation
  358. arrival_time: 2016-07-24 23:47:35+02:00
  359. departure_point: home
  360. destination_point: city
  361. distance: !distance '3.21 km'
  362. estimated_arrival_time: !period
  363. end: 2016-07-24 23:48:05+00:00
  364. start: 2016-07-24 23:47:02+02:00
  365. name: ticket
  366. passenger: !person
  367. first_name: Fabian Peter
  368. last_name: Hammerle
  369. price_brutto: !sum '1.23 EUR'
  370. ticket_url: https://www.example.com
  371. valid_from: 2016-07-14 13:50:04+01:05
  372. valid_until: 2016-07-14 18:50:04+00:00
  373. """],
  374. [get_shipping(), u"""!shipping
  375. destination_point: home
  376. price_brutto: !sum '1.23 EUR'
  377. tracking_number: LX123456789CN
  378. """],
  379. [get_taxi_ride(), u"""!taxi-ride
  380. arrival_time: 2016-05-02 18:10:00+01:05
  381. departure_point: home
  382. departure_time: 2016-05-02 18:25:00+01:05
  383. destination_point: city
  384. distance: !distance '3.21 km'
  385. driver: driver
  386. name: taxi ride
  387. price_brutto: !sum '1.23 EUR'
  388. """],
  389. [get_invoice(), u"""!invoice
  390. creditor: platformπ
  391. debitor_id: customer
  392. discounts:
  393. - !discount
  394. amount: !sum '1.23 EUR'
  395. name: discount a
  396. invoice_date: 2016-05-08 00:18:17
  397. invoice_id: id
  398. items:
  399. - !item
  400. name: item a
  401. price_brutto: !sum '1.23 EUR'
  402. - !item
  403. name: item β
  404. price_brutto: !sum '20.45 EUR'
  405. """],
  406. ])
  407. def test_to_yaml(source_object, expected_yaml):
  408. assert expected_yaml == to_yaml(source_object)
  409. @pytest.mark.parametrize('expected_object,source_yaml', [
  410. [datetime.datetime(2016, 7, 14, 13, 50, 4, 0), '2016-07-14 13:50:04'],
  411. [datetime.datetime(2016, 7, 14, 13, 50, 4, 0, tzinfo = pytz.timezone('Europe/Vienna')), '2016-07-14 13:50:04+01:05'],
  412. [datetime.datetime(2016, 7, 14, 13, 50, 4, 0, tzinfo = pytz.utc), '2016-07-14 13:50:04+00:00'],
  413. [finoex.Distance(1.34, u'km'), u"!distance '1.34 km'\n"],
  414. [finoex.Distance(1.34, u'μm'), u"!distance '1.34 μm'"],
  415. [get_discount_a(), u"!discount\nname: discount a\namount: !sum '1.23 EUR'\n"],
  416. [get_discount_b(), u"!discount\nname: discount β\namount: !sum '20.45 EUR'\n"],
  417. [get_discount_c(), u"""!discount
  418. amount: !sum 20.45 EUR
  419. name: discount c
  420. code: DISCΓ
  421. """],
  422. [get_figure_a(), '!figure\nunit: km\nvalue: 12.3\n'],
  423. [get_figure_a(), u'!figure\nunit: km\nvalue: 12.3\n'],
  424. [get_figure_b(), '!figure\nunit: 米\nvalue: 12300\n'],
  425. [get_figure_b(), u'!figure\nunit: 米\nvalue: 12300\n'],
  426. [get_item_a(), u"!item\nname: item a\nprice_brutto: !sum '1.23 EUR'\n"],
  427. [get_item_a(), u"!item\nname: item a\nprice_brutto: !sum 1.23 EUR"],
  428. [get_item_a(), u"!item\nname: item a\nprice_brutto: !sum 1.23 €\n"],
  429. [get_item_b(), u"!item\nname: item β\nprice_brutto: !sum '20.45 EUR'\n"],
  430. [get_person_a(), '!person\nfirst_name: Fabian Peter\nlast_name: Hammerle\n'],
  431. [get_person_a(), u'!person\nfirst_name: Fabian Peter\nlast_name: Hammerle\n'],
  432. [get_person_b(), u'!person\nfirst_name: 名字\nlast_name: 贵姓\n'],
  433. [get_campaign_a(), u"""!campaign
  434. name: campaign a
  435. founder: company
  436. end: 2016-07-23 09:23:17+01:05
  437. """],
  438. [get_campaign_b(), u"""!campaign
  439. founder: company
  440. name: campaign without end
  441. website_url: http://campaign.com
  442. """],
  443. [get_service_a(), u"""!service
  444. duration: !duration
  445. years: 2
  446. ip_addresses:
  447. - ::1
  448. location: vienna
  449. name: service
  450. price_brutto: !sum '1.0 EUR'
  451. state: success
  452. """],
  453. [get_service_b(), u"""!service
  454. name: service
  455. period: !period
  456. start: 2017-04-02 10:23:00
  457. price_brutto: !sum '1.0 EUR'
  458. """],
  459. [get_hosting_service(), u"""!hosting-service
  460. duration: !duration
  461. years: 2
  462. ip_addresses:
  463. - 127.0.0.1
  464. - ::1
  465. location: vienna
  466. name: virtual server
  467. operating_system: debian 8
  468. price_brutto: !sum '1.0 EUR'
  469. state: running
  470. """],
  471. [get_cloud_mining(), u"""!cloud-mining
  472. hashrate: !figure 8 TH/s
  473. name: sha256 BTC
  474. price_brutto: !sum 1.0 EUR
  475. """],
  476. [get_pledge(), u"""!pledge
  477. campaign: !campaign
  478. name: campaign a
  479. founder: company
  480. end: 2016-07-23 09:23:17+01:05
  481. price_brutto: !sum '10.0 EUR'
  482. reward: great
  483. """],
  484. [get_contribution(), u"""!contribution
  485. campaign: !campaign
  486. end: 2016-07-23 09:23:17+01:05
  487. founder: company
  488. name: campaign a
  489. price_brutto: !sum '10.0 EUR'
  490. reward: product
  491. """],
  492. [[get_person_a(), get_person_b()], u"""
  493. - !person
  494. first_name: Fabian Peter
  495. last_name: Hammerle
  496. - !person
  497. first_name: 名字
  498. last_name: 贵姓"""],
  499. [get_transportation(), u"""!transportation
  500. arrival_time: 2016-07-24 23:47:35+02:00
  501. departure_point: home
  502. destination_point: city
  503. distance: !distance '3.21 km'
  504. name: ticket
  505. price_brutto: !sum '1.23 EUR'
  506. route_map: null
  507. passenger: !person
  508. first_name: Fabian Peter
  509. last_name: Hammerle
  510. ticket_url: https://www.example.com
  511. valid_from: 2016-07-14 13:50:04+01:05
  512. valid_until: 2016-07-14 18:50:04+00:00
  513. estimated_arrival_time: !period
  514. end: 2016-07-24T23:48:05+00:00
  515. start: 2016-07-24T23:47:02+02:00
  516. """],
  517. [get_shipping(), u"""!shipping
  518. destination_point: home
  519. price_brutto: !sum 1.23 EUR
  520. tracking_number: LX123456789CN
  521. """],
  522. [get_order_a(), u"""!order
  523. customer_id: customer
  524. discounts:
  525. - !discount
  526. amount: !sum '1.23 EUR'
  527. name: discount a
  528. - !discount
  529. amount: !sum '20.45 EUR'
  530. name: discount β
  531. items:
  532. - !item
  533. name: item a
  534. price_brutto: !sum '1.23 EUR'
  535. - !item
  536. name: item β
  537. price_brutto: !sum '20.45 EUR'
  538. order_date: 2016-05-08 00:18:17
  539. order_id: id
  540. platform: platformπ
  541. """],
  542. [get_article(), u"""!article
  543. authors:
  544. - a
  545. - b
  546. delivery_date: null
  547. features: supergeil
  548. name: article name
  549. price_brutto: !sum '1.23 EUR'
  550. product_id: 0815
  551. quantity: 1
  552. reseller: seller
  553. shipper: shipper
  554. state: goood
  555. depth: !distance 12.3 dm
  556. height: !distance 123.0 cm
  557. maximum_load: !figure 40.0 kg
  558. width: !distance 1.23 m
  559. """],
  560. [get_taxi_ride(), u"""!taxi-ride
  561. arrival_time: 2016-05-02 18:10:00+01:05
  562. departure_point: home
  563. departure_time: 2016-05-02 18:25:00+01:05
  564. destination_point: city
  565. distance: !distance '3.21 km'
  566. driver: driver
  567. name: taxi ride
  568. price_brutto: !sum '1.23 EUR'
  569. route_map: null
  570. """],
  571. [get_invoice(), u"""!invoice
  572. creditor: platformπ
  573. debitor_id: customer
  574. invoice_date: 2016-05-08T00:18:17
  575. invoice_id: id
  576. items:
  577. - !item
  578. name: item a
  579. price_brutto: !sum '1.23 EUR'
  580. - !item
  581. name: item β
  582. price_brutto: !sum '20.45 EUR'
  583. discounts:
  584. - !discount
  585. name: discount a
  586. amount: !sum 1.23 EUR
  587. """],
  588. ])
  589. def test_from_yaml(expected_object, source_yaml):
  590. class Loader(yaml.Loader):
  591. pass
  592. ioex.datetimeex.Duration.register_yaml_constructor(Loader)
  593. ioex.datetimeex.Period.register_yaml_constructor(Loader)
  594. ioex.calcex.Figure.register_yaml_constructor(Loader)
  595. finoex.Sum.register_yaml_constructor(Loader)
  596. finoex.Distance.register_yaml_constructor(Loader)
  597. loaded_object = yaml.load(source_yaml, Loader=Loader)
  598. assert loaded_object == expected_object