Skip to content

Instantly share code, notes, and snippets.

@frdteknikelektro
Created February 16, 2020 11:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save frdteknikelektro/771f191013ad3e34c3521b8bec11e0fb to your computer and use it in GitHub Desktop.
Save frdteknikelektro/771f191013ad3e34c3521b8bec11e0fb to your computer and use it in GitHub Desktop.
Solve OneToOne Caching Issue
from dynamorm import DynaModel, OneToOne
from marshmallow.fields import String
class Device(DynaModel):
class Table:
name = 'Device'
hash_key = 'device_id'
class Schema:
device_id = String(required=True)
device_name = String()
device_location = String()
class User(DynaModel):
_device = None
class Table:
name = 'User'
hash_key = 'user_id'
class Schema:
user_id = String(required=True)
device_id = String(required=True)
@property
def device(self):
if self._device is None:
self._device = OneToOne(
Device,
query=lambda user: dict(device_id=user.device_id),
).__get__(self, type(self))
return self._device
Device(device_id='Device_1').save()
Device(device_id='Device_2').save()
User(user_id='Alice', device_id='Device_1').save()
User(user_id='Bob', device_id='Device_2').save()
alice = User.get(user_id='Alice')
assert alice.device.device_id == 'Device_1'
bob = User.get(user_id='Bob')
assert bob.device.device_id == 'Device_2'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment