ciocore 7.0.2b5__py2.py3-none-any.whl → 8.0.0__py2.py3-none-any.whl

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.

Potentially problematic release.


This version of ciocore might be problematic. Click here for more details.

Files changed (111) hide show
  1. ciocore/VERSION +1 -1
  2. ciocore/__init__.py +23 -1
  3. ciocore/api_client.py +422 -156
  4. ciocore/cli.py +503 -0
  5. ciocore/common.py +10 -1
  6. ciocore/config.py +86 -53
  7. ciocore/data.py +20 -73
  8. ciocore/docsite/404.html +723 -0
  9. ciocore/docsite/apidoc/api_client/index.html +3203 -0
  10. ciocore/docsite/apidoc/apidoc/index.html +868 -0
  11. ciocore/docsite/apidoc/config/index.html +1591 -0
  12. ciocore/docsite/apidoc/data/index.html +1480 -0
  13. ciocore/docsite/apidoc/hardware_set/index.html +2367 -0
  14. ciocore/docsite/apidoc/package_environment/index.html +1450 -0
  15. ciocore/docsite/apidoc/package_tree/index.html +2310 -0
  16. ciocore/docsite/assets/_mkdocstrings.css +16 -0
  17. ciocore/docsite/assets/images/favicon.png +0 -0
  18. ciocore/docsite/assets/javascripts/bundle.4e31edb1.min.js +29 -0
  19. ciocore/docsite/assets/javascripts/bundle.4e31edb1.min.js.map +8 -0
  20. ciocore/docsite/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
  21. ciocore/docsite/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
  22. ciocore/docsite/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
  23. ciocore/docsite/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
  24. ciocore/docsite/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
  25. ciocore/docsite/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
  26. ciocore/docsite/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
  27. ciocore/docsite/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
  28. ciocore/docsite/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
  29. ciocore/docsite/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
  30. ciocore/docsite/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
  31. ciocore/docsite/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
  32. ciocore/docsite/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
  33. ciocore/docsite/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
  34. ciocore/docsite/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
  35. ciocore/docsite/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
  36. ciocore/docsite/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
  37. ciocore/docsite/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
  38. ciocore/docsite/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
  39. ciocore/docsite/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
  40. ciocore/docsite/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
  41. ciocore/docsite/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
  42. ciocore/docsite/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
  43. ciocore/docsite/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
  44. ciocore/docsite/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
  45. ciocore/docsite/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
  46. ciocore/docsite/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
  47. ciocore/docsite/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
  48. ciocore/docsite/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
  49. ciocore/docsite/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
  50. ciocore/docsite/assets/javascripts/lunr/tinyseg.js +206 -0
  51. ciocore/docsite/assets/javascripts/lunr/wordcut.js +6708 -0
  52. ciocore/docsite/assets/javascripts/workers/search.dfff1995.min.js +42 -0
  53. ciocore/docsite/assets/javascripts/workers/search.dfff1995.min.js.map +8 -0
  54. ciocore/docsite/assets/stylesheets/main.83068744.min.css +1 -0
  55. ciocore/docsite/assets/stylesheets/main.83068744.min.css.map +1 -0
  56. ciocore/docsite/assets/stylesheets/palette.ecc896b0.min.css +1 -0
  57. ciocore/docsite/assets/stylesheets/palette.ecc896b0.min.css.map +1 -0
  58. ciocore/docsite/cmdline/docs/index.html +834 -0
  59. ciocore/docsite/cmdline/downloader/index.html +897 -0
  60. ciocore/docsite/cmdline/packages/index.html +841 -0
  61. ciocore/docsite/cmdline/uploader/index.html +950 -0
  62. ciocore/docsite/how-to-guides/index.html +831 -0
  63. ciocore/docsite/index.html +853 -0
  64. ciocore/docsite/logo.png +0 -0
  65. ciocore/docsite/objects.inv +0 -0
  66. ciocore/docsite/search/search_index.json +1 -0
  67. ciocore/docsite/sitemap.xml +3 -0
  68. ciocore/docsite/sitemap.xml.gz +0 -0
  69. ciocore/docsite/stylesheets/extra.css +26 -0
  70. ciocore/docsite/stylesheets/tables.css +167 -0
  71. ciocore/downloader/__init__.py +0 -0
  72. ciocore/downloader/base_downloader.py +644 -0
  73. ciocore/downloader/download_runner_base.py +47 -0
  74. ciocore/downloader/job_downloader.py +119 -0
  75. ciocore/{downloader.py → downloader/legacy_downloader.py} +0 -1
  76. ciocore/downloader/log.py +73 -0
  77. ciocore/downloader/logging_download_runner.py +87 -0
  78. ciocore/downloader/perpetual_downloader.py +63 -0
  79. ciocore/downloader/registry.py +97 -0
  80. ciocore/downloader/reporter.py +135 -0
  81. ciocore/file_utils.py +3 -3
  82. ciocore/hardware_set.py +0 -4
  83. ciocore/package_environment.py +67 -75
  84. ciocore/package_query.py +171 -0
  85. ciocore/package_tree.py +300 -377
  86. ciocore/retry.py +0 -0
  87. ciocore/uploader/_uploader.py +205 -152
  88. {ciocore-7.0.2b5.dist-info → ciocore-8.0.0.dist-info}/METADATA +34 -16
  89. ciocore-8.0.0.dist-info/RECORD +127 -0
  90. {ciocore-7.0.2b5.dist-info → ciocore-8.0.0.dist-info}/WHEEL +1 -1
  91. ciocore-8.0.0.dist-info/entry_points.txt +2 -0
  92. tests/extra_env_fixtures.py +57 -0
  93. tests/instance_type_fixtures.py +42 -8
  94. tests/project_fixtures.py +8 -0
  95. tests/test_api_client.py +121 -2
  96. tests/test_base_downloader.py +104 -0
  97. tests/test_cli.py +163 -0
  98. tests/test_common.py +8 -8
  99. tests/test_config.py +23 -9
  100. tests/test_data.py +144 -160
  101. tests/test_downloader.py +118 -0
  102. tests/test_hardware_set.py +69 -20
  103. tests/test_job_downloader.py +213 -0
  104. ciocore/__about__.py +0 -10
  105. ciocore/cli/__init__.py +0 -3
  106. ciocore/cli/conductor.py +0 -210
  107. ciocore-7.0.2b5.data/scripts/conductor +0 -19
  108. ciocore-7.0.2b5.data/scripts/conductor.bat +0 -13
  109. ciocore-7.0.2b5.dist-info/RECORD +0 -51
  110. tests/mocks/api_client_mock.py +0 -31
  111. {ciocore-7.0.2b5.dist-info → ciocore-8.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,1450 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en" class="no-js">
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+
9
+
10
+ <meta name="author" content="Conductor Developers">
11
+
12
+
13
+
14
+ <link rel="prev" href="../package_tree/">
15
+
16
+
17
+ <link rel="next" href="../../how-to-guides/">
18
+
19
+
20
+ <link rel="icon" href="../../assets/images/favicon.png">
21
+ <meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.2.0-b2">
22
+
23
+
24
+
25
+ <title>ciocore.package_environment - Conductor Core</title>
26
+
27
+
28
+
29
+ <link rel="stylesheet" href="../../assets/stylesheets/main.83068744.min.css">
30
+
31
+
32
+ <link rel="stylesheet" href="../../assets/stylesheets/palette.ecc896b0.min.css">
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
46
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Raleway:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
47
+ <style>:root{--md-text-font:"Raleway";--md-code-font:"Roboto Mono"}</style>
48
+
49
+
50
+
51
+ <link rel="stylesheet" href="../../assets/_mkdocstrings.css">
52
+
53
+ <link rel="stylesheet" href="../../stylesheets/extra.css">
54
+
55
+ <link rel="stylesheet" href="../../stylesheets/tables.css">
56
+
57
+ <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
58
+
59
+
60
+
61
+
62
+
63
+
64
+ </head>
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+ <body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom">
75
+
76
+
77
+
78
+ <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
79
+
80
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
81
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
82
+ <label class="md-overlay" for="__drawer"></label>
83
+ <div data-md-component="skip">
84
+
85
+
86
+ <a href="#ciocorepackage_environment" class="md-skip">
87
+ Skip to content
88
+ </a>
89
+
90
+ </div>
91
+ <div data-md-component="announce">
92
+
93
+ </div>
94
+
95
+
96
+
97
+
98
+
99
+
100
+ <header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
101
+ <nav class="md-header__inner md-grid" aria-label="Header">
102
+ <a href="https://www.conductortech.com" title="Conductor Core" class="md-header__button md-logo" aria-label="Conductor Core" data-md-component="logo">
103
+
104
+ <img src="../../logo.png" alt="logo">
105
+
106
+ </a>
107
+ <label class="md-header__button md-icon" for="__drawer">
108
+
109
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
110
+ </label>
111
+ <div class="md-header__title" data-md-component="header-title">
112
+ <div class="md-header__ellipsis">
113
+ <div class="md-header__topic">
114
+ <span class="md-ellipsis">
115
+ Conductor Core
116
+ </span>
117
+ </div>
118
+ <div class="md-header__topic" data-md-component="header-topic">
119
+ <span class="md-ellipsis">
120
+
121
+ ciocore.package_environment
122
+
123
+ </span>
124
+ </div>
125
+ </div>
126
+ </div>
127
+
128
+
129
+ <form class="md-header__option" data-md-component="palette">
130
+
131
+
132
+
133
+
134
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
135
+
136
+ <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_2" hidden>
137
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31Z"/></svg>
138
+ </label>
139
+
140
+
141
+
142
+
143
+
144
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_2">
145
+
146
+ <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
147
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5c-.84 0-1.65.15-2.39.42L12 2M3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29L3.34 7m.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14L3.36 17M20.65 7l-1.77 3.79a7.023 7.023 0 0 0-2.38-4.15l4.15.36m-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29L20.64 17M12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44L12 22Z"/></svg>
148
+ </label>
149
+
150
+
151
+ </form>
152
+
153
+
154
+
155
+
156
+ <label class="md-header__button md-icon" for="__search">
157
+
158
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
159
+ </label>
160
+ <div class="md-search" data-md-component="search" role="dialog">
161
+ <label class="md-search__overlay" for="__search"></label>
162
+ <div class="md-search__inner" role="search">
163
+ <form class="md-search__form" name="search">
164
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
165
+ <label class="md-search__icon md-icon" for="__search">
166
+
167
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
168
+
169
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
170
+ </label>
171
+ <nav class="md-search__options" aria-label="Search">
172
+
173
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
174
+
175
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
176
+ </button>
177
+ </nav>
178
+
179
+ </form>
180
+ <div class="md-search__output">
181
+ <div class="md-search__scrollwrap" data-md-scrollfix>
182
+ <div class="md-search-result" data-md-component="search-result">
183
+ <div class="md-search-result__meta">
184
+ Initializing search
185
+ </div>
186
+ <ol class="md-search-result__list" role="presentation"></ol>
187
+ </div>
188
+ </div>
189
+ </div>
190
+ </div>
191
+ </div>
192
+
193
+
194
+ </nav>
195
+
196
+
197
+
198
+ <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
199
+ <div class="md-grid">
200
+ <ul class="md-tabs__list">
201
+
202
+
203
+
204
+
205
+
206
+ <li class="md-tabs__item">
207
+ <a href="../.." class="md-tabs__link">
208
+
209
+
210
+
211
+
212
+ Overview
213
+
214
+ </a>
215
+ </li>
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+ <li class="md-tabs__item">
226
+ <a href="../../cmdline/uploader/" class="md-tabs__link">
227
+
228
+
229
+ CLI
230
+
231
+ </a>
232
+ </li>
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+ <li class="md-tabs__item md-tabs__item--active">
246
+ <a href="../apidoc/" class="md-tabs__link">
247
+
248
+
249
+ API
250
+
251
+ </a>
252
+ </li>
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+ <li class="md-tabs__item">
262
+ <a href="../../how-to-guides/" class="md-tabs__link">
263
+
264
+
265
+
266
+
267
+ How to
268
+
269
+ </a>
270
+ </li>
271
+
272
+
273
+
274
+ </ul>
275
+ </div>
276
+ </nav>
277
+
278
+
279
+ </header>
280
+
281
+ <div class="md-container" data-md-component="container">
282
+
283
+
284
+
285
+
286
+ <main class="md-main" data-md-component="main">
287
+ <div class="md-main__inner md-grid">
288
+
289
+
290
+
291
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
292
+ <div class="md-sidebar__scrollwrap">
293
+ <div class="md-sidebar__inner">
294
+
295
+
296
+
297
+
298
+
299
+
300
+ <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
301
+ <label class="md-nav__title" for="__drawer">
302
+ <a href="https://www.conductortech.com" title="Conductor Core" class="md-nav__button md-logo" aria-label="Conductor Core" data-md-component="logo">
303
+
304
+ <img src="../../logo.png" alt="logo">
305
+
306
+ </a>
307
+ Conductor Core
308
+ </label>
309
+
310
+ <ul class="md-nav__list" data-md-scrollfix>
311
+
312
+
313
+
314
+
315
+
316
+
317
+ <li class="md-nav__item">
318
+ <a href="../.." class="md-nav__link">
319
+
320
+
321
+ <span class="md-ellipsis">
322
+ Overview
323
+ </span>
324
+
325
+
326
+ </a>
327
+ </li>
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+ <li class="md-nav__item md-nav__item--nested">
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+ <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
348
+
349
+ <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
350
+
351
+
352
+ <span class="md-ellipsis">
353
+ CLI
354
+ </span>
355
+
356
+
357
+ <span class="md-nav__icon md-icon"></span>
358
+ </label>
359
+
360
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
361
+ <label class="md-nav__title" for="__nav_2">
362
+ <span class="md-nav__icon md-icon"></span>
363
+ CLI
364
+ </label>
365
+ <ul class="md-nav__list" data-md-scrollfix>
366
+
367
+
368
+
369
+
370
+
371
+
372
+ <li class="md-nav__item">
373
+ <a href="../../cmdline/uploader/" class="md-nav__link">
374
+
375
+
376
+ <span class="md-ellipsis">
377
+ Uploader
378
+ </span>
379
+
380
+
381
+ </a>
382
+ </li>
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+
391
+
392
+ <li class="md-nav__item">
393
+ <a href="../../cmdline/downloader/" class="md-nav__link">
394
+
395
+
396
+ <span class="md-ellipsis">
397
+ Downloader
398
+ </span>
399
+
400
+
401
+ </a>
402
+ </li>
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+ <li class="md-nav__item">
413
+ <a href="../../cmdline/packages/" class="md-nav__link">
414
+
415
+
416
+ <span class="md-ellipsis">
417
+ Packages
418
+ </span>
419
+
420
+
421
+ </a>
422
+ </li>
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+ <li class="md-nav__item">
433
+ <a href="../../cmdline/docs/" class="md-nav__link">
434
+
435
+
436
+ <span class="md-ellipsis">
437
+ Docs
438
+ </span>
439
+
440
+
441
+ </a>
442
+ </li>
443
+
444
+
445
+
446
+
447
+ </ul>
448
+ </nav>
449
+
450
+ </li>
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
465
+
466
+
467
+
468
+
469
+
470
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
471
+
472
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
473
+
474
+
475
+ <span class="md-ellipsis">
476
+ API
477
+ </span>
478
+
479
+
480
+ <span class="md-nav__icon md-icon"></span>
481
+ </label>
482
+
483
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
484
+ <label class="md-nav__title" for="__nav_3">
485
+ <span class="md-nav__icon md-icon"></span>
486
+ API
487
+ </label>
488
+ <ul class="md-nav__list" data-md-scrollfix>
489
+
490
+
491
+
492
+
493
+
494
+
495
+ <li class="md-nav__item">
496
+ <a href="../apidoc/" class="md-nav__link">
497
+
498
+
499
+ <span class="md-ellipsis">
500
+ Api Overview
501
+ </span>
502
+
503
+
504
+ </a>
505
+ </li>
506
+
507
+
508
+
509
+
510
+
511
+
512
+
513
+
514
+
515
+ <li class="md-nav__item">
516
+ <a href="../api_client/" class="md-nav__link">
517
+
518
+
519
+ <span class="md-ellipsis">
520
+ ciocore.api_client
521
+ </span>
522
+
523
+
524
+ </a>
525
+ </li>
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+ <li class="md-nav__item">
536
+ <a href="../config/" class="md-nav__link">
537
+
538
+
539
+ <span class="md-ellipsis">
540
+ ciocore.config
541
+ </span>
542
+
543
+
544
+ </a>
545
+ </li>
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+ <li class="md-nav__item">
556
+ <a href="../data/" class="md-nav__link">
557
+
558
+
559
+ <span class="md-ellipsis">
560
+ ciocore.data
561
+ </span>
562
+
563
+
564
+ </a>
565
+ </li>
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+ <li class="md-nav__item">
576
+ <a href="../hardware_set/" class="md-nav__link">
577
+
578
+
579
+ <span class="md-ellipsis">
580
+ ciocore.hardware_set
581
+ </span>
582
+
583
+
584
+ </a>
585
+ </li>
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+ <li class="md-nav__item">
596
+ <a href="../package_tree/" class="md-nav__link">
597
+
598
+
599
+ <span class="md-ellipsis">
600
+ ciocore.package_tree
601
+ </span>
602
+
603
+
604
+ </a>
605
+ </li>
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+ <li class="md-nav__item md-nav__item--active">
618
+
619
+ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
620
+
621
+
622
+
623
+
624
+
625
+ <label class="md-nav__link md-nav__link--active" for="__toc">
626
+
627
+
628
+ <span class="md-ellipsis">
629
+ ciocore.package_environment
630
+ </span>
631
+
632
+
633
+ <span class="md-nav__icon md-icon"></span>
634
+ </label>
635
+
636
+ <a href="./" class="md-nav__link md-nav__link--active">
637
+
638
+
639
+ <span class="md-ellipsis">
640
+ ciocore.package_environment
641
+ </span>
642
+
643
+
644
+ </a>
645
+
646
+
647
+
648
+ <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
649
+
650
+
651
+
652
+
653
+
654
+
655
+ <label class="md-nav__title" for="__toc">
656
+ <span class="md-nav__icon md-icon"></span>
657
+ Table of contents
658
+ </label>
659
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
660
+
661
+ <li class="md-nav__item">
662
+ <a href="#ciocore.package_environment" class="md-nav__link">
663
+ ciocore.package_environment
664
+ </a>
665
+
666
+ </li>
667
+
668
+ <li class="md-nav__item">
669
+ <a href="#ciocore.package_environment.PackageEnvironment" class="md-nav__link">
670
+ PackageEnvironment
671
+ </a>
672
+
673
+ <nav class="md-nav" aria-label="PackageEnvironment">
674
+ <ul class="md-nav__list">
675
+
676
+ <li class="md-nav__item">
677
+ <a href="#ciocore.package_environment.PackageEnvironment.__init__" class="md-nav__link">
678
+ __init__()
679
+ </a>
680
+
681
+ </li>
682
+
683
+ <li class="md-nav__item">
684
+ <a href="#ciocore.package_environment.PackageEnvironment.extend" class="md-nav__link">
685
+ extend()
686
+ </a>
687
+
688
+ </li>
689
+
690
+ <li class="md-nav__item">
691
+ <a href="#ciocore.package_environment.PackageEnvironment.__iter__" class="md-nav__link">
692
+ __iter__()
693
+ </a>
694
+
695
+ </li>
696
+
697
+ <li class="md-nav__item">
698
+ <a href="#ciocore.package_environment.PackageEnvironment.__getitem__" class="md-nav__link">
699
+ __getitem__()
700
+ </a>
701
+
702
+ </li>
703
+
704
+ </ul>
705
+ </nav>
706
+
707
+ </li>
708
+
709
+ </ul>
710
+
711
+ </nav>
712
+
713
+ </li>
714
+
715
+
716
+
717
+
718
+ </ul>
719
+ </nav>
720
+
721
+ </li>
722
+
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+ <li class="md-nav__item">
731
+ <a href="../../how-to-guides/" class="md-nav__link">
732
+
733
+
734
+ <span class="md-ellipsis">
735
+ How to
736
+ </span>
737
+
738
+
739
+ </a>
740
+ </li>
741
+
742
+
743
+
744
+ </ul>
745
+ </nav>
746
+ </div>
747
+ </div>
748
+ </div>
749
+
750
+
751
+
752
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
753
+ <div class="md-sidebar__scrollwrap">
754
+ <div class="md-sidebar__inner">
755
+
756
+
757
+ <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
758
+
759
+
760
+
761
+
762
+
763
+
764
+ <label class="md-nav__title" for="__toc">
765
+ <span class="md-nav__icon md-icon"></span>
766
+ Table of contents
767
+ </label>
768
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
769
+
770
+ <li class="md-nav__item">
771
+ <a href="#ciocore.package_environment" class="md-nav__link">
772
+ ciocore.package_environment
773
+ </a>
774
+
775
+ </li>
776
+
777
+ <li class="md-nav__item">
778
+ <a href="#ciocore.package_environment.PackageEnvironment" class="md-nav__link">
779
+ PackageEnvironment
780
+ </a>
781
+
782
+ <nav class="md-nav" aria-label="PackageEnvironment">
783
+ <ul class="md-nav__list">
784
+
785
+ <li class="md-nav__item">
786
+ <a href="#ciocore.package_environment.PackageEnvironment.__init__" class="md-nav__link">
787
+ __init__()
788
+ </a>
789
+
790
+ </li>
791
+
792
+ <li class="md-nav__item">
793
+ <a href="#ciocore.package_environment.PackageEnvironment.extend" class="md-nav__link">
794
+ extend()
795
+ </a>
796
+
797
+ </li>
798
+
799
+ <li class="md-nav__item">
800
+ <a href="#ciocore.package_environment.PackageEnvironment.__iter__" class="md-nav__link">
801
+ __iter__()
802
+ </a>
803
+
804
+ </li>
805
+
806
+ <li class="md-nav__item">
807
+ <a href="#ciocore.package_environment.PackageEnvironment.__getitem__" class="md-nav__link">
808
+ __getitem__()
809
+ </a>
810
+
811
+ </li>
812
+
813
+ </ul>
814
+ </nav>
815
+
816
+ </li>
817
+
818
+ </ul>
819
+
820
+ </nav>
821
+ </div>
822
+ </div>
823
+ </div>
824
+
825
+
826
+
827
+ <div class="md-content" data-md-component="content">
828
+ <article class="md-content__inner md-typeset">
829
+
830
+
831
+
832
+
833
+ <h1 id="ciocorepackage_environment">ciocore.package_environment</h1>
834
+
835
+
836
+ <div class="doc doc-object doc-module">
837
+
838
+ <a id="ciocore.package_environment"></a>
839
+ <div class="doc doc-contents first">
840
+
841
+ <p>Manage environment variables for both Windows and Linux render nodes.</p>
842
+
843
+
844
+
845
+ <div class="doc doc-children">
846
+
847
+
848
+
849
+
850
+
851
+
852
+
853
+ <div class="doc doc-object doc-class">
854
+
855
+
856
+
857
+ <h2 id="ciocore.package_environment.PackageEnvironment" class="doc doc-heading">
858
+ <code>
859
+ PackageEnvironment </code>
860
+
861
+
862
+
863
+ </h2>
864
+
865
+ <div class="doc doc-contents ">
866
+
867
+
868
+ <details class="quote">
869
+ <summary>Source code in <code>ciocore/package_environment.py</code></summary>
870
+ <div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">PackageEnvironment</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
871
+
872
+
873
+ <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">platform</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
874
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
875
+ <span class="sd"> Encapsulate a list of environment variables.</span>
876
+
877
+ <span class="sd"> Typically, one would initialize a PackageEnvironment with a package, and then modify by adding more packages or lists of variables. Extra variables can be added by the customer, or programmatically such as during asset scraping.</span>
878
+
879
+ <span class="sd"> Args:</span>
880
+ <span class="sd"> env_list (object|list): An object that provides a list of dictionaries with properties: `name`, `value`, and `merge_policy`.</span>
881
+ <span class="sd"> platform (str): If the env_list is a regular list, then this is required.</span>
882
+
883
+ <span class="sd"> Args are delegated to [extend()](/package_environment/#ciocore.package_environment.PackageEnvironment.extend).</span>
884
+ <span class="sd"> &quot;&quot;&quot;</span>
885
+ <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">=</span> <span class="kc">None</span>
886
+ <span class="bp">self</span><span class="o">.</span><span class="n">_env</span> <span class="o">=</span> <span class="p">{}</span>
887
+
888
+ <span class="bp">self</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">env_list</span><span class="p">,</span> <span class="n">platform</span><span class="p">)</span>
889
+
890
+
891
+ <span class="k">def</span> <span class="nf">extend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env_list</span><span class="p">,</span> <span class="n">platform</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
892
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
893
+ <span class="sd"> Extend the Package environment with the given variable specifications.</span>
894
+
895
+ <span class="sd"> Args:</span>
896
+ <span class="sd"> env_list (object|list): Either:</span>
897
+ <span class="sd"> * A list of dictionaries with properties: `name`, `value`, and `merge_policy`.</span>
898
+ <span class="sd"> * An object with an `environment` key that contains a list of the dictionaries described above. The latter is the structure of a package. Therefore we can initialize or extend a PackageEnvironment with a package.</span>
899
+ <span class="sd"> platform (str): Defaults to `None`. If env_list is a package, then the platform is taken from the package and the `platform` keyword is ignored. If env_list is a list, then if this is the first add, a platform should be specified, otherwise it will default to linux.</span>
900
+
901
+ <span class="sd"> The first time data is added to a PackageEnvironment, the platform is set in stone. Subsequent `adds` that try to change the platform are considered an error.</span>
902
+
903
+ <span class="sd"> Each variable to be added specifies a merge_policy: `append`, `prepend`, or `exclusive` `append` and `prepend` can be thought of as lists= types. Once an individual variable has been initialized as a list, it can&#39;t be changed to `exclusive`. This means:</span>
904
+
905
+ <span class="sd"> 1. It&#39;s not possible to overwrite variables that have been added as `append` or `prepend`.</span>
906
+ <span class="sd"> 2. Exclusive variables are always overwritten by subsequent adds.</span>
907
+
908
+ <span class="sd"> Raises:</span>
909
+ <span class="sd"> ValueError: Either an attempt to change the platform once initialized, or an invalid merge policy.</span>
910
+
911
+
912
+ <span class="sd"> Example:</span>
913
+ <span class="sd"> &gt;&gt;&gt; from ciocore import api_client, package_tree, package_environment</span>
914
+ <span class="sd"> &gt;&gt;&gt; packages = api_client.request_software_packages()</span>
915
+ <span class="sd"> &gt;&gt;&gt; pt = package_tree.PackageTree(packages, product=&quot;cinema4d&quot;)</span>
916
+ <span class="sd"> &gt;&gt;&gt; one_dcc_name = pt.supported_host_names()[0]</span>
917
+ <span class="sd"> cinema4d 21.209.RB305619 linux</span>
918
+
919
+ <span class="sd"> &gt;&gt;&gt; pkg = pt.find_by_name(one_dcc_name)</span>
920
+ <span class="sd"> &gt;&gt;&gt; pe = package_environment.PackageEnvironment(pkg)</span>
921
+ <span class="sd"> &gt;&gt;&gt; print(dict(pe))</span>
922
+ <span class="sd"> {</span>
923
+ <span class="sd"> &quot;PATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin&quot;,</span>
924
+ <span class="sd"> &quot;g_licenseServerRLM&quot;: &quot;conductor-rlm:6112&quot;,</span>
925
+ <span class="sd"> &quot;LD_LIBRARY_PATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/embree.module/libs/linux64&quot;,</span>
926
+ <span class="sd"> &quot;PYTHONPATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64/python2.7/lib-dynload&quot;,</span>
927
+ <span class="sd"> }</span>
928
+
929
+ <span class="sd"> &gt;&gt;&gt; extra_env = [</span>
930
+ <span class="sd"> {&quot;name&quot;:&quot;PATH&quot;, &quot;value&quot;: &quot;/my/custom/scripts&quot;, &quot;merge_policy&quot;:&quot;append&quot;},</span>
931
+ <span class="sd"> {&quot;name&quot;:&quot;DEBUG_MODE&quot;, &quot;value&quot;: &quot;1&quot;, &quot;merge_policy&quot;:&quot;exclusive&quot;}</span>
932
+ <span class="sd"> ]</span>
933
+ <span class="sd"> &gt;&gt;&gt; pe.extend(extra_env)</span>
934
+ <span class="sd"> &gt;&gt;&gt; print(dict(pe))</span>
935
+ <span class="sd"> {</span>
936
+ <span class="sd"> &quot;PATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin:/my/custom/scripts&quot;,</span>
937
+ <span class="sd"> &quot;g_licenseServerRLM&quot;: &quot;conductor-rlm:6112&quot;,</span>
938
+ <span class="sd"> &quot;LD_LIBRARY_PATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/embree.module/libs/linux64&quot;,</span>
939
+ <span class="sd"> &quot;PYTHONPATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64/python2.7/lib-dynload&quot;,</span>
940
+ <span class="sd"> &quot;DEBUG_MODE&quot;: &quot;1&quot;,</span>
941
+ <span class="sd"> }</span>
942
+ <span class="sd"> &quot;&quot;&quot;</span>
943
+
944
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">env_list</span><span class="p">:</span>
945
+ <span class="k">return</span>
946
+
947
+ <span class="k">try</span><span class="p">:</span>
948
+ <span class="n">others</span> <span class="o">=</span> <span class="n">env_list</span><span class="p">[</span><span class="s2">&quot;environment&quot;</span><span class="p">]</span>
949
+ <span class="n">requested_platform</span> <span class="o">=</span> <span class="n">env_list</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;platform&quot;</span><span class="p">)</span>
950
+ <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
951
+ <span class="n">others</span> <span class="o">=</span> <span class="n">env_list</span>
952
+ <span class="n">requested_platform</span> <span class="o">=</span> <span class="n">platform</span>
953
+
954
+ <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span><span class="p">:</span>
955
+ <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">=</span> <span class="n">requested_platform</span> <span class="ow">or</span> <span class="s2">&quot;linux&quot;</span>
956
+ <span class="k">elif</span> <span class="n">requested_platform</span> <span class="ow">and</span> <span class="n">requested_platform</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span><span class="p">:</span>
957
+ <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Can&#39;t change platform once initialized.&quot;</span><span class="p">)</span>
958
+
959
+ <span class="k">for</span> <span class="n">var</span> <span class="ow">in</span> <span class="n">others</span><span class="p">:</span>
960
+ <span class="n">name</span> <span class="o">=</span> <span class="n">var</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span>
961
+ <span class="n">value</span> <span class="o">=</span> <span class="n">var</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">]</span>
962
+ <span class="n">policy</span> <span class="o">=</span> <span class="n">var</span><span class="p">[</span><span class="s2">&quot;merge_policy&quot;</span><span class="p">]</span>
963
+ <span class="k">if</span> <span class="n">policy</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="s2">&quot;prepend&quot;</span><span class="p">,</span> <span class="s2">&quot;exclusive&quot;</span><span class="p">]:</span>
964
+ <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Unexpected merge policy: </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">policy</span><span class="p">)</span>
965
+
966
+ <span class="k">if</span> <span class="n">policy</span> <span class="o">==</span> <span class="s2">&quot;append&quot;</span><span class="p">:</span>
967
+ <span class="bp">self</span><span class="o">.</span><span class="n">_append</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
968
+ <span class="k">elif</span> <span class="n">policy</span> <span class="o">==</span> <span class="s2">&quot;prepend&quot;</span><span class="p">:</span>
969
+ <span class="bp">self</span><span class="o">.</span><span class="n">_prepend</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
970
+ <span class="k">else</span><span class="p">:</span>
971
+ <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
972
+
973
+
974
+ <span class="k">def</span> <span class="nf">_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
975
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Set the value of an exclusive variable.</span>
976
+
977
+ <span class="sd"> Can be overwritten by subsequent adds.</span>
978
+
979
+ <span class="sd"> It is an error if the variable has already been declared with policy=append.</span>
980
+ <span class="sd"> &quot;&quot;&quot;</span>
981
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span>
982
+ <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
983
+ <span class="s2">&quot;Can&#39;t change merge policy for &#39;</span><span class="si">{}</span><span class="s2">&#39; from &#39;append&#39; to &#39;exclusive&#39;.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
984
+ <span class="p">)</span>
985
+ <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
986
+
987
+ <span class="k">def</span> <span class="nf">_append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
988
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Set the value of an append variable.</span>
989
+
990
+ <span class="sd"> Can be appended to with subsequent adds.</span>
991
+
992
+ <span class="sd"> It is an error if the variable has already been declared with policy=exclusive.</span>
993
+ <span class="sd"> &quot;&quot;&quot;</span>
994
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
995
+ <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span>
996
+ <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
997
+ <span class="s2">&quot;Can&#39;t change merge policy for &#39;</span><span class="si">{}</span><span class="s2">&#39; from &#39;exclusive&#39; to &#39;append&#39;.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
998
+ <span class="p">)</span>
999
+ <span class="k">else</span><span class="p">:</span>
1000
+ <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
1001
+ <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
1002
+
1003
+ <span class="k">def</span> <span class="nf">_prepend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
1004
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Set the value of an append/prepend variable.</span>
1005
+
1006
+ <span class="sd"> Can be appended to with subsequent adds.</span>
1007
+
1008
+ <span class="sd"> It is an error if the variable has already been declared with policy=exclusive.</span>
1009
+ <span class="sd"> &quot;&quot;&quot;</span>
1010
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
1011
+ <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span>
1012
+ <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
1013
+ <span class="s2">&quot;Can&#39;t change merge policy for &#39;</span><span class="si">{}</span><span class="s2">&#39; from &#39;exclusive&#39; to &#39;prepend&#39;.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
1014
+ <span class="p">)</span>
1015
+ <span class="k">else</span><span class="p">:</span>
1016
+ <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
1017
+ <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
1018
+
1019
+ <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1020
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Cast the object as a dict.&quot;&quot;&quot;</span>
1021
+ <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">&quot;windows&quot;</span> <span class="k">else</span> <span class="s2">&quot;:&quot;</span>
1022
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">:</span>
1023
+ <span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
1024
+ <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">var</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
1025
+ <span class="k">yield</span> <span class="n">key</span><span class="p">,</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">var</span><span class="p">)</span>
1026
+ <span class="k">else</span><span class="p">:</span>
1027
+ <span class="k">yield</span> <span class="n">key</span><span class="p">,</span> <span class="n">var</span>
1028
+
1029
+ <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
1030
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Allow access by key.&quot;&quot;&quot;</span>
1031
+ <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">&quot;windows&quot;</span> <span class="k">else</span> <span class="s2">&quot;:&quot;</span>
1032
+ <span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
1033
+ <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">var</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
1034
+ <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">var</span><span class="p">)</span>
1035
+ <span class="k">return</span> <span class="n">var</span>
1036
+ </code></pre></div>
1037
+ </details>
1038
+
1039
+
1040
+
1041
+ <div class="doc doc-children">
1042
+
1043
+
1044
+
1045
+
1046
+
1047
+
1048
+
1049
+
1050
+
1051
+ <div class="doc doc-object doc-method">
1052
+
1053
+
1054
+
1055
+ <h3 id="ciocore.package_environment.PackageEnvironment.__init__" class="doc doc-heading">
1056
+ <code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">platform</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
1057
+
1058
+ <span class="doc doc-properties">
1059
+ <small class="doc doc-property doc-property-special"><code>special</code></small>
1060
+ </span>
1061
+
1062
+ </h3>
1063
+
1064
+ <div class="doc doc-contents ">
1065
+
1066
+ <p>Encapsulate a list of environment variables.</p>
1067
+ <p>Typically, one would initialize a PackageEnvironment with a package, and then modify by adding more packages or lists of variables. Extra variables can be added by the customer, or programmatically such as during asset scraping.</p>
1068
+
1069
+ <p><strong>Parameters:</strong></p>
1070
+ <table>
1071
+ <thead>
1072
+ <tr>
1073
+ <th>Name</th>
1074
+ <th>Type</th>
1075
+ <th>Description</th>
1076
+ <th>Default</th>
1077
+ </tr>
1078
+ </thead>
1079
+ <tbody>
1080
+ <tr>
1081
+ <td><code>env_list</code></td>
1082
+ <td><code>object|list</code></td>
1083
+ <td><p>An object that provides a list of dictionaries with properties: <code>name</code>, <code>value</code>, and <code>merge_policy</code>.</p></td>
1084
+ <td><code>None</code></td>
1085
+ </tr>
1086
+ <tr>
1087
+ <td><code>platform</code></td>
1088
+ <td><code>str</code></td>
1089
+ <td><p>If the env_list is a regular list, then this is required.</p></td>
1090
+ <td><code>None</code></td>
1091
+ </tr>
1092
+ </tbody>
1093
+ </table> <p>Args are delegated to <a href="/package_environment/#ciocore.package_environment.PackageEnvironment.extend">extend()</a>.</p>
1094
+
1095
+ <details class="quote">
1096
+ <summary>Source code in <code>ciocore/package_environment.py</code></summary>
1097
+ <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">platform</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
1098
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1099
+ <span class="sd"> Encapsulate a list of environment variables.</span>
1100
+
1101
+ <span class="sd"> Typically, one would initialize a PackageEnvironment with a package, and then modify by adding more packages or lists of variables. Extra variables can be added by the customer, or programmatically such as during asset scraping.</span>
1102
+
1103
+ <span class="sd"> Args:</span>
1104
+ <span class="sd"> env_list (object|list): An object that provides a list of dictionaries with properties: `name`, `value`, and `merge_policy`.</span>
1105
+ <span class="sd"> platform (str): If the env_list is a regular list, then this is required.</span>
1106
+
1107
+ <span class="sd"> Args are delegated to [extend()](/package_environment/#ciocore.package_environment.PackageEnvironment.extend).</span>
1108
+ <span class="sd"> &quot;&quot;&quot;</span>
1109
+ <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">=</span> <span class="kc">None</span>
1110
+ <span class="bp">self</span><span class="o">.</span><span class="n">_env</span> <span class="o">=</span> <span class="p">{}</span>
1111
+
1112
+ <span class="bp">self</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">env_list</span><span class="p">,</span> <span class="n">platform</span><span class="p">)</span>
1113
+ </code></pre></div>
1114
+ </details>
1115
+ </div>
1116
+
1117
+ </div>
1118
+
1119
+
1120
+
1121
+ <div class="doc doc-object doc-method">
1122
+
1123
+
1124
+
1125
+ <h3 id="ciocore.package_environment.PackageEnvironment.extend" class="doc doc-heading">
1126
+ <code class="highlight language-python"><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env_list</span><span class="p">,</span> <span class="n">platform</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
1127
+
1128
+
1129
+ </h3>
1130
+
1131
+ <div class="doc doc-contents ">
1132
+
1133
+ <p>Extend the Package environment with the given variable specifications.</p>
1134
+
1135
+ <p><strong>Parameters:</strong></p>
1136
+ <table>
1137
+ <thead>
1138
+ <tr>
1139
+ <th>Name</th>
1140
+ <th>Type</th>
1141
+ <th>Description</th>
1142
+ <th>Default</th>
1143
+ </tr>
1144
+ </thead>
1145
+ <tbody>
1146
+ <tr>
1147
+ <td><code>env_list</code></td>
1148
+ <td><code>object|list</code></td>
1149
+ <td><ul>
1150
+ <li>A list of dictionaries with properties: <code>name</code>, <code>value</code>, and <code>merge_policy</code>.</li>
1151
+ <li>An object with an <code>environment</code> key that contains a list of the dictionaries described above. The latter is the structure of a package. Therefore we can initialize or extend a PackageEnvironment with a package.</li>
1152
+ </ul></td>
1153
+ <td><em>required</em></td>
1154
+ </tr>
1155
+ <tr>
1156
+ <td><code>platform</code></td>
1157
+ <td><code>str</code></td>
1158
+ <td><p>Defaults to <code>None</code>. If env_list is a package, then the platform is taken from the package and the <code>platform</code> keyword is ignored. If env_list is a list, then if this is the first add, a platform should be specified, otherwise it will default to linux.</p></td>
1159
+ <td><code>None</code></td>
1160
+ </tr>
1161
+ </tbody>
1162
+ </table> <p>The first time data is added to a PackageEnvironment, the platform is set in stone. Subsequent <code>adds</code> that try to change the platform are considered an error.</p>
1163
+ <p>Each variable to be added specifies a merge_policy: <code>append</code>, <code>prepend</code>, or <code>exclusive</code> <code>append</code> and <code>prepend</code> can be thought of as lists= types. Once an individual variable has been initialized as a list, it can't be changed to <code>exclusive</code>. This means:</p>
1164
+ <ol>
1165
+ <li>It's not possible to overwrite variables that have been added as <code>append</code> or <code>prepend</code>.</li>
1166
+ <li>Exclusive variables are always overwritten by subsequent adds.</li>
1167
+ </ol>
1168
+
1169
+ <p><strong>Exceptions:</strong></p>
1170
+ <table>
1171
+ <thead>
1172
+ <tr>
1173
+ <th>Type</th>
1174
+ <th>Description</th>
1175
+ </tr>
1176
+ </thead>
1177
+ <tbody>
1178
+ <tr>
1179
+ <td><code>ValueError</code></td>
1180
+ <td><p>Either an attempt to change the platform once initialized, or an invalid merge policy.</p></td>
1181
+ </tr>
1182
+ </tbody>
1183
+ </table>
1184
+ <p><strong>Examples:</strong></p>
1185
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span> <span class="nn">ciocore</span> <span class="kn">import</span> <span class="n">api_client</span><span class="p">,</span> <span class="n">package_tree</span><span class="p">,</span> <span class="n">package_environment</span>
1186
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">packages</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">request_software_packages</span><span class="p">()</span>
1187
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">pt</span> <span class="o">=</span> <span class="n">package_tree</span><span class="o">.</span><span class="n">PackageTree</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="s2">&quot;cinema4d&quot;</span><span class="p">)</span>
1188
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">one_dcc_name</span> <span class="o">=</span> <span class="n">pt</span><span class="o">.</span><span class="n">supported_host_names</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
1189
+ <span class="n">cinema4d</span> <span class="mf">21.209</span><span class="o">.</span><span class="n">RB305619</span> <span class="n">linux</span>
1190
+ </code></pre></div>
1191
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="n">pkg</span> <span class="o">=</span> <span class="n">pt</span><span class="o">.</span><span class="n">find_by_name</span><span class="p">(</span><span class="n">one_dcc_name</span><span class="p">)</span>
1192
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">pe</span> <span class="o">=</span> <span class="n">package_environment</span><span class="o">.</span><span class="n">PackageEnvironment</span><span class="p">(</span><span class="n">pkg</span><span class="p">)</span>
1193
+ <span class="o">&gt;&gt;&gt;</span> <span class="nb">print</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">pe</span><span class="p">))</span>
1194
+ <span class="p">{</span>
1195
+ <span class="s2">&quot;PATH&quot;</span><span class="p">:</span> <span class="s2">&quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin&quot;</span><span class="p">,</span>
1196
+ <span class="s2">&quot;g_licenseServerRLM&quot;</span><span class="p">:</span> <span class="s2">&quot;conductor-rlm:6112&quot;</span><span class="p">,</span>
1197
+ <span class="s2">&quot;LD_LIBRARY_PATH&quot;</span><span class="p">:</span> <span class="s2">&quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/embree.module/libs/linux64&quot;</span><span class="p">,</span>
1198
+ <span class="s2">&quot;PYTHONPATH&quot;</span><span class="p">:</span> <span class="s2">&quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64/python2.7/lib-dynload&quot;</span><span class="p">,</span>
1199
+ <span class="p">}</span>
1200
+ </code></pre></div>
1201
+ <div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="n">extra_env</span> <span class="o">=</span> <span class="p">[</span>
1202
+ <span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;PATH&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="s2">&quot;/my/custom/scripts&quot;</span><span class="p">,</span> <span class="s2">&quot;merge_policy&quot;</span><span class="p">:</span><span class="s2">&quot;append&quot;</span><span class="p">},</span>
1203
+ <span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span><span class="s2">&quot;DEBUG_MODE&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="s2">&quot;1&quot;</span><span class="p">,</span> <span class="s2">&quot;merge_policy&quot;</span><span class="p">:</span><span class="s2">&quot;exclusive&quot;</span><span class="p">}</span>
1204
+ <span class="p">]</span>
1205
+ <span class="o">&gt;&gt;&gt;</span> <span class="n">pe</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">extra_env</span><span class="p">)</span>
1206
+ <span class="o">&gt;&gt;&gt;</span> <span class="nb">print</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">pe</span><span class="p">))</span>
1207
+ <span class="p">{</span>
1208
+ <span class="s2">&quot;PATH&quot;</span><span class="p">:</span> <span class="s2">&quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin:/my/custom/scripts&quot;</span><span class="p">,</span>
1209
+ <span class="s2">&quot;g_licenseServerRLM&quot;</span><span class="p">:</span> <span class="s2">&quot;conductor-rlm:6112&quot;</span><span class="p">,</span>
1210
+ <span class="s2">&quot;LD_LIBRARY_PATH&quot;</span><span class="p">:</span> <span class="s2">&quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/embree.module/libs/linux64&quot;</span><span class="p">,</span>
1211
+ <span class="s2">&quot;PYTHONPATH&quot;</span><span class="p">:</span> <span class="s2">&quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64/python2.7/lib-dynload&quot;</span><span class="p">,</span>
1212
+ <span class="s2">&quot;DEBUG_MODE&quot;</span><span class="p">:</span> <span class="s2">&quot;1&quot;</span><span class="p">,</span>
1213
+ <span class="p">}</span>
1214
+ </code></pre></div>
1215
+
1216
+ <details class="quote">
1217
+ <summary>Source code in <code>ciocore/package_environment.py</code></summary>
1218
+ <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">extend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env_list</span><span class="p">,</span> <span class="n">platform</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
1219
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
1220
+ <span class="sd"> Extend the Package environment with the given variable specifications.</span>
1221
+
1222
+ <span class="sd"> Args:</span>
1223
+ <span class="sd"> env_list (object|list): Either:</span>
1224
+ <span class="sd"> * A list of dictionaries with properties: `name`, `value`, and `merge_policy`.</span>
1225
+ <span class="sd"> * An object with an `environment` key that contains a list of the dictionaries described above. The latter is the structure of a package. Therefore we can initialize or extend a PackageEnvironment with a package.</span>
1226
+ <span class="sd"> platform (str): Defaults to `None`. If env_list is a package, then the platform is taken from the package and the `platform` keyword is ignored. If env_list is a list, then if this is the first add, a platform should be specified, otherwise it will default to linux.</span>
1227
+
1228
+ <span class="sd"> The first time data is added to a PackageEnvironment, the platform is set in stone. Subsequent `adds` that try to change the platform are considered an error.</span>
1229
+
1230
+ <span class="sd"> Each variable to be added specifies a merge_policy: `append`, `prepend`, or `exclusive` `append` and `prepend` can be thought of as lists= types. Once an individual variable has been initialized as a list, it can&#39;t be changed to `exclusive`. This means:</span>
1231
+
1232
+ <span class="sd"> 1. It&#39;s not possible to overwrite variables that have been added as `append` or `prepend`.</span>
1233
+ <span class="sd"> 2. Exclusive variables are always overwritten by subsequent adds.</span>
1234
+
1235
+ <span class="sd"> Raises:</span>
1236
+ <span class="sd"> ValueError: Either an attempt to change the platform once initialized, or an invalid merge policy.</span>
1237
+
1238
+
1239
+ <span class="sd"> Example:</span>
1240
+ <span class="sd"> &gt;&gt;&gt; from ciocore import api_client, package_tree, package_environment</span>
1241
+ <span class="sd"> &gt;&gt;&gt; packages = api_client.request_software_packages()</span>
1242
+ <span class="sd"> &gt;&gt;&gt; pt = package_tree.PackageTree(packages, product=&quot;cinema4d&quot;)</span>
1243
+ <span class="sd"> &gt;&gt;&gt; one_dcc_name = pt.supported_host_names()[0]</span>
1244
+ <span class="sd"> cinema4d 21.209.RB305619 linux</span>
1245
+
1246
+ <span class="sd"> &gt;&gt;&gt; pkg = pt.find_by_name(one_dcc_name)</span>
1247
+ <span class="sd"> &gt;&gt;&gt; pe = package_environment.PackageEnvironment(pkg)</span>
1248
+ <span class="sd"> &gt;&gt;&gt; print(dict(pe))</span>
1249
+ <span class="sd"> {</span>
1250
+ <span class="sd"> &quot;PATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin&quot;,</span>
1251
+ <span class="sd"> &quot;g_licenseServerRLM&quot;: &quot;conductor-rlm:6112&quot;,</span>
1252
+ <span class="sd"> &quot;LD_LIBRARY_PATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/embree.module/libs/linux64&quot;,</span>
1253
+ <span class="sd"> &quot;PYTHONPATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64/python2.7/lib-dynload&quot;,</span>
1254
+ <span class="sd"> }</span>
1255
+
1256
+ <span class="sd"> &gt;&gt;&gt; extra_env = [</span>
1257
+ <span class="sd"> {&quot;name&quot;:&quot;PATH&quot;, &quot;value&quot;: &quot;/my/custom/scripts&quot;, &quot;merge_policy&quot;:&quot;append&quot;},</span>
1258
+ <span class="sd"> {&quot;name&quot;:&quot;DEBUG_MODE&quot;, &quot;value&quot;: &quot;1&quot;, &quot;merge_policy&quot;:&quot;exclusive&quot;}</span>
1259
+ <span class="sd"> ]</span>
1260
+ <span class="sd"> &gt;&gt;&gt; pe.extend(extra_env)</span>
1261
+ <span class="sd"> &gt;&gt;&gt; print(dict(pe))</span>
1262
+ <span class="sd"> {</span>
1263
+ <span class="sd"> &quot;PATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin:/my/custom/scripts&quot;,</span>
1264
+ <span class="sd"> &quot;g_licenseServerRLM&quot;: &quot;conductor-rlm:6112&quot;,</span>
1265
+ <span class="sd"> &quot;LD_LIBRARY_PATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64:/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/embree.module/libs/linux64&quot;,</span>
1266
+ <span class="sd"> &quot;PYTHONPATH&quot;: &quot;/opt/maxon/cinema4d/21/cinema4d21.209vRB305619/bin/resource/modules/python/libs/linux64/python.linux64.framework/lib64/python2.7/lib-dynload&quot;,</span>
1267
+ <span class="sd"> &quot;DEBUG_MODE&quot;: &quot;1&quot;,</span>
1268
+ <span class="sd"> }</span>
1269
+ <span class="sd"> &quot;&quot;&quot;</span>
1270
+
1271
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">env_list</span><span class="p">:</span>
1272
+ <span class="k">return</span>
1273
+
1274
+ <span class="k">try</span><span class="p">:</span>
1275
+ <span class="n">others</span> <span class="o">=</span> <span class="n">env_list</span><span class="p">[</span><span class="s2">&quot;environment&quot;</span><span class="p">]</span>
1276
+ <span class="n">requested_platform</span> <span class="o">=</span> <span class="n">env_list</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;platform&quot;</span><span class="p">)</span>
1277
+ <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
1278
+ <span class="n">others</span> <span class="o">=</span> <span class="n">env_list</span>
1279
+ <span class="n">requested_platform</span> <span class="o">=</span> <span class="n">platform</span>
1280
+
1281
+ <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span><span class="p">:</span>
1282
+ <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">=</span> <span class="n">requested_platform</span> <span class="ow">or</span> <span class="s2">&quot;linux&quot;</span>
1283
+ <span class="k">elif</span> <span class="n">requested_platform</span> <span class="ow">and</span> <span class="n">requested_platform</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span><span class="p">:</span>
1284
+ <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Can&#39;t change platform once initialized.&quot;</span><span class="p">)</span>
1285
+
1286
+ <span class="k">for</span> <span class="n">var</span> <span class="ow">in</span> <span class="n">others</span><span class="p">:</span>
1287
+ <span class="n">name</span> <span class="o">=</span> <span class="n">var</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span>
1288
+ <span class="n">value</span> <span class="o">=</span> <span class="n">var</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">]</span>
1289
+ <span class="n">policy</span> <span class="o">=</span> <span class="n">var</span><span class="p">[</span><span class="s2">&quot;merge_policy&quot;</span><span class="p">]</span>
1290
+ <span class="k">if</span> <span class="n">policy</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="s2">&quot;prepend&quot;</span><span class="p">,</span> <span class="s2">&quot;exclusive&quot;</span><span class="p">]:</span>
1291
+ <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Unexpected merge policy: </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">policy</span><span class="p">)</span>
1292
+
1293
+ <span class="k">if</span> <span class="n">policy</span> <span class="o">==</span> <span class="s2">&quot;append&quot;</span><span class="p">:</span>
1294
+ <span class="bp">self</span><span class="o">.</span><span class="n">_append</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
1295
+ <span class="k">elif</span> <span class="n">policy</span> <span class="o">==</span> <span class="s2">&quot;prepend&quot;</span><span class="p">:</span>
1296
+ <span class="bp">self</span><span class="o">.</span><span class="n">_prepend</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
1297
+ <span class="k">else</span><span class="p">:</span>
1298
+ <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
1299
+ </code></pre></div>
1300
+ </details>
1301
+ </div>
1302
+
1303
+ </div>
1304
+
1305
+
1306
+
1307
+ <div class="doc doc-object doc-method">
1308
+
1309
+
1310
+
1311
+ <h3 id="ciocore.package_environment.PackageEnvironment.__iter__" class="doc doc-heading">
1312
+ <code class="highlight language-python"><span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></code>
1313
+
1314
+ <span class="doc doc-properties">
1315
+ <small class="doc doc-property doc-property-special"><code>special</code></small>
1316
+ </span>
1317
+
1318
+ </h3>
1319
+
1320
+ <div class="doc doc-contents ">
1321
+
1322
+ <p>Cast the object as a dict.</p>
1323
+
1324
+ <details class="quote">
1325
+ <summary>Source code in <code>ciocore/package_environment.py</code></summary>
1326
+ <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1327
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Cast the object as a dict.&quot;&quot;&quot;</span>
1328
+ <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">&quot;windows&quot;</span> <span class="k">else</span> <span class="s2">&quot;:&quot;</span>
1329
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">:</span>
1330
+ <span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
1331
+ <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">var</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
1332
+ <span class="k">yield</span> <span class="n">key</span><span class="p">,</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">var</span><span class="p">)</span>
1333
+ <span class="k">else</span><span class="p">:</span>
1334
+ <span class="k">yield</span> <span class="n">key</span><span class="p">,</span> <span class="n">var</span>
1335
+ </code></pre></div>
1336
+ </details>
1337
+ </div>
1338
+
1339
+ </div>
1340
+
1341
+
1342
+
1343
+ <div class="doc doc-object doc-method">
1344
+
1345
+
1346
+
1347
+ <h3 id="ciocore.package_environment.PackageEnvironment.__getitem__" class="doc doc-heading">
1348
+ <code class="highlight language-python"><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span></code>
1349
+
1350
+ <span class="doc doc-properties">
1351
+ <small class="doc doc-property doc-property-special"><code>special</code></small>
1352
+ </span>
1353
+
1354
+ </h3>
1355
+
1356
+ <div class="doc doc-contents ">
1357
+
1358
+ <p>Allow access by key.</p>
1359
+
1360
+ <details class="quote">
1361
+ <summary>Source code in <code>ciocore/package_environment.py</code></summary>
1362
+ <div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
1363
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Allow access by key.&quot;&quot;&quot;</span>
1364
+ <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;;&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">&quot;windows&quot;</span> <span class="k">else</span> <span class="s2">&quot;:&quot;</span>
1365
+ <span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
1366
+ <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">var</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
1367
+ <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">var</span><span class="p">)</span>
1368
+ <span class="k">return</span> <span class="n">var</span>
1369
+ </code></pre></div>
1370
+ </details>
1371
+ </div>
1372
+
1373
+ </div>
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+ </div>
1380
+
1381
+ </div>
1382
+
1383
+ </div>
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+ </div>
1392
+
1393
+ </div>
1394
+
1395
+ </div>
1396
+
1397
+
1398
+
1399
+
1400
+
1401
+
1402
+ </article>
1403
+ </div>
1404
+
1405
+
1406
+ </div>
1407
+
1408
+ <button type="button" class="md-top md-icon" data-md-component="top" hidden>
1409
+
1410
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
1411
+ Back to top
1412
+ </button>
1413
+
1414
+ </main>
1415
+
1416
+ <footer class="md-footer">
1417
+
1418
+ <div class="md-footer-meta md-typeset">
1419
+ <div class="md-footer-meta__inner md-grid">
1420
+ <div class="md-copyright">
1421
+
1422
+ <div class="md-copyright__highlight">
1423
+ Copyright &copy; 2023, CoreWeave.
1424
+ </div>
1425
+
1426
+
1427
+ Made with
1428
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
1429
+ Material for MkDocs
1430
+ </a>
1431
+
1432
+ </div>
1433
+
1434
+ </div>
1435
+ </div>
1436
+ </footer>
1437
+
1438
+ </div>
1439
+ <div class="md-dialog" data-md-component="dialog">
1440
+ <div class="md-dialog__inner md-typeset"></div>
1441
+ </div>
1442
+
1443
+ <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.expand", "navigation.instant", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "navigation.top"], "search": "../../assets/javascripts/workers/search.dfff1995.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
1444
+
1445
+
1446
+ <script src="../../assets/javascripts/bundle.4e31edb1.min.js"></script>
1447
+
1448
+
1449
+ </body>
1450
+ </html>