136def _best_version(fields):
137 """Detect the best version depending on the fields used."""
139 for marker in markers:
140 if marker in keys:
141 return True
142 return False
143
144 keys = []
146 if value in ([], 'UNKNOWN', None):
147 continue
149
150 possible_versions = ['1.0', '1.1', '1.2', '1.3', '2.1', '2.2']
151
152
153 for key in keys:
154 if key not in _241_FIELDS and '1.0' in possible_versions:
157 if key not in _314_FIELDS and '1.1' in possible_versions:
160 if key not in _345_FIELDS and '1.2' in possible_versions:
163 if key not in _566_FIELDS and '1.3' in possible_versions:
166 if key not in _566_FIELDS and '2.1' in possible_versions:
167 if key != 'Description':
170 if key not in _643_FIELDS and '2.2' in possible_versions:
173
174
175
176
177
178 if len(possible_versions) == 1:
179 return possible_versions[0]
180 elif len(possible_versions) == 0:
181 logger.debug(
'Out of options - unknown metadata set: %s', fields)
182 raise MetadataConflictError('Unknown metadata set')
183
184
185 is_1_1 =
'1.1' in possible_versions
and _has_marker(keys, _314_MARKERS)
186 is_1_2 =
'1.2' in possible_versions
and _has_marker(keys, _345_MARKERS)
187 is_2_1 =
'2.1' in possible_versions
and _has_marker(keys, _566_MARKERS)
188
189 is_2_2 =
'2.2' in possible_versions
and _has_marker(keys, _643_MARKERS)
190 if int(is_1_1) + int(is_1_2) + int(is_2_1) + int(is_2_2) > 1:
191 raise MetadataConflictError('You used incompatible 1.1/1.2/2.1/2.2 fields')
192
193
194
195
196
197
198
199 if not is_1_1 and not is_1_2 and not is_2_1 and not is_2_2:
200
201 if PKG_INFO_PREFERRED_VERSION in possible_versions:
202 return PKG_INFO_PREFERRED_VERSION
203 if is_1_1:
204 return '1.1'
205 if is_1_2:
206 return '1.2'
207 if is_2_1:
208 return '2.1'
209
210
211
212 return '2.2'
213
214
215