11import logging
22
33from gettext import gettext as _
4- from django .db .utils import IntegrityError
5- from pydantic import TypeAdapter , ValidationError
64from rest_framework import serializers
75
86from pulpcore .plugin import models as core_models
97from pulpcore .plugin import serializers as core_serializers
10- from pulpcore .plugin .util import get_domain
118
129from . import models
1310
@@ -23,7 +20,8 @@ class IndexRootSerializer(serializers.Serializer):
2320 api = serializers .CharField (help_text = _ ("URL of the API root" ), read_only = True )
2421 auth_required = serializers .BooleanField (
2522 help_text = _ (
26- "Indicates whether this is a private registry that requires all operations to be authenticated"
23+ "Indicates whether this is a private registry that requires all operations to "
24+ "be authenticated"
2725 ),
2826 read_only = True ,
2927 )
@@ -199,176 +197,6 @@ class Meta:
199197 model = models .RustContent
200198
201199
202- class RustDependencySerializer (serializers .ModelSerializer ):
203- """
204- Serializer for RustDependency.
205-
206- Represents a single dependency entry from the Cargo package index.
207- """
208-
209- name = serializers .CharField (
210- help_text = _ ("Dependency name as used in code (may be renamed via 'package' field)" )
211- )
212-
213- req = serializers .CharField (
214- help_text = _ ("Version requirement string (e.g., '^1.0', '>=0.2.3,<0.3')" )
215- )
216-
217- features = serializers .ListField (
218- child = serializers .CharField (),
219- default = list ,
220- required = False ,
221- help_text = _ ("List of feature flags to enable for this dependency" ),
222- )
223-
224- optional = serializers .BooleanField (
225- default = False , required = False , help_text = _ ("Whether this is an optional dependency" )
226- )
227-
228- default_features = serializers .BooleanField (
229- default = True ,
230- required = False ,
231- help_text = _ ("Whether to enable the dependency's default features" ),
232- )
233-
234- target = serializers .CharField (
235- allow_null = True ,
236- required = False ,
237- help_text = _ ("Platform-specific target (e.g., 'cfg(unix)', 'cfg(windows)')" ),
238- )
239-
240- kind = serializers .ChoiceField (
241- choices = [("normal" , "Normal" ), ("dev" , "Development" ), ("build" , "Build" )],
242- default = "normal" ,
243- required = False ,
244- help_text = _ (
245- "Dependency type: 'normal' (runtime), 'dev' (development), or 'build' (build script)"
246- ),
247- )
248-
249- registry = serializers .CharField (
250- allow_null = True ,
251- required = False ,
252- help_text = _ ("Alternative registry URL if dependency is from a different registry" ),
253- )
254-
255- package = serializers .CharField (
256- allow_null = True ,
257- required = False ,
258- help_text = _ ("Original crate name if the dependency was renamed" ),
259- )
260-
261- class Meta :
262- model = models .RustDependency
263- fields = (
264- "name" ,
265- "req" ,
266- "features" ,
267- "optional" ,
268- "default_features" ,
269- "target" ,
270- "kind" ,
271- "registry" ,
272- "package" ,
273- )
274-
275-
276- class RustContentSerializer (core_serializers .SingleArtifactContentSerializer ):
277- """
278- Serializer for RustContent (Cargo package version).
279-
280- Represents a single version of a Rust crate as defined in the Cargo registry
281- index specification. Includes package metadata, dependencies, and features.
282- """
283-
284- name = serializers .CharField (help_text = _ ("Package name (crate name)" ))
285-
286- vers = serializers .CharField (help_text = _ ("Semantic version string (SemVer 2.0.0)" ))
287-
288- dependencies = RustDependencySerializer (
289- many = True , required = False , help_text = _ ("List of dependencies for this package version" )
290- )
291-
292- cksum = serializers .CharField (help_text = _ ("SHA256 checksum of the .crate file (tarball)" ))
293-
294- features = serializers .JSONField (
295- default = dict ,
296- required = False ,
297- help_text = _ (
298- "Feature flags mapping - maps feature names to lists of features/dependencies "
299- "they enable"
300- ),
301- )
302-
303- features2 = serializers .JSONField (
304- default = dict ,
305- required = False ,
306- allow_null = True ,
307- help_text = _ ("Extended feature syntax support (newer registry format)" ),
308- )
309-
310- yanked = serializers .BooleanField (
311- default = False ,
312- required = False ,
313- help_text = _ ("Whether this version has been yanked (removed from normal use)" ),
314- )
315-
316- links = serializers .CharField (
317- allow_null = True ,
318- required = False ,
319- help_text = _ ("Name of native library this package links to (from Cargo.toml 'links' field)" ),
320- )
321-
322- v = serializers .IntegerField (
323- default = 1 , required = False , help_text = _ ("Schema version of the index entry format" )
324- )
325- rust_version = serializers .CharField (
326- allow_null = True ,
327- required = False ,
328- help_text = _ ("Minimum Rust compiler version required (MSRV)" ),
329- )
330-
331- def create (self , validated_data ):
332- """Create RustContent and related dependencies."""
333- dependencies_data = validated_data .pop ("dependencies" , [])
334- content = super ().create (validated_data )
335-
336- # Create dependency records
337- for dep_data in dependencies_data :
338- models .RustDependency .objects .create (content = content , ** dep_data )
339-
340- return content
341-
342- def update (self , instance , validated_data ):
343- """Update RustContent and related dependencies."""
344- dependencies_data = validated_data .pop ("dependencies" , None )
345-
346- instance = super ().update (instance , validated_data )
347-
348- if dependencies_data is not None :
349- # Replace all dependencies
350- instance .dependencies .all ().delete ()
351- for dep_data in dependencies_data :
352- models .RustDependency .objects .create (content = instance , ** dep_data )
353-
354- return instance
355-
356- class Meta :
357- fields = core_serializers .SingleArtifactContentSerializer .Meta .fields + (
358- "name" ,
359- "vers" ,
360- "dependencies" ,
361- "cksum" ,
362- "features" ,
363- "features2" ,
364- "yanked" ,
365- "links" ,
366- "v" ,
367- "rust_version" ,
368- )
369- model = models .RustContent
370-
371-
372200class RustRemoteSerializer (core_serializers .RemoteSerializer ):
373201 """
374202 A Serializer for RustRemote.
0 commit comments