devopsdriver 0.1.54__tar.gz → 0.1.55__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/PKG-INFO +3 -3
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/README.md +1 -1
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/__init__.py +1 -1
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/dataobject.py +7 -3
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver.egg-info/PKG-INFO +3 -3
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver.egg-info/requires.txt +1 -1
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/pyproject.toml +1 -1
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_dataobject.py +167 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/LICENSE +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/__init__.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/azureobject.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/builds/__init__.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/builds/build.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/builds/client.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/clients.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/pipeline/__init__.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/pipeline/client.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/pipeline/log.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/pipeline/pipeline.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/pipeline/run.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/timestamp.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/workitem/__init__.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/workitem/client.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/azdo/workitem/wiql.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/github/__init__.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/github/client.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/manage_settings.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/sendmail.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/settings.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/template.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver/templates/manage_settings.txt.mako +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver.egg-info/SOURCES.txt +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver.egg-info/dependency_links.txt +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver.egg-info/entry_points.txt +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/devopsdriver.egg-info/top_level.txt +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/setup.cfg +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_azure_azureobject.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_azure_build.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_azure_build_client.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_azure_clients.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_azure_pipeline.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_azure_pipeline_client.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_azure_pipeline_run.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_azure_timestamp.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_azure_workitem_client.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_azure_workitem_wiql.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_manage_settings.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_sendmail.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_settings.py +0 -0
- {devopsdriver-0.1.54 → devopsdriver-0.1.55}/tests/test_template.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devopsdriver
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.55
|
|
4
4
|
Summary: DevOps tools
|
|
5
5
|
Author-email: Marc Page <marcallenpage@gmail.com>
|
|
6
6
|
License: This is free and unencumbered software released into the public domain.
|
|
@@ -50,7 +50,7 @@ Requires-Dist: PyYAML==6.0.3
|
|
|
50
50
|
Requires-Dist: keyring==25.7.0
|
|
51
51
|
Requires-Dist: setuptools==82.0.1
|
|
52
52
|
Requires-Dist: azure-devops==7.1.0b4
|
|
53
|
-
Requires-Dist: Mako==1.3.
|
|
53
|
+
Requires-Dist: Mako==1.3.12
|
|
54
54
|
Requires-Dist: PyGithub==2.9.1
|
|
55
55
|
Provides-Extra: dev
|
|
56
56
|
Requires-Dist: black>=24.3.0; extra == "dev"
|
|
@@ -64,7 +64,7 @@ Dynamic: license-file
|
|
|
64
64
|
# devops-driver
|
|
65
65
|
|
|
66
66
|

|
|
67
|
-
[](https://pypi.org/project/devopsdriver/0.1.55/)
|
|
68
68
|
[](https://github.com/marcpage/devops-driver?tab=Unlicense-1-ov-file#readme)
|
|
69
69
|
[](https://github.com/marcpage/devops-driver/graphs/contributors)
|
|
70
70
|
[](http://makeapullrequest.com)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# devops-driver
|
|
2
2
|
|
|
3
3
|

|
|
4
|
-
[](https://pypi.org/project/devopsdriver/0.1.55/)
|
|
5
5
|
[](https://github.com/marcpage/devops-driver?tab=Unlicense-1-ov-file#readme)
|
|
6
6
|
[](https://github.com/marcpage/devops-driver/graphs/contributors)
|
|
7
7
|
[](http://makeapullrequest.com)
|
|
@@ -56,7 +56,7 @@ class DataObject: # pylint: disable=too-few-public-methods
|
|
|
56
56
|
def __repr__(self) -> str:
|
|
57
57
|
return dumps(self.data, indent=2)
|
|
58
58
|
|
|
59
|
-
def lookup(self, path: str) -> Any:
|
|
59
|
+
def lookup(self, path: str, default: Any = None) -> Any:
|
|
60
60
|
"""
|
|
61
61
|
Resolves a custom path expression against the underlying data.
|
|
62
62
|
|
|
@@ -77,8 +77,12 @@ class DataObject: # pylint: disable=too-few-public-methods
|
|
|
77
77
|
tokens = self._tokenize(path)
|
|
78
78
|
current = self.data
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
try:
|
|
81
|
+
for token in tokens:
|
|
82
|
+
current = self._apply_token(current, token)
|
|
83
|
+
|
|
84
|
+
except KeyError:
|
|
85
|
+
return default
|
|
82
86
|
|
|
83
87
|
return current
|
|
84
88
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devopsdriver
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.55
|
|
4
4
|
Summary: DevOps tools
|
|
5
5
|
Author-email: Marc Page <marcallenpage@gmail.com>
|
|
6
6
|
License: This is free and unencumbered software released into the public domain.
|
|
@@ -50,7 +50,7 @@ Requires-Dist: PyYAML==6.0.3
|
|
|
50
50
|
Requires-Dist: keyring==25.7.0
|
|
51
51
|
Requires-Dist: setuptools==82.0.1
|
|
52
52
|
Requires-Dist: azure-devops==7.1.0b4
|
|
53
|
-
Requires-Dist: Mako==1.3.
|
|
53
|
+
Requires-Dist: Mako==1.3.12
|
|
54
54
|
Requires-Dist: PyGithub==2.9.1
|
|
55
55
|
Provides-Extra: dev
|
|
56
56
|
Requires-Dist: black>=24.3.0; extra == "dev"
|
|
@@ -64,7 +64,7 @@ Dynamic: license-file
|
|
|
64
64
|
# devops-driver
|
|
65
65
|
|
|
66
66
|

|
|
67
|
-
[](https://pypi.org/project/devopsdriver/0.1.55/)
|
|
68
68
|
[](https://github.com/marcpage/devops-driver?tab=Unlicense-1-ov-file#readme)
|
|
69
69
|
[](https://github.com/marcpage/devops-driver/graphs/contributors)
|
|
70
70
|
[](http://makeapullrequest.com)
|
|
@@ -248,6 +248,173 @@ def test_lookup() -> None:
|
|
|
248
248
|
pass
|
|
249
249
|
|
|
250
250
|
|
|
251
|
+
def test_lookup_missing() -> None:
|
|
252
|
+
"""Tests lookup when a key is missing"""
|
|
253
|
+
data = DataObject(
|
|
254
|
+
{
|
|
255
|
+
"url": "https://dev.azure.com/ni/94b22d7b-ad7b-4f5e-88f0-867910f91c94/_apis/"
|
|
256
|
+
+ "wit/workItems/949367/revisions/54",
|
|
257
|
+
"fields": {
|
|
258
|
+
"System.AreaPath": "DevCentral\\Business Units\\ADG\\SharedRepo\\MMSsc",
|
|
259
|
+
"System.TeamProject": "DevCentral",
|
|
260
|
+
"System.IterationPath": "DevCentral\\zzzArchive\\Cycles\\Cycle 17\\i77 "
|
|
261
|
+
+ "(ends 2020-02-28)",
|
|
262
|
+
"System.WorkItemType": "Research",
|
|
263
|
+
"System.State": "Closed",
|
|
264
|
+
"System.Reason": "Moved to state Closed",
|
|
265
|
+
"System.AssignedTo": {
|
|
266
|
+
"displayName": "Brown, Andy",
|
|
267
|
+
"url": "https://spsprodeus24.vssps.visualstudio.com/"
|
|
268
|
+
+ "Afae0922c-6afd-42ea-b8cb-e21a431ec8dd/_apis/Identities/"
|
|
269
|
+
+ "d91becd5-72ba-6967-a84a-6a6708550e20",
|
|
270
|
+
"_links": {
|
|
271
|
+
"avatar": {
|
|
272
|
+
"href": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
273
|
+
+ "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl"
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
"id": "d91becd5-72ba-6967-a84a-6a6708550e20",
|
|
277
|
+
"uniqueName": "andy.c.brown@emerson.com",
|
|
278
|
+
"imageUrl": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
279
|
+
+ "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl",
|
|
280
|
+
"descriptor": "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl",
|
|
281
|
+
},
|
|
282
|
+
"System.CreatedDate": "2019-12-10T20:33:08.743Z",
|
|
283
|
+
"System.CreatedBy": {
|
|
284
|
+
"displayName": "Tillerson, Michael",
|
|
285
|
+
"url": "https://spsprodeus24.vssps.visualstudio.com/"
|
|
286
|
+
+ "Afae0922c-6afd-42ea-b8cb-e21a431ec8dd/_apis/Identities/"
|
|
287
|
+
+ "dc42cd0e-ab09-4553-8516-9efe930b92a2",
|
|
288
|
+
"_links": {
|
|
289
|
+
"avatar": {
|
|
290
|
+
"href": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
291
|
+
+ "aad.YWZkMzg2MTItMTAwMy03YmM1LWI1ODQtMTY1YTcwMmM1MmE2"
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
"id": "dc42cd0e-ab09-4553-8516-9efe930b92a2",
|
|
295
|
+
"uniqueName": "michael.tillerson@emerson.com",
|
|
296
|
+
"imageUrl": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
297
|
+
+ "aad.YWZkMzg2MTItMTAwMy03YmM1LWI1ODQtMTY1YTcwMmM1MmE2",
|
|
298
|
+
"descriptor": "aad.YWZkMzg2MTItMTAwMy03YmM1LWI1ODQtMTY1YTcwMmM1MmE2",
|
|
299
|
+
},
|
|
300
|
+
"System.ChangedDate": "2026-05-07T16:20:55.96Z",
|
|
301
|
+
"System.ChangedBy": {
|
|
302
|
+
"displayName": "Tillerson, Michael",
|
|
303
|
+
"url": "https://spsprodeus24.vssps.visualstudio.com/"
|
|
304
|
+
+ "Afae0922c-6afd-42ea-b8cb-e21a431ec8dd/_apis/Identities/"
|
|
305
|
+
+ "dc42cd0e-ab09-4553-8516-9efe930b92a2",
|
|
306
|
+
"_links": {
|
|
307
|
+
"avatar": {
|
|
308
|
+
"href": "https://dev.azure.com/ni/_apis/GraphProfile/"
|
|
309
|
+
+ "MemberAvatars/aad.YWZkMzg2MTItMTAwMy03YmM1LWI1ODQtMTY1YTcwMmM1MmE2"
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
"id": "dc42cd0e-ab09-4553-8516-9efe930b92a2",
|
|
313
|
+
"uniqueName": "michael.tillerson@emerson.com",
|
|
314
|
+
"imageUrl": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
315
|
+
+ "aad.YWZkMzg2MTItMTAwMy03YmM1LWI1ODQtMTY1YTcwMmM1MmE2",
|
|
316
|
+
"descriptor": "aad.YWZkMzg2MTItMTAwMy03YmM1LWI1ODQtMTY1YTcwMmM1MmE2",
|
|
317
|
+
},
|
|
318
|
+
"System.CommentCount": 7,
|
|
319
|
+
"System.Title": "PA: RFSA: Test Bench Architecture (time boxed)",
|
|
320
|
+
"System.BoardColumn": "Closed",
|
|
321
|
+
"System.BoardColumnDone": False,
|
|
322
|
+
"Microsoft.VSTS.Common.StateChangeDate": "2019-12-10T20:33:08.743Z",
|
|
323
|
+
"Microsoft.VSTS.Common.ClosedDate": "2020-02-14T18:17:33.233Z",
|
|
324
|
+
"Microsoft.VSTS.Common.ValueArea": "Business",
|
|
325
|
+
"Microsoft.VSTS.Common.ClosedBy": {
|
|
326
|
+
"displayName": "Brown, Andy",
|
|
327
|
+
"url": "https://spsprodeus24.vssps.visualstudio.com/"
|
|
328
|
+
+ "Afae0922c-6afd-42ea-b8cb-e21a431ec8dd/_apis/Identities/"
|
|
329
|
+
+ "d91becd5-72ba-6967-a84a-6a6708550e20",
|
|
330
|
+
"_links": {
|
|
331
|
+
"avatar": {
|
|
332
|
+
"href": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
333
|
+
+ "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl"
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"id": "d91becd5-72ba-6967-a84a-6a6708550e20",
|
|
337
|
+
"uniqueName": "andy.c.brown@emerson.com",
|
|
338
|
+
"imageUrl": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
339
|
+
+ "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl",
|
|
340
|
+
"descriptor": "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl",
|
|
341
|
+
},
|
|
342
|
+
"Microsoft.VSTS.Common.ResolvedDate": "2020-02-06T03:21:28.327Z",
|
|
343
|
+
"Microsoft.VSTS.Common.ResolvedBy": {
|
|
344
|
+
"displayName": "Brown, Andy",
|
|
345
|
+
"url": "https://spsprodeus24.vssps.visualstudio.com/"
|
|
346
|
+
+ "Afae0922c-6afd-42ea-b8cb-e21a431ec8dd/_apis/Identities/"
|
|
347
|
+
+ "d91becd5-72ba-6967-a84a-6a6708550e20",
|
|
348
|
+
"_links": {
|
|
349
|
+
"avatar": {
|
|
350
|
+
"href": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
351
|
+
+ "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl"
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
"id": "d91becd5-72ba-6967-a84a-6a6708550e20",
|
|
355
|
+
"uniqueName": "andy.c.brown@emerson.com",
|
|
356
|
+
"imageUrl": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
357
|
+
+ "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl",
|
|
358
|
+
"descriptor": "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl",
|
|
359
|
+
},
|
|
360
|
+
"Microsoft.VSTS.Common.StackRank": 388652161.0,
|
|
361
|
+
"Microsoft.VSTS.Scheduling.StoryPoints": 5.0,
|
|
362
|
+
"Custom.PendingValidationBy": {
|
|
363
|
+
"displayName": "Brown, Andy",
|
|
364
|
+
"url": "https://spsprodeus24.vssps.visualstudio.com/"
|
|
365
|
+
+ "Afae0922c-6afd-42ea-b8cb-e21a431ec8dd/_apis/Identities/"
|
|
366
|
+
+ "d91becd5-72ba-6967-a84a-6a6708550e20",
|
|
367
|
+
"_links": {
|
|
368
|
+
"avatar": {
|
|
369
|
+
"href": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
370
|
+
+ "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl"
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
"id": "d91becd5-72ba-6967-a84a-6a6708550e20",
|
|
374
|
+
"uniqueName": "andy.c.brown@emerson.com",
|
|
375
|
+
"imageUrl": "https://dev.azure.com/ni/_apis/GraphProfile/MemberAvatars/"
|
|
376
|
+
+ "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl",
|
|
377
|
+
"descriptor": "aad.ZDIxNmMzY2EtMDdiMi03MmQ1LWFjMWQtNmJhMThhZDlhN2Zl",
|
|
378
|
+
},
|
|
379
|
+
"Custom.PendingValidationDate": "2020-02-06T03:21:28.327Z",
|
|
380
|
+
"WEF_D8499809B15042DAABC202ECF51A67D8_Kanban.Column": "Closed",
|
|
381
|
+
"WEF_D8499809B15042DAABC202ECF51A67D8_Kanban.Column.Done": False,
|
|
382
|
+
"WEF_C7071942F5474A15BD600E74B97D7C7A_Kanban.Column": "Closed",
|
|
383
|
+
"WEF_C7071942F5474A15BD600E74B97D7C7A_Kanban.Column.Done": False,
|
|
384
|
+
"WEF_42B49516479B4AEEA0D80D89E8893C45_Kanban.Column": "Closed",
|
|
385
|
+
"WEF_42B49516479B4AEEA0D80D89E8893C45_Kanban.Column.Done": False,
|
|
386
|
+
"WEF_3E05701FE5EA4460876365252800813A_Kanban.Column": "Closed",
|
|
387
|
+
"WEF_3E05701FE5EA4460876365252800813A_Kanban.Column.Done": False,
|
|
388
|
+
"System.Description": "<div>As a developer, I need a testbench to measure and "
|
|
389
|
+
+ "validate these features and assess performance</div>",
|
|
390
|
+
"Microsoft.VSTS.Common.AcceptanceCriteria": "<ul><li>Expect documentation "
|
|
391
|
+
+ 'similar to <a href="https://dev.azure.com/ni/DevCentral/_wiki/wikis/'
|
|
392
|
+
+ 'AppCentral.wiki/8216/EV-Battery-Test-System">this EV Battery Test System '
|
|
393
|
+
+ "documentation</a></li><li>Purchase HW </li><ul><li>controller, chassis, "
|
|
394
|
+
+ "modules, cables, host computer</li><li><br></li></ul><li>Able to deploy SW to "
|
|
395
|
+
+ "DUT</li><li>Able to execute tests on DUT</li>"
|
|
396
|
+
+ "<li>Able to record test results</li>"
|
|
397
|
+
+ "<li><br></li><li>Eventually use DevOps Services</li>"
|
|
398
|
+
+ "<ul><li>Deployment Framework</li>"
|
|
399
|
+
+ "<li>Test Execution Framework</li>"
|
|
400
|
+
+ "<li><span>Test Reporting Framework</span></li></ul></ul>",
|
|
401
|
+
},
|
|
402
|
+
"id": 949367,
|
|
403
|
+
"rev": 54,
|
|
404
|
+
}
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
assert (
|
|
408
|
+
data.lookup("/relations/(/attributes/name=Parent).first/url.split(/).last.int")
|
|
409
|
+
is None
|
|
410
|
+
), [data.lookup("/relations/(/attributes/name=Parent).first/url.split(/).last.int")]
|
|
411
|
+
assert (
|
|
412
|
+
data.lookup("/relations/(/attributes/name=Child)/url.split(/).last.int", [])
|
|
413
|
+
== []
|
|
414
|
+
), [data.lookup("/relations/(/attributes/name=Child)/url.split(/).last.int", [])]
|
|
415
|
+
|
|
416
|
+
|
|
251
417
|
if __name__ == "__main__":
|
|
418
|
+
test_lookup_missing()
|
|
252
419
|
test_lookup()
|
|
253
420
|
test_dataobject_basic()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|