1+ from enum import Enum , auto
2+
13from django .db import models , connection
24from django .db .models .base import ModelBase
35
68_OMITTED = type ("OMITTED" , (), {"__bool__" : lambda _ : False })
79OMITTED = _OMITTED ()
810
9- # dict of all the extra options a CrateDBModel Meta class has.
10- # (name, default_value)
11- CRATE_META_OPTIONS = {
12- "auto_refresh" : False , # Automatically refresh a table on inserts.
13- "partition_by" : OMITTED ,
14- "clustered_by" : OMITTED ,
15- "number_of_shards" : OMITTED ,
16- }
11+
12+ class CrateMetaOptions (Enum ):
13+ """
14+ Represents the specific options a CrateDB table can have.
15+ """
16+
17+ auto_refresh = auto (), False , False
18+ partition_by = auto (), OMITTED , False
19+ clustered_by = auto (), OMITTED , False
20+ number_of_shards = auto (), OMITTED , False
21+
22+ def __init__ (self , _ , current_value , used_in_parameters_table ):
23+ self .current_value = current_value
24+ self .used_in_parameters_table = used_in_parameters_table
25+
26+ @staticmethod
27+ def options ():
28+ return list (CrateMetaOptions .__members__ )
29+
30+ @classmethod
31+ def by_name (cls , name ):
32+ for m in cls :
33+ if m .value [1 ] == name :
34+ return m
35+ raise KeyError (name )
1736
1837
1938class MetaCrate (ModelBase ):
2039 def __new__ (cls , name , bases , attrs , ** kwargs ):
21- crate_attrs = {}
40+ _temp_crate_attrs = {}
2241
2342 # todo document
2443
2544 try :
2645 meta = attrs ["Meta" ]
27- for key , default_value in CRATE_META_OPTIONS .items ():
28- crate_attrs [key ] = getattr (meta , key , default_value )
29- if hasattr (meta , key ):
30- delattr (meta , key )
46+ for option in CrateMetaOptions :
47+ _temp_crate_attrs [option .name ] = getattr (
48+ meta , option .name , option .current_value
49+ )
50+ if hasattr (meta , option .name ):
51+ delattr (meta , option .name )
3152 except KeyError :
3253 # Has no meta class
3354 pass
@@ -36,7 +57,7 @@ def __new__(cls, name, bases, attrs, **kwargs):
3657
3758 # Return back the crate_attrs we took from meta to the already
3859 # created object.
39- for k , v in crate_attrs .items ():
60+ for k , v in _temp_crate_attrs .items ():
4061 setattr (o ._meta , k , v )
4162 return o
4263
0 commit comments