commit
						e35257cf7b
					
				
					 4 changed files with 39 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -119,6 +119,9 @@ print(andrew.pk)
 | 
			
		|||
# We can save the model to Redis by calling `save()`:
 | 
			
		||||
andrew.save()
 | 
			
		||||
 | 
			
		||||
# Expire the model after 2 mins (120 seconds)
 | 
			
		||||
andrew.expire(120)
 | 
			
		||||
 | 
			
		||||
# To retrieve this customer with its primary key, we use `Customer.get()`:
 | 
			
		||||
assert Customer.get(andrew.pk) == andrew
 | 
			
		||||
```
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1130,6 +1130,15 @@ class RedisModel(BaseModel, abc.ABC, metaclass=ModelMeta):
 | 
			
		|||
    async def save(self, pipeline: Optional[Pipeline] = None) -> "RedisModel":
 | 
			
		||||
        raise NotImplementedError
 | 
			
		||||
 | 
			
		||||
    async def expire(self, num_seconds: int, pipeline: Optional[Pipeline] = None):
 | 
			
		||||
        if pipeline is None:
 | 
			
		||||
            db = self.db()
 | 
			
		||||
        else:
 | 
			
		||||
            db = pipeline
 | 
			
		||||
 | 
			
		||||
        # TODO: Wrap any Redis response errors in a custom exception?
 | 
			
		||||
        await db.expire(self.make_primary_key(self.pk), num_seconds)
 | 
			
		||||
 | 
			
		||||
    @validator("pk", always=True, allow_reuse=True)
 | 
			
		||||
    def validate_pk(cls, v):
 | 
			
		||||
        if not v:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -553,6 +553,15 @@ andrew = Customer(
 | 
			
		|||
andrew.save()
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Expiring Models
 | 
			
		||||
 | 
			
		||||
We can expire an instance of a model using `expire`, and passing it the number of seconds after which we want the instance to expire in Redis:
 | 
			
		||||
 | 
			
		||||
```python
 | 
			
		||||
# Expire Andrew in 2 minutes (120 seconds)
 | 
			
		||||
andrew.expire(120)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Examining Your Data In Redis
 | 
			
		||||
 | 
			
		||||
You can view the data stored in Redis for any Redis OM model.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -391,6 +391,24 @@ async def test_delete(m):
 | 
			
		|||
    assert response == 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.asyncio
 | 
			
		||||
async def test_expire(m):
 | 
			
		||||
    member = m.Member(
 | 
			
		||||
        first_name="Expire",
 | 
			
		||||
        last_name="Test",
 | 
			
		||||
        email="e@example.com",
 | 
			
		||||
        join_date=today,
 | 
			
		||||
        age=93,
 | 
			
		||||
        bio="This is a test user for expiry",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    await member.save()
 | 
			
		||||
    await member.expire(60)
 | 
			
		||||
 | 
			
		||||
    ttl = await m.Member.db().ttl(member.key())
 | 
			
		||||
    assert ttl > 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_raises_error_with_embedded_models(m):
 | 
			
		||||
    class Address(m.BaseHashModel):
 | 
			
		||||
        address_line_1: str
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue