ciocore 9.1.0b2__py2.py3-none-any.whl → 9.1.0rc1__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.
- ciocore/VERSION +1 -1
- ciocore/api_client.py +10 -6
- ciocore/data.py +4 -2
- ciocore/docsite/apidoc/api_client/index.html +17 -6
- ciocore/docsite/apidoc/data/index.html +11 -3
- ciocore/docsite/apidoc/package_tree/index.html +0 -5
- ciocore/docsite/search/search_index.json +1 -1
- ciocore/docsite/sitemap.xml.gz +0 -0
- ciocore/package_tree.py +0 -4
- ciocore/worker.py +1 -5
- {ciocore-9.1.0b2.dist-info → ciocore-9.1.0rc1.dist-info}/METADATA +10 -5
- {ciocore-9.1.0b2.dist-info → ciocore-9.1.0rc1.dist-info}/RECORD +21 -24
- tests/test_api_client.py +1 -4
- tests/test_common.py +1 -11
- tests/test_config.py +1 -4
- tests/test_data.py +167 -157
- tests/test_submit.py +1 -4
- tests/test_uploader.py +1 -4
- ciocore/compat.py +0 -15
- tests/extra_env_fixtures.py +0 -57
- tests/project_fixtures.py +0 -8
- {ciocore-9.1.0b2.dist-info → ciocore-9.1.0rc1.dist-info}/WHEEL +0 -0
- {ciocore-9.1.0b2.dist-info → ciocore-9.1.0rc1.dist-info}/entry_points.txt +0 -0
- {ciocore-9.1.0b2.dist-info → ciocore-9.1.0rc1.dist-info}/top_level.txt +0 -0
ciocore/docsite/sitemap.xml.gz
CHANGED
|
Binary file
|
ciocore/package_tree.py
CHANGED
ciocore/worker.py
CHANGED
|
@@ -621,11 +621,7 @@ class JobManager():
|
|
|
621
621
|
q_size = self.work_queues[index].qsize()
|
|
622
622
|
worker_threads = self.workers[index].threads
|
|
623
623
|
|
|
624
|
-
|
|
625
|
-
try:
|
|
626
|
-
num_active_threads = len([thd for thd in worker_threads if thd.isAlive()])
|
|
627
|
-
except AttributeError:
|
|
628
|
-
num_active_threads = len([thd for thd in worker_threads if thd.is_alive()])
|
|
624
|
+
num_active_threads = len([thd for thd in worker_threads if thd.is_alive()])
|
|
629
625
|
|
|
630
626
|
msg += '%s \titems in queue: %s' % (q_size, worker_class.__name__)
|
|
631
627
|
msg += '\t\t%s threads' % num_active_threads
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ciocore
|
|
3
|
-
Version: 9.1.
|
|
3
|
+
Version: 9.1.0rc1
|
|
4
4
|
Summary: Core functionality for Conductor's client tools
|
|
5
5
|
Home-page: https://github.com/ConductorTechnologies/ciocore
|
|
6
6
|
Author: conductor
|
|
@@ -9,9 +9,8 @@ Classifier: Operating System :: OS Independent
|
|
|
9
9
|
Classifier: Programming Language :: Python
|
|
10
10
|
Classifier: Topic :: Multimedia :: Graphics :: 3D Rendering
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
|
-
Requires-Dist: requests
|
|
13
|
-
Requires-Dist: pyjwt==
|
|
14
|
-
Requires-Dist: future>=0.18.2
|
|
12
|
+
Requires-Dist: requests>=2.31.0
|
|
13
|
+
Requires-Dist: pyjwt==2.9.0
|
|
15
14
|
Requires-Dist: cioseq<1.0.0,>=0.4.1
|
|
16
15
|
Requires-Dist: Click<9.0.0,>=8.1.3
|
|
17
16
|
Requires-Dist: markdown<4.0.0,>=3.5.2
|
|
@@ -51,12 +50,18 @@ See [CONTRIBUTING](CONTRIBUTING.md)
|
|
|
51
50
|
|
|
52
51
|
## Changelog
|
|
53
52
|
|
|
54
|
-
##
|
|
53
|
+
## Version:9.1.0-rc.1 -- 11 Dec 2024
|
|
54
|
+
|
|
55
55
|
* Adds required changes to parallelize multi-part uploads
|
|
56
56
|
* Cleans up the output when explicit paths are uploaded
|
|
57
57
|
* Fixes logic so managers doesn't erroneously try and call join a second time if cancelled
|
|
58
|
+
* Use the new required jwt parameters
|
|
59
|
+
* Removing py2.7 compatibility
|
|
58
60
|
|
|
61
|
+
## Version:8.3.3 -- 04 Dec 2024
|
|
59
62
|
|
|
63
|
+
* Adds filter option for API data query
|
|
64
|
+
|
|
60
65
|
## Version:8.3.2 -- 01 Oct 2024
|
|
61
66
|
|
|
62
67
|
* Tweak to package order behavior for markdown package query
|
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
ciocore/VERSION,sha256=
|
|
1
|
+
ciocore/VERSION,sha256=ax2aQwModu65ZstFnKm4dTChIjzu_0ljZcaKGDaGkSA,10
|
|
2
2
|
ciocore/__init__.py,sha256=aTP7LeeosQA8BZE67gDV4jgfTK5zxmwZRjiTRu_ZWj0,646
|
|
3
|
-
ciocore/api_client.py,sha256=
|
|
3
|
+
ciocore/api_client.py,sha256=KKL7TsYygNcfkFZDPPq1CSJsrVN_QLK4PqP44vXsCQg,33101
|
|
4
4
|
ciocore/cli.py,sha256=jZ1lOKQiUcrMhsVmD9SVmPMFwHtgDF4SaoAf2-PBS54,15449
|
|
5
5
|
ciocore/client_db.py,sha256=tTz3bl2xeDPPcYSDS3g3QgV_xYihJMx0Kj6OeN2klK0,12978
|
|
6
6
|
ciocore/common.py,sha256=mBIS6KiYoQsjWe6aIFUGRRvCMl8BIN2kmLZ4J8icap8,14982
|
|
7
|
-
ciocore/compat.py,sha256=5uEXPSog_jxsDMaHBswAKEtfyXT25VgU6WNGIhz9PHU,256
|
|
8
7
|
ciocore/conductor_submit.py,sha256=bxvzdyNzscAOOOsqTvAYh5DQsTWyCQJNb16Mf-n_F0M,9702
|
|
9
8
|
ciocore/config.py,sha256=rCL7kaFn1tYgSglN8q9Wx6SwMpoXTq0BMQGwPRVwVIg,8973
|
|
10
|
-
ciocore/data.py,sha256=
|
|
9
|
+
ciocore/data.py,sha256=zT3zpkSbHPHHGlLeLDTbwkB8_-Ct6zd8qQ-7U1pDCHM,7215
|
|
11
10
|
ciocore/exceptions.py,sha256=4Oq-WX-qiN6kPUdBCHvvd6mtSQ0nCkDbJxWt2CNtpv8,1504
|
|
12
11
|
ciocore/file_utils.py,sha256=swA7th9WhDEloW69YViRTKB-oeC9UmNdEGegfH1r-Gw,17176
|
|
13
12
|
ciocore/hardware_set.py,sha256=FlRQiGCLRcSW7Oko_gzgVK8ZqJ_J92eT8e_AleAbS2E,17047
|
|
14
13
|
ciocore/loggeria.py,sha256=dk8n899TYFiMTD2gjjj8oiumJkPtCus0a_IY2GORAvU,15251
|
|
15
14
|
ciocore/package_environment.py,sha256=MEHV7jfs3NJIEYCIaW8JfJdBmelvPHZMmBzPlXETiRo,7808
|
|
16
15
|
ciocore/package_query.py,sha256=hWi_JmRieZ8f2Ji5JR7tQnHnm29Ktb88scbIXNsDu-8,6181
|
|
17
|
-
ciocore/package_tree.py,sha256=
|
|
16
|
+
ciocore/package_tree.py,sha256=FDKHxYZS8ZAkz3hpjMYFy-P8hwU1V9w4wA7gNqhruqs,15569
|
|
18
17
|
ciocore/post_install.py,sha256=zu5Ctz2ANbKD-f5G2ODLIhKkWENBi4F3UKKu50OEWrg,1000
|
|
19
18
|
ciocore/retry.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
19
|
ciocore/validator.py,sha256=f_K7gxz122W_i5AxVx6dKhckOygl8TnmQiVj7tyX5zw,2344
|
|
21
|
-
ciocore/worker.py,sha256=
|
|
20
|
+
ciocore/worker.py,sha256=3C4KJuBTdeqvMWdBn3cRnTju5dUjNKG0OGtHp0SZ4l8,21613
|
|
22
21
|
ciocore/auth/__init__.py,sha256=cdS-xZzMq41yXM5cz8sUlcYgo8CJYh8HcCCWmhbDgf0,606
|
|
23
22
|
ciocore/auth/server.py,sha256=8btX9-EokUl6q55V8muDmEV2tvvbTBD0BHeWFbwkzUc,3892
|
|
24
23
|
ciocore/docsite/404.html,sha256=xP-mZwn-87pnlkD-paIYzdXDLQr7DS551KflVdFfrCk,17207
|
|
@@ -26,14 +25,14 @@ ciocore/docsite/index.html,sha256=NEK4HaX2yaetTajVtQuTmS9C5cPnkAtxgeKEj7wQ9t0,20
|
|
|
26
25
|
ciocore/docsite/logo.png,sha256=gArgFFWdw8w985-0TkuGIgU_pW9sziEMZdqytXb5WLo,2825
|
|
27
26
|
ciocore/docsite/objects.inv,sha256=XwmLactPEWWC4fAWqHNPBXGsluRxLLTrwDLQqq51ONY,775
|
|
28
27
|
ciocore/docsite/sitemap.xml,sha256=M_V85zl0y2adRvzJAnoCxlZH_Hl7TLnIb1A-6l_xGmI,109
|
|
29
|
-
ciocore/docsite/sitemap.xml.gz,sha256=
|
|
30
|
-
ciocore/docsite/apidoc/api_client/index.html,sha256=
|
|
28
|
+
ciocore/docsite/sitemap.xml.gz,sha256=5N9BP1xbOEPkbpLHoqTsfzUJD3N4IJB55-_WR8JLfrc,127
|
|
29
|
+
ciocore/docsite/apidoc/api_client/index.html,sha256=kkhKzA7OThkpASLveONRPNS7gGppf8Ot2rxek1lZxHc,189722
|
|
31
30
|
ciocore/docsite/apidoc/apidoc/index.html,sha256=GOSvv6KZPOtgekgshRE4j7aDvJkkaiBQLwA_By9J94g,26171
|
|
32
31
|
ciocore/docsite/apidoc/config/index.html,sha256=WDqy4MLR3EMp9T_2-Z9Op61rTFkvb0aTWmtjiR8sbjA,72559
|
|
33
|
-
ciocore/docsite/apidoc/data/index.html,sha256=
|
|
32
|
+
ciocore/docsite/apidoc/data/index.html,sha256=8ldmfisgelzdWtTqGY8uebvVRcskhbv-reO3hMcIgGI,51627
|
|
34
33
|
ciocore/docsite/apidoc/hardware_set/index.html,sha256=SpYg-lwuCvfLPbNIIM7aQL2jGt-NA5wlVMlIKixGwBo,123042
|
|
35
34
|
ciocore/docsite/apidoc/package_environment/index.html,sha256=V6_ah3V1_4_aOwJbEcITCdwuHxe1vGtfn0maRrbflUs,69248
|
|
36
|
-
ciocore/docsite/apidoc/package_tree/index.html,sha256=
|
|
35
|
+
ciocore/docsite/apidoc/package_tree/index.html,sha256=5_4vV8x_GmpsyWHnMP62gBaAcdzfM7L-mP7uQKh_DH4,109054
|
|
37
36
|
ciocore/docsite/assets/_mkdocstrings.css,sha256=K3bqYEmxlOHQ3-M11JNbBWHCBDBLarkFRm8HuEYrAG4,341
|
|
38
37
|
ciocore/docsite/assets/images/favicon.png,sha256=AjhUxD_Eslt5XuSVHIAZ494Fk__rb5GLXR8qm0elfP4,1870
|
|
39
38
|
ciocore/docsite/assets/javascripts/bundle.4e31edb1.min.js,sha256=vMxCR_BtNIcbmbPV6j8Z-YDLQ9ckt4RzvGuzCTg034s,97250
|
|
@@ -81,7 +80,7 @@ ciocore/docsite/cmdline/downloader/index.html,sha256=nygj-0GQmpD79B5AxHjwzQxOFv8
|
|
|
81
80
|
ciocore/docsite/cmdline/packages/index.html,sha256=_kXB85PBAgrqW09OerYpxnJuyERHMbcLn6qBGRdyHwk,20923
|
|
82
81
|
ciocore/docsite/cmdline/uploader/index.html,sha256=vuQ06Gys9Eoxs87PXlqnM5AgB6Ag00BlDIy6oaprjis,25123
|
|
83
82
|
ciocore/docsite/how-to-guides/index.html,sha256=KifCHl2S3RfPBZhP1UXwUNWuhcXPlPPqM4Gk6rVGhjQ,20100
|
|
84
|
-
ciocore/docsite/search/search_index.json,sha256=
|
|
83
|
+
ciocore/docsite/search/search_index.json,sha256=LP1ck_wuTP9A_dWTyaVF8Fugg22q1O0XS6hGqg2zk0M,189860
|
|
85
84
|
ciocore/docsite/stylesheets/extra.css,sha256=_Cxe9Dhg1BBi6Kqaz_iZD9z9VyqxA9vtONRjP4PVic0,354
|
|
86
85
|
ciocore/docsite/stylesheets/tables.css,sha256=LE_zwGRxGcdPIy-9QiVPecOzlEBSqZb_WP5vDkFE0ZM,3235
|
|
87
86
|
ciocore/downloader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -100,16 +99,14 @@ ciocore/uploader/thread_queue_job.py,sha256=MzOcetttfWtDfwy-M0_ARwUf8_OjaGjyy-dA
|
|
|
100
99
|
ciocore/uploader/upload_stats/__init__.py,sha256=Lg1y4zq1i0cwc6Hh2K1TAQDYymLff49W-uIo1xjcvdI,5309
|
|
101
100
|
ciocore/uploader/upload_stats/stats_formats.py,sha256=giNirtObU66VALWghPFSRhg3q_vw5MvESsnXhb_I3y8,2402
|
|
102
101
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
103
|
-
tests/extra_env_fixtures.py,sha256=8qvU4d8SXGKzRVNR5whVqKCQOwOVMiFVfbKBAjxa2gE,1119
|
|
104
102
|
tests/instance_type_fixtures.py,sha256=uIzQduqKQVgjllMuyXaYnRC-pwqk5lnTx3NY2M5Nujo,4320
|
|
105
103
|
tests/package_fixtures.py,sha256=od7ZHofG8ubpQ3PqlUsrcHBcbmD3qVWih9eiIg1WtSQ,5361
|
|
106
|
-
tests/
|
|
107
|
-
tests/test_api_client.py,sha256=4jhj-YrBPcLj7XZn3ngguau2DPxpCYGMSuqPJ3hW0GQ,14497
|
|
104
|
+
tests/test_api_client.py,sha256=isntMDs3QTyTWdghBa_LbFAiC7ydZD1RWb655oEZo24,14452
|
|
108
105
|
tests/test_base_downloader.py,sha256=SS7tWKv2ZZhpUDk4UCg1TkrNrpntjSewgzLl1mEubSE,3603
|
|
109
106
|
tests/test_cli.py,sha256=_WTs2SWlEgd6wtg1hmOBlFnbWVdFLvqp0KqNhy-y2e8,5532
|
|
110
|
-
tests/test_common.py,sha256=
|
|
111
|
-
tests/test_config.py,sha256
|
|
112
|
-
tests/test_data.py,sha256=
|
|
107
|
+
tests/test_common.py,sha256=5N9xeeGVuwN4kcjIg30eBliUD8PePzCNNLuLipGuTgk,410
|
|
108
|
+
tests/test_config.py,sha256=iiMPwoVA9C3vvGGR6_gKKMbYkSxheNLdljeOA-iPrJU,13295
|
|
109
|
+
tests/test_data.py,sha256=o320GdvOJ2TouWtuA8jcs8Cr_gQWlQ6KxWVSWtmARlY,7614
|
|
113
110
|
tests/test_downloader.py,sha256=hceljsjnuvk5Vk5X4mHgavIEcpbv8ylPwpz7rTwJ-aE,4721
|
|
114
111
|
tests/test_hardware_set.py,sha256=hW7A_suyYdU7WkB7qoHSBPLxaAP2CKqI0i_ULfO5GeY,4408
|
|
115
112
|
tests/test_imports_2and3.py,sha256=ehqpRYPVY7djBcb8OT_cnh86iCJJ9wuMWnfSR9RHxmY,507
|
|
@@ -117,13 +114,13 @@ tests/test_job_downloader.py,sha256=_dZqyLZhc2Bq2n7-skERfodHx1JgFyHw8TamHp6ID9I,
|
|
|
117
114
|
tests/test_package_environment.py,sha256=CdiC2PDVSnbcwTb4fsDTWqGYSzs1n5ca2KMoyISckGA,5893
|
|
118
115
|
tests/test_package_query.py,sha256=LZqvCrGkWs0lMtIMumjDatX0ypeYYvabh_k1R0A6sS0,1451
|
|
119
116
|
tests/test_package_tree.py,sha256=K2kzJwRHCr6ojc4MZHjdH7VtmvG5O97OoH6vzwAE9GQ,6780
|
|
120
|
-
tests/test_submit.py,sha256=
|
|
121
|
-
tests/test_uploader.py,sha256=
|
|
117
|
+
tests/test_submit.py,sha256=v75ciL-C0XjiO7wUFQvYBZj0UoqhYOmTLa8TiUyhKqw,5769
|
|
118
|
+
tests/test_uploader.py,sha256=JGp6GEyqRXRtbQSb-IW-cCX_BzNotWdCbnJnLwZvpUM,2869
|
|
122
119
|
tests/test_validator.py,sha256=2fY66ayNc08PGyj2vTI-V_1yeCWJDngkj2zkUM5TTCI,1526
|
|
123
120
|
tests/mocks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
124
121
|
tests/mocks/glob.py,sha256=J2MH7nqi6NJOHuGdVWxhfeBd700_Ckj6cLh_8jSNkfg,215
|
|
125
|
-
ciocore-9.1.
|
|
126
|
-
ciocore-9.1.
|
|
127
|
-
ciocore-9.1.
|
|
128
|
-
ciocore-9.1.
|
|
129
|
-
ciocore-9.1.
|
|
122
|
+
ciocore-9.1.0rc1.dist-info/METADATA,sha256=R_i2XrMj2RbhWLQrczzrbq71Ufz_3Q37WY3d0qIe2m8,19201
|
|
123
|
+
ciocore-9.1.0rc1.dist-info/WHEEL,sha256=qUzzGenXXuJTzyjFah76kDVqDvnk-YDzY00svnrl84w,109
|
|
124
|
+
ciocore-9.1.0rc1.dist-info/entry_points.txt,sha256=cCqcALMYbC4d8545V9w0Zysfg9MVuKWhzDQ2er4UfGE,47
|
|
125
|
+
ciocore-9.1.0rc1.dist-info/top_level.txt,sha256=SvlM5JlqULzAz00JZWfiUhfjhqDzYzSWssA87zdJl0o,14
|
|
126
|
+
ciocore-9.1.0rc1.dist-info/RECORD,,
|
tests/test_api_client.py
CHANGED
tests/test_common.py
CHANGED
|
@@ -9,17 +9,7 @@ FILES_PATH = os.path.join(os.path.dirname(__file__), "files")
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class TestMd5(unittest.TestCase):
|
|
12
|
-
|
|
13
|
-
# def test_get_base64_md5_is_correct_md5(self):
|
|
14
|
-
# from ciocore import common
|
|
15
|
-
# fn1 = os.path.join(FILES_PATH, "one")
|
|
16
|
-
# md5=common.get_base64_md5(fn1)
|
|
17
|
-
# if os.name == "nt":
|
|
18
|
-
# self.assertEqual(md5, "w8F8opHbdwHIozghPc63XA==")
|
|
19
|
-
# else:
|
|
20
|
-
# self.assertEqual(md5, "9iVbsBxkj+lncU1SqJ6OnA==")
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
|
|
23
13
|
def test_get_base64_md5_is_correct_type(self):
|
|
24
14
|
from ciocore import common
|
|
25
15
|
from builtins import str
|
tests/test_config.py
CHANGED
|
@@ -6,10 +6,7 @@ import sys
|
|
|
6
6
|
import os
|
|
7
7
|
import logging
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
from unittest import mock
|
|
11
|
-
except ImportError:
|
|
12
|
-
import mock
|
|
9
|
+
from unittest import mock
|
|
13
10
|
|
|
14
11
|
APIKEY = '{"auth_provider_x509_cert_url": "https://www.exampleapis.com/oauth2/v1/certs", "auth_uri": "https://accounts.example.com/o/oauth2/auth", "client_email": "account-5641301770895360@eloquent-vector-104019.iam.gserviceaccount.com", "client_id": "106815243682887997903", "client_x509_cert_url": "https://www.exampleapis.com/robot/v1/metadata/x509/account-5641301770895360%40eloquent-vector-104019.iam.gserviceaccount.com", "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDcadqRWyd7VpYN\n804fEn07qlqNXU0ihz6g2dfbj9gzZDhHGVCI5QvPFskAQcV91k8cDdFu380m+sh1\nz9wlcdaM/lksRV/DRJiV76qrqyrNi0gSekZUuYhSsyMWUGvG4aSbf5BzVf1j8W4I\nUArH+ht5pgdSjowNc4zQIqmMH2XY+Ntr+NysBBfIv1PI6GoHFgDYOTSzsvz0qFYS\nWuonYGTjzNz4CY9Yh5ki8iq0/ijKzpUWeRUkpK9uF7WBoxrj3EyFFHejtfhVX2l0\n2KxrIF0kkmy5nmxVUck76FqdQ6vyvaHudREd3z/08hgdYogemQUTKFE/0LQmKuBV\nIJipPvORAgMBAAECggEAZvPMozN8LBikC00XstzMgRePp1MqydN5NeG6+TPlrQ+F\nV/RjkSXHT8oZRdTy3dXB6t0rc4n2xdvC0YCvGBBlwkK1vT+EPO2oBfTF99yCKDME\nDZlui3mDyvkgjPYweVuBKx65Bp5mNo4ZMqnMd18EAVxDM9UgZtIPtlJSdoBd7qtk\nyCGr03l+SV0krmvPV+KS9vyDOg/7Km5gMhTMaIveNyS1pG6AmZ0ggQA5djg/P2iF\nxGwYdvfADY5cBzg0OG5ELv9hvyA4CKN6RLfYv3JJS2gbNaMknjmsjaM/p0LtE2HL\n+uFPL0ZjoMwV3BlEFQIHwhNWS63H43ISBa1/2XvGPwKBgQDw4a4kQ9+Ce3edWonz\n3Fm/3no+HrMSVjbv28qphAHMFrSUdbMejQm4QSbNeOW1pEcVvW21u8tYagrJEsaU\ns4DulFXRep36teVDWpc1FrNowWEPPVeC8CO74VfssK1h2Itqis8JPbzXOcNtSH9+\nAg1EvrB9XnyEvJuM6GOGo3juTwKBgQDqP058+H3iSZe6al4P6Ib3g/82nr2dHeN5\n4xxGu1fzTMNX5lopbNji6tQcsMoMVPdOvCQy5c0PEUbvo7mxfZ8fOZwgBjIcXbYg\nzIJkPTSv7nxSE5M5lW5juzLkdq2k5k0qt9ByWuWEA3PSn/DEANa5888phSCoJSw/\nPjpwHhZoHwKBgQDCoQbMxI6e5lYCrToT8PIPhpptAO8dnM2sxoGcsE2ncp0b63H7\n+GdnGjVZBhtMxdyt4y33DjLCUIRAbUxIsDU4EGC67oEhJsGEx3iva5Uwyjc7UgwY\nfyHQV8ZsN2EQUyBqyJd6VwjzOff+n/prfQrthcoisiqYMbDZjJeGHSXEHwKBgAo4\nBsmG4Z78jOTx/PZ+s1ya4ohUdnsjMahAkxw20ghoIeF0yBwkhnWnvucdg0L0dfF2\nXbHmuoJcw5ZyswgeLdHj5n6zJn58TBS0Nz/+N40xPzUpa3PIpA8vvHGhB8Q408b4\nS9yhQH/40pWuqocybiugijoKd7k+HecIZO49MccLAoGBAPDScJHSxKPW6wJKjxDC\nXXWWQ2flbwv4Sja487QV/trWMSRnHJHnCVHqv/F7ThPaoHM+MJSzrJ7wr/CJhk0H\noEt+0Rn6qPd/A36bSjTfXMFLXWi75ovek+IJGKxr7B46jrcS/oe1XIIOlV1+OvOY\nVoO6vgYkPhpMkth2hyZ/luea\n-----END PRIVATE KEY-----\n", "private_key_id": "3dfe3bdc40d4dc431d283bf22feb113c9b622dd3", "project_id": "eloquent-vector-104019", "token_uri": "https://oauth2.exampleapis.com/token", "type": "service_account"}'
|
|
15
12
|
|
tests/test_data.py
CHANGED
|
@@ -1,163 +1,173 @@
|
|
|
1
|
-
""" test data
|
|
2
|
-
|
|
3
|
-
isort:skip_file
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
1
|
import unittest
|
|
2
|
+
from unittest.mock import patch
|
|
3
|
+
from ciocore import data as coredata
|
|
7
4
|
|
|
8
|
-
|
|
9
|
-
from unittest import mock
|
|
10
|
-
except ImportError:
|
|
11
|
-
import mock
|
|
12
|
-
|
|
13
|
-
from ciocore import data
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
from project_fixtures import PROJECTS
|
|
17
|
-
from package_fixtures import SOFTWARE_DATA
|
|
18
|
-
from instance_type_fixtures import LIN_INSTANCE_TYPES, ALL_INSTANCE_TYPES
|
|
19
|
-
|
|
20
|
-
class TestDataAllInstanceTypes(unittest.TestCase):
|
|
5
|
+
class TestCoreData(unittest.TestCase):
|
|
21
6
|
def setUp(self):
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
7
|
+
"""Set up test fixtures before each test method."""
|
|
8
|
+
self.mock_api_responses = {
|
|
9
|
+
'projects': ['ProjectA', 'ProjectB'],
|
|
10
|
+
'instance_types': [
|
|
11
|
+
{'operating_system': 'windows', 'name': 'win_machine', 'cores': 1, 'memory': '1024'},
|
|
12
|
+
{'operating_system': 'linux', 'name': 'linux_machine', 'cores': 1, 'memory': '1024'}
|
|
13
|
+
],
|
|
14
|
+
'software': [ # Added package_id to each package
|
|
15
|
+
{
|
|
16
|
+
'name': 'maya-io',
|
|
17
|
+
'version': '2022',
|
|
18
|
+
'platform': 'windows',
|
|
19
|
+
'product': 'maya-io',
|
|
20
|
+
'package_id': '123456789'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
'name': 'maya-io',
|
|
24
|
+
'version': '2022',
|
|
25
|
+
'platform': 'linux',
|
|
26
|
+
'product': 'maya-io',
|
|
27
|
+
'package_id': '123456780'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
'name': 'nuke',
|
|
31
|
+
'version': '13.0',
|
|
32
|
+
'platform': 'linux',
|
|
33
|
+
'product': 'nuke',
|
|
34
|
+
'package_id': '123456781'
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
'extra_env': ['PATH=/custom/path', 'LICENSE_SERVER=1234']
|
|
26
38
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
# self.account_id_patcher = mock.patch(
|
|
31
|
-
# "ciocore.data.get_account_id", return_value="1234"
|
|
32
|
-
# )
|
|
33
|
-
|
|
34
|
-
# self.mock_get_data = self.get_data_patcher.start()
|
|
35
|
-
# self.mock_account_id = self.account_id_patcher.start()
|
|
36
|
-
|
|
37
|
-
data.__data__ = {}
|
|
38
|
-
data.__products__ = None
|
|
39
|
+
# Clear data before each test
|
|
40
|
+
coredata.clear()
|
|
39
41
|
|
|
40
42
|
def tearDown(self):
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
43
|
+
"""Clean up after each test method."""
|
|
44
|
+
coredata.clear()
|
|
45
|
+
|
|
46
|
+
def test_init_with_single_product(self):
|
|
47
|
+
"""Test initializing with a single product"""
|
|
48
|
+
coredata.init("maya-io")
|
|
49
|
+
self.assertEqual(coredata.products(), ["maya-io"])
|
|
50
|
+
self.assertEqual(coredata.platforms(), set(["windows", "linux"]))
|
|
51
|
+
|
|
52
|
+
def test_init_with_multiple_products(self):
|
|
53
|
+
"""Test initializing with multiple products"""
|
|
54
|
+
coredata.init("maya-io", "nuke")
|
|
55
|
+
self.assertEqual(coredata.products(), ["maya-io", "nuke"])
|
|
56
|
+
|
|
57
|
+
def test_init_with_deprecated_product(self):
|
|
58
|
+
"""Test initializing with deprecated product kwarg"""
|
|
59
|
+
coredata.init(product="maya-io")
|
|
60
|
+
self.assertEqual(coredata.products(), ["maya-io"])
|
|
61
|
+
|
|
62
|
+
def test_init_with_all_products(self):
|
|
63
|
+
"""Test initializing with 'all' products"""
|
|
64
|
+
coredata.init(product="all")
|
|
65
|
+
self.assertEqual(coredata.products(), [])
|
|
66
|
+
|
|
67
|
+
def test_init_conflict_raises_error(self):
|
|
68
|
+
"""Test that using both products arg and product kwarg raises error"""
|
|
69
|
+
with self.assertRaises(ValueError):
|
|
70
|
+
coredata.init("maya-io", product="nuke")
|
|
71
|
+
|
|
72
|
+
def test_data_requires_init(self):
|
|
73
|
+
"""Test that data() raises error if not initialized"""
|
|
74
|
+
with self.assertRaises(ValueError):
|
|
75
|
+
coredata.data()
|
|
76
|
+
|
|
77
|
+
@patch('ciocore.data.api_client')
|
|
78
|
+
def test_data_fetching(self, mock_client):
|
|
79
|
+
"""Test fetching data through the data() function"""
|
|
80
|
+
# Setup mock responses
|
|
81
|
+
mock_client.request_projects.return_value = self.mock_api_responses['projects']
|
|
82
|
+
mock_client.request_instance_types.return_value = self.mock_api_responses['instance_types']
|
|
83
|
+
mock_client.request_software_packages.return_value = self.mock_api_responses['software']
|
|
84
|
+
mock_client.request_extra_environment.return_value = self.mock_api_responses['extra_env']
|
|
85
|
+
|
|
86
|
+
coredata.init("maya-io")
|
|
87
|
+
result = coredata.data()
|
|
88
|
+
|
|
89
|
+
self.assertIn("projects", result)
|
|
90
|
+
self.assertIn("instance_types", result)
|
|
91
|
+
self.assertIn("software", result)
|
|
92
|
+
self.assertIn("extra_environment", result)
|
|
93
|
+
|
|
94
|
+
self.assertEqual(result["projects"], self.mock_api_responses["projects"])
|
|
95
|
+
self.assertIsInstance(result["instance_types"], coredata.HardwareSet)
|
|
96
|
+
self.assertIsInstance(result["software"], coredata.PackageTree)
|
|
97
|
+
|
|
98
|
+
@patch('ciocore.data.api_client')
|
|
99
|
+
def test_force_refresh(self, mock_client):
|
|
100
|
+
"""Test forcing data refresh"""
|
|
101
|
+
# Setup mock responses
|
|
102
|
+
mock_client.request_projects.return_value = self.mock_api_responses['projects']
|
|
103
|
+
mock_client.request_instance_types.return_value = self.mock_api_responses['instance_types']
|
|
104
|
+
mock_client.request_software_packages.return_value = self.mock_api_responses['software']
|
|
105
|
+
mock_client.request_extra_environment.return_value = self.mock_api_responses['extra_env']
|
|
106
|
+
|
|
107
|
+
coredata.init("maya-io")
|
|
108
|
+
first_data = coredata.data()
|
|
109
|
+
|
|
110
|
+
# Second call without force should not make new API calls
|
|
111
|
+
mock_client.request_projects.reset_mock()
|
|
112
|
+
second_data = coredata.data()
|
|
113
|
+
mock_client.request_projects.assert_not_called()
|
|
114
|
+
|
|
115
|
+
# Call with force=True should make new API calls
|
|
116
|
+
third_data = coredata.data(force=True)
|
|
117
|
+
mock_client.request_projects.assert_called_once()
|
|
118
|
+
|
|
119
|
+
def test_valid_state(self):
|
|
120
|
+
"""Test valid() function behavior"""
|
|
121
|
+
self.assertFalse(coredata.valid()) # Should be invalid before initialization
|
|
122
|
+
|
|
123
|
+
coredata.init("maya-io")
|
|
124
|
+
self.assertFalse(coredata.valid()) # Should be invalid before data is fetched
|
|
125
|
+
|
|
126
|
+
with patch('ciocore.data.api_client') as mock_client:
|
|
127
|
+
# Setup mock responses
|
|
128
|
+
mock_client.request_projects.return_value = self.mock_api_responses['projects']
|
|
129
|
+
mock_client.request_instance_types.return_value = self.mock_api_responses['instance_types']
|
|
130
|
+
mock_client.request_software_packages.return_value = self.mock_api_responses['software']
|
|
131
|
+
mock_client.request_extra_environment.return_value = self.mock_api_responses['extra_env']
|
|
132
|
+
|
|
133
|
+
coredata.data() # Fetch data
|
|
134
|
+
self.assertTrue(coredata.valid()) # Should be valid after data is fetched
|
|
135
|
+
|
|
136
|
+
coredata.clear()
|
|
137
|
+
self.assertFalse(coredata.valid()) # Should be invalid after clear
|
|
138
|
+
|
|
139
|
+
@patch('ciocore.data.api_client')
|
|
140
|
+
def test_platforms_filtering(self, mock_client):
|
|
141
|
+
"""Test platform filtering based on instance types and software"""
|
|
142
|
+
# Setup mock responses
|
|
143
|
+
mock_client.request_projects.return_value = self.mock_api_responses['projects']
|
|
144
|
+
mock_client.request_instance_types.return_value = self.mock_api_responses['instance_types']
|
|
145
|
+
mock_client.request_software_packages.return_value = self.mock_api_responses['software']
|
|
146
|
+
mock_client.request_extra_environment.return_value = self.mock_api_responses['extra_env']
|
|
147
|
+
|
|
148
|
+
coredata.init("nuke") # nuke only supports linux
|
|
149
|
+
coredata.data()
|
|
150
|
+
|
|
151
|
+
# Should only have linux instance types since nuke only supports linux
|
|
152
|
+
self.assertEqual(coredata.platforms(), {"linux"})
|
|
153
|
+
|
|
154
|
+
@patch('ciocore.data.api_client')
|
|
155
|
+
def test_instances_filter(self, mock_client):
|
|
156
|
+
"""Testing that instance_types is passed correctly to api_client"""
|
|
157
|
+
# Set up mock response
|
|
158
|
+
mock_client.request_instance_types.return_value = self.mock_api_responses['instance_types']
|
|
159
|
+
coredata.init("maya-io")
|
|
160
|
+
|
|
161
|
+
# Test with no filter
|
|
162
|
+
coredata.data()
|
|
163
|
+
mock_client.request_instance_types.assert_called_with(filter_param="")
|
|
164
|
+
|
|
165
|
+
# Test with filter and force=True
|
|
166
|
+
mock_client.request_instance_types.reset_mock()
|
|
167
|
+
|
|
168
|
+
instances_filter = "gpu.gpu_count=gte:1:int"
|
|
169
|
+
coredata.data(force=True, instances_filter=instances_filter)
|
|
170
|
+
mock_client.request_instance_types.assert_called_with(filter_param=instances_filter)
|
|
171
|
+
|
|
172
|
+
if __name__ == '__main__':
|
|
173
|
+
unittest.main()
|
tests/test_submit.py
CHANGED
tests/test_uploader.py
CHANGED
ciocore/compat.py
DELETED