@@ -34,8 +34,8 @@ def as_resource_list(self):
34
34
35
35
class BaseResource (peewee .BaseModel ):
36
36
37
- def include_field_for_compact (cls , name ):
38
- if name in cls .exclude_for_compact :
37
+ def include_field_for_collection (cls , name ):
38
+ if name in cls .exclude_for_collection :
39
39
return False
40
40
attr = getattr (cls , name , None )
41
41
exclude = (db .ManyToManyField , peewee .ReverseRelationDescriptor ,
@@ -48,7 +48,8 @@ def __new__(mcs, name, bases, attrs, **kwargs):
48
48
# Inherit and extend instead of replacing.
49
49
resource_fields = attrs .pop ('resource_fields' , None )
50
50
resource_schema = attrs .pop ('resource_schema' , None )
51
- exclude_for_compact = attrs .pop ('exclude_for_compact' , None )
51
+ exclude_for_collection = attrs .pop ('exclude_for_collection' , None )
52
+ exclude_for_version = attrs .pop ('exclude_for_version' , None )
52
53
cls = super ().__new__ (mcs , name , bases , attrs , ** kwargs )
53
54
if resource_fields is not None :
54
55
inherited = getattr (cls , 'resource_fields' , {})
@@ -58,14 +59,20 @@ def __new__(mcs, name, bases, attrs, **kwargs):
58
59
inherited = getattr (cls , 'resource_schema' , {})
59
60
resource_schema .update (inherited )
60
61
cls .resource_schema = resource_schema
61
- if exclude_for_compact is not None :
62
- inherited = getattr (cls , 'exclude_for_compact' , [])
63
- exclude_for_compact .extend (inherited )
64
- cls .exclude_for_compact = exclude_for_compact
65
- cls .extended_fields = cls .resource_fields
66
- cls .compact_fields = [
67
- n for n in cls .extended_fields
68
- if mcs .include_field_for_compact (cls , n )] + ['resource' ]
62
+ if exclude_for_collection is not None :
63
+ inherited = getattr (cls , 'exclude_for_collection' , [])
64
+ exclude_for_collection .extend (inherited )
65
+ cls .exclude_for_collection = exclude_for_collection
66
+ if exclude_for_version is not None :
67
+ inherited = getattr (cls , 'exclude_for_version' , [])
68
+ exclude_for_version .extend (inherited )
69
+ cls .exclude_for_version = exclude_for_version
70
+ cls .collection_fields = [
71
+ n for n in cls .resource_fields
72
+ if mcs .include_field_for_collection (cls , n )] + ['resource' ]
73
+ cls .versioned_fields = [
74
+ n for n in cls .resource_fields
75
+ if n not in cls .exclude_for_version ]
69
76
cls .build_resource_schema ()
70
77
return cls
71
78
@@ -74,7 +81,8 @@ class ResourceModel(db.Model, metaclass=BaseResource):
74
81
resource_fields = ['id' ]
75
82
identifiers = []
76
83
resource_schema = {'id' : {'readonly' : True }}
77
- exclude_for_compact = []
84
+ exclude_for_collection = []
85
+ exclude_for_version = []
78
86
79
87
id = db .CharField (max_length = 50 , unique = True , null = False )
80
88
@@ -96,7 +104,7 @@ def build_resource_schema(cls):
96
104
"""Map Peewee models to Cerberus validation schema."""
97
105
schema = dict (cls .resource_schema )
98
106
for name , field in cls ._meta .fields .items ():
99
- if name not in cls .extended_fields :
107
+ if name not in cls .resource_fields :
100
108
continue
101
109
if field .primary_key :
102
110
continue
@@ -138,17 +146,17 @@ def resource(self):
138
146
@property
139
147
def as_resource (self ):
140
148
"""Resource plus relations."""
141
- return {f : self .extended_field (f ) for f in self .extended_fields }
149
+ return {f : self .extended_field (f ) for f in self .resource_fields }
142
150
143
151
@property
144
152
def as_relation (self ):
145
153
"""Resources plus relation references without metadata."""
146
- return {f : self .compact_field (f ) for f in self .compact_fields }
154
+ return {f : self .compact_field (f ) for f in self .collection_fields }
147
155
148
156
@property
149
157
def as_version (self ):
150
158
"""Resources plus relations references and metadata."""
151
- return {f : self .compact_field (f ) for f in self .extended_fields }
159
+ return {f : self .compact_field (f ) for f in self .versioned_fields }
152
160
153
161
def extended_field (self , name ):
154
162
value = getattr (self , '{}_extended' .format (name ), getattr (self , name ))
0 commit comments