ciocore 9.1.0b1__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/uploader/_uploader.py +161 -83
- ciocore/worker.py +1 -5
- {ciocore-9.1.0b1.dist-info → ciocore-9.1.0rc1.dist-info}/METADATA +10 -5
- {ciocore-9.1.0b1.dist-info → ciocore-9.1.0rc1.dist-info}/RECORD +22 -25
- 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.0b1.dist-info → ciocore-9.1.0rc1.dist-info}/WHEEL +0 -0
- {ciocore-9.1.0b1.dist-info → ciocore-9.1.0rc1.dist-info}/entry_points.txt +0 -0
- {ciocore-9.1.0b1.dist-info → ciocore-9.1.0rc1.dist-info}/top_level.txt +0 -0
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
tests/extra_env_fixtures.py
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
EXTRA_ENV = [
|
|
4
|
-
{
|
|
5
|
-
"account_id": "6649535867387904",
|
|
6
|
-
"env": [],
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
"account_id": "5767615549800448",
|
|
10
|
-
"env": [
|
|
11
|
-
{
|
|
12
|
-
"merge_policy": "prepend",
|
|
13
|
-
"name": "test",
|
|
14
|
-
"value": "test"
|
|
15
|
-
}
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"account_id": "6649535867387904",
|
|
20
|
-
"env": [],
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"account_id": "5669544198668288",
|
|
24
|
-
"env": [
|
|
25
|
-
{
|
|
26
|
-
"merge_policy": "append",
|
|
27
|
-
"name": "PATH",
|
|
28
|
-
"value": "/path/to/scripts"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"merge_policy": "exclusive",
|
|
32
|
-
"name": "RENDER_LOCATION",
|
|
33
|
-
"value": "cloud"
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"merge_policy": "exclusive",
|
|
37
|
-
"name": "VARIABLE_USED_IN_SCRIPTS",
|
|
38
|
-
"value": "true"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"merge_policy": "exclusive",
|
|
42
|
-
"name": "testvar",
|
|
43
|
-
"value": "somevalue"
|
|
44
|
-
}
|
|
45
|
-
],
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"account_id": "6649535867387904",
|
|
49
|
-
"env": [
|
|
50
|
-
{
|
|
51
|
-
"merge_policy": "exclusive",
|
|
52
|
-
"name": "JMEYER",
|
|
53
|
-
"value": "JMEYER_ENV_VALUE"
|
|
54
|
-
}
|
|
55
|
-
],
|
|
56
|
-
}
|
|
57
|
-
]
|
tests/project_fixtures.py
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|