Add all_pks() method to HashModel
This commit is contained in:
		
							parent
							
								
									db7b8d19ad
								
							
						
					
					
						commit
						bc441143de
					
				
					 3 changed files with 19 additions and 1 deletions
				
			
		| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
[tool.poetry]
 | 
					[tool.poetry]
 | 
				
			||||||
name = "redis-om"
 | 
					name = "redis-om"
 | 
				
			||||||
version = "0.0.8"
 | 
					version = "0.0.9"
 | 
				
			||||||
description = "A high-level library containing useful Redis abstractions and tools, like an ORM and leaderboard."
 | 
					description = "A high-level library containing useful Redis abstractions and tools, like an ORM and leaderboard."
 | 
				
			||||||
authors = ["Andrew Brookins <andrew.brookins@redis.com>"]
 | 
					authors = ["Andrew Brookins <andrew.brookins@redis.com>"]
 | 
				
			||||||
maintainers = ["Andrew Brookins <andrew.brookins@redis.com>"]
 | 
					maintainers = ["Andrew Brookins <andrew.brookins@redis.com>"]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1014,6 +1014,7 @@ class ModelMeta(ModelMetaclass):
 | 
				
			||||||
            new_class._meta.primary_key_creator_cls = getattr(
 | 
					            new_class._meta.primary_key_creator_cls = getattr(
 | 
				
			||||||
                base_meta, "primary_key_creator_cls", UlidPrimaryKey
 | 
					                base_meta, "primary_key_creator_cls", UlidPrimaryKey
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					        # TODO: Configurable key separate, defaults to ":"
 | 
				
			||||||
        if not getattr(new_class._meta, "index_name", None):
 | 
					        if not getattr(new_class._meta, "index_name", None):
 | 
				
			||||||
            new_class._meta.index_name = (
 | 
					            new_class._meta.index_name = (
 | 
				
			||||||
                f"{new_class._meta.global_key_prefix}:"
 | 
					                f"{new_class._meta.global_key_prefix}:"
 | 
				
			||||||
| 
						 | 
					@ -1203,6 +1204,17 @@ class HashModel(RedisModel, abc.ABC):
 | 
				
			||||||
        db.hset(self.key(), mapping=document)
 | 
					        db.hset(self.key(), mapping=document)
 | 
				
			||||||
        return self
 | 
					        return self
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @classmethod
 | 
				
			||||||
 | 
					    def all_pks(cls):
 | 
				
			||||||
 | 
					        key_prefix = cls.make_key(cls._meta.primary_key_pattern.format(pk=""))
 | 
				
			||||||
 | 
					        # TODO: We assume the key ends with the default separator, ":" -- when
 | 
				
			||||||
 | 
					        #  we make the separator configurable, we need to update this as well.
 | 
				
			||||||
 | 
					        #  ... And probably lots of other places ...
 | 
				
			||||||
 | 
					        return (
 | 
				
			||||||
 | 
					            key.split(":")[-1]
 | 
				
			||||||
 | 
					            for key in cls.db().scan_iter(f"{key_prefix}*", _type="HASH")
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def get(cls, pk: Any) -> "HashModel":
 | 
					    def get(cls, pk: Any) -> "HashModel":
 | 
				
			||||||
        document = cls.db().hgetall(cls.make_primary_key(pk))
 | 
					        document = cls.db().hgetall(cls.make_primary_key(pk))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -411,6 +411,12 @@ def test_sorting(members, m):
 | 
				
			||||||
        m.Member.find().sort_by("join_date").all()
 | 
					        m.Member.find().sort_by("join_date").all()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def test_all_keys(members, m):
 | 
				
			||||||
 | 
					    pks = sorted(list(m.Member.all_pks()))
 | 
				
			||||||
 | 
					    assert len(pks) == 3
 | 
				
			||||||
 | 
					    assert pks == sorted([m.pk for m in members])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_not_found(m):
 | 
					def test_not_found(m):
 | 
				
			||||||
    with pytest.raises(NotFoundError):
 | 
					    with pytest.raises(NotFoundError):
 | 
				
			||||||
        # This ID does not exist.
 | 
					        # This ID does not exist.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue