@@ -23,7 +23,7 @@ class AbstractNode(TimeStampedEditableModel):
2323 on_delete = models .CASCADE )
2424 label = models .CharField (max_length = 64 , blank = True )
2525 # netjson ID and local_addresses
26- addresses = models . CharField ( max_length = 510 , db_index = True )
26+ addresses = JSONField ( default = [] )
2727 properties = JSONField (default = dict ,
2828 blank = True ,
2929 load_kwargs = {'object_pairs_hook' : OrderedDict },
@@ -40,50 +40,17 @@ def clean(self):
4040 self .properties = {}
4141
4242 def save (self , * args , ** kwargs ):
43- self ._format_addresses ()
4443 super (AbstractNode , self ).save (* args , ** kwargs )
4544
46- def _format_addresses (self ):
47- """
48- Ensure address format is correct: ";addr1;addr2;addr3;"
49- """
50- self .addresses = self .addresses .replace (',' , ';' )\
51- .replace (' ' , '' )\
52- .replace (';' , ';' )
53- if not self .addresses .startswith (';' ):
54- self .addresses = ';' + self .addresses
55- if not self .addresses .endswith (';' ):
56- self .addresses += ';'
57-
58- def truncate_addresses (self ):
59- """
60- ensures "addresses" field is not too long
61- """
62- max_length = self ._meta .get_field ('addresses' ).max_length
63- if len (self .addresses ) <= max_length :
64- return
65- addresses = self .address_list
66- # +1 stands for the character added in self._format_address()
67- while len (';' .join (addresses )) + 2 > max_length :
68- addresses .pop ()
69- self .addresses = ';' .join (addresses )
70-
71- @cached_property
72- def address_list (self ):
73- addresses = self .addresses .replace (' ' , '' )
74- if addresses .startswith (';' ):
75- addresses = addresses [1 :]
76- return addresses [0 :- 1 ].split (';' )
77-
7845 @property
7946 def netjson_id (self ):
80- if self .addresses :
81- return self .address_list [0 ]
47+ if len ( self .addresses ) > 0 :
48+ return self .addresses [0 ]
8249
8350 @cached_property
8451 def local_addresses (self ):
85- if self . addresses and len (self .address_list ) > 1 :
86- return self .address_list [1 :]
52+ if len (self .addresses ) > 1 :
53+ return self .addresses [1 :]
8754
8855 @property
8956 def name (self ):
@@ -114,7 +81,7 @@ def get_from_address(cls, address, topology):
11481 :param topology: Topology instance
11582 :returns: Node object or None
11683 """
117- address = ';{0}; ' .format (address )
84+ address = '"{}" ' .format (address )
11885 return cls .objects .filter (topology = topology ,
11986 addresses__contains = address ).first ()
12087
@@ -126,7 +93,7 @@ def count_address(cls, address, topology):
12693 :param topology: Topology instance
12794 :returns: int
12895 """
129- address = ';{0}; ' .format (address )
96+ address = '"{}" ' .format (address )
13097 return cls .objects .filter (topology = topology ,
13198 addresses__contains = address ).count ()
13299
0 commit comments