206 # got an existing one due to a race, so update with properties anyway, |
206 # got an existing one due to a race, so update with properties anyway, |
207 # in a transaction |
207 # in a transaction |
208 return self.updateModelProperties(entity, **properties) |
208 return self.updateModelProperties(entity, **properties) |
209 |
209 |
210 def updateOrCreateFromFields(self, properties, **kwargs): |
210 def updateOrCreateFromFields(self, properties, **kwargs): |
211 """Like updateOrCreateFromKeyName, but resolves **kwargs to a key_name first |
211 """Like updateOrCreateFromKeyName, but resolves **kwargs to a key_name first. |
212 """ |
212 """ |
213 |
213 |
214 # attempt to retrieve the existing entity |
214 # attempt to retrieve the existing entity |
215 key_name = self.getKeyNameForFields(**kwargs) |
215 key_name = self.getKeyNameForFields(**kwargs) |
216 |
216 |
217 return self.updateOrCreateFromKeyName(properties, key_name) |
217 return self.updateOrCreateFromKeyName(properties, key_name) |
218 |
218 |
219 def isDeletable(self, entity): |
219 def isDeletable(self, entity): |
220 """Returns whether the specified entity can be deleted |
220 """Returns whether the specified entity can be deleted. |
221 """ |
221 |
222 |
222 Args: |
223 # TODO(pawel.solyga): Create specific delete method for Sponsor model |
223 entity: an existing entity in datastore |
224 # Check if Sponsor can be deleted (has no Hosts and Programs) |
224 """ |
|
225 |
225 return True |
226 return True |
226 |
227 |
227 def delete(self, entity): |
228 def delete(self, entity): |
228 """Delete existing entity from datastore. |
229 """Delete existing entity from datastore. |
229 |
230 |