Package core :: Module shared_data
[hide private]
[frames] | no frames]

Source Code for Module core.shared_data

  1  # Copyright 2011 the original author or authors. 
  2  # 
  3  # Licensed under the Apache License, Version 2.0 (the "License"); 
  4  # you may not use this file except in compliance with the License. 
  5  # You may obtain a copy of the License at 
  6  # 
  7  #      http://www.apache.org/licenses/LICENSE-2.0 
  8  # 
  9  # Unless required by applicable law or agreed to in writing, software 
 10  # distributed under the License is distributed on an "AS IS" BASIS, 
 11  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 12  # See the License for the specific language governing permissions and 
 13  # limitations under the License. 
 14   
 15  import org.vertx.java.deploy.impl.VertxLocator 
 16  import org.vertx.java.core.buffer 
 17   
 18  from core.javautils import map_from_java 
 19  from core.buffer import Buffer 
 20   
 21  __author__ = "Scott Horn" 
 22  __email__ = "scott@hornmicro.com" 
 23  __credits__ = "Based entirely on work by Tim Fox http://tfox.org" 
24 25 -class SharedData(object):
26 """Sometimes it is desirable to share immutable data between different event loops, for example to implement a 27 cache of data. 28 29 This class allows instances of shareddata data structures to be looked up and used from different event loops. 30 The data structures themselves will only allow certain data types to be stored into them. This shields the 31 user from worrying about any thread safety issues might occur if mutable objects were shareddata between event loops. 32 33 The following types can be stored in a shareddata data structure: 34 35 String 36 FixNum 37 Float 38 Buffer - this will be automatically copied, and the copy will be stored in the structure. 39 """ 40 @staticmethod
41 - def shared_data():
42 return org.vertx.java.deploy.impl.VertxLocator.vertx.sharedData()
43 44 @staticmethod
45 - def get_hash(key):
46 """Return a Hash with the specific name. All invocations of this method with the same value of name 47 are guaranteed to return the same Hash instance. 48 49 Keyword arguments: 50 @param key: Get the hash with the key. 51 52 @return: the hash. 53 """ 54 map = SharedData.shared_data().getMap(key) 55 return SharedHash(map)
56 57 @staticmethod
58 - def get_set(key):
59 """Return a Set with the specific name. All invocations of this method with the same value of name 60 are guaranteed to return the same Set instance. 61 62 Keyword arguments: 63 @param key: Get the set with the key. 64 65 @return: the shared set. 66 """ 67 set_ = SharedData.shared_data().getSet(key) 68 return SharedSet(set_)
69 70 @staticmethod
71 - def remove_hash(key):
72 """Remove the hash 73 74 Keyword arguments: 75 @param key: The key of the hash. 76 """ 77 return SharedData.shared_data().removeMap(key)
78 79 @staticmethod
80 - def remove_set(key):
81 """Remove the set 82 83 Keyword arguments: 84 @param key: The key of the set. 85 """ 86 return SharedData.shared_data().removeSet(key)
87 88 @staticmethod
89 - def check_obj(obj):
90 """Convert to corresponding Java objects 91 and make copies where appropriate (the underlying java map will also make copies for some data types too) 92 """ 93 if isinstance(obj, Buffer): 94 obj = obj._to_java_buffer() 95 return obj
96
97 98 -class SharedHash(object):
99
100 - def __init__(self, hash):
101 self.java_obj = hash
102
103 - def __setitem__(self, key, val):
104 key = SharedData.check_obj(key) 105 val = SharedData.check_obj(val) 106 self.java_obj.put(key, val)
107
108 - def __getitem__(self, key):
109 obj = self.java_obj.get(key) 110 if isinstance(obj, org.vertx.java.core.buffer.Buffer): 111 obj = Buffer(obj) 112 return obj
113
114 - def __eq__(self, other):
115 if isinstance(other, SharedHash): 116 return self.java_obj.equals(other._to_java_map()) 117 else: 118 return False
119
120 - def __str__(self):
121 return map_from_java(self.java_obj).__str__()
122
123 - def keys(self):
124 return map_from_java(self.java_obj).keys()
125
126 - def iteritems(self):
127 return map_from_java(self.java_obj).iteritems()
128
129 - def items(self):
130 return map_from_java(self.java_obj).items()
131
132 - def _to_java_map(self):
133 return self.java_obj
134
135 -class SharedSet(object):
136
137 - def __init__(self, java_set):
138 self.java_obj = java_set
139
140 - def __eq__(self, other):
141 if isinstance(other, SharedSet): 142 return self.java_obj.hashCode() == other._to_java_set().hashCode() 143 else: 144 return False
145
146 - def __len__(self):
147 return self.size()
148
149 - def __str__(self):
150 return map_from_java(self.java_obj).__str__()
151
152 - def __iter__(self):
153 return map_from_java(self.java_obj).__iter__()
154
155 - def add(self, obj):
156 """ Add an object to the set 157 158 Keyword arguments: 159 @param obj: The object to add 160 @return: self 161 """ 162 obj = SharedData.check_obj(obj) 163 self.java_obj.add(obj) 164 return self
165
166 - def clear(self):
167 """Clear the set""" 168 self.java_obj.clear()
169
170 - def delete(self, obj):
171 """Delete an object from the set 172 173 Keyword arguments: 174 @param obj: the object to delete 175 """ 176 self.java_obj.remove(obj)
177 178
179 - def each(self, func):
180 """Call the func for every element of the set 181 182 Keyword arguments: 183 @param func: The function to call. 184 """ 185 iter = self.java_obj.iterator() 186 while iter.hasNext(): 187 obj = iter.next() 188 if isinstance(obj, org.vertx.java.core.buffer.Buffer): 189 obj = Buffer(obj) 190 func(obj)
191
192 - def empty(self):
193 """returns True if the set is empty""" 194 return self.java_obj.isEmpty()
195
196 - def include(self, obj):
197 """Does the set contain an element? 198 199 Keyword arguments: 200 @param obj: the object to check if the set contains 201 202 @return: True if the object is contained in the set 203 """ 204 if isinstance(obj, Buffer): 205 obj = obj._to_java_buffer() 206 return self.java_obj.contains(obj)
207
208 - def size(self):
209 """returns the number of elements in the set""" 210 return self.java_obj.size()
211
212 - def _to_java_set(self):
213 return self.java_obj
214