diff --git a/dddp/api.py b/dddp/api.py index e3eac98..de3d73c 100644 --- a/dddp/api.py +++ b/dddp/api.py @@ -187,6 +187,8 @@ class CollectionMeta(APIMeta): """DDP Collection metaclass.""" + model_name_map = {} + def __new__(mcs, name, bases, attrs): """Create a new Collection class.""" attrs.update( @@ -197,6 +199,10 @@ class CollectionMeta(APIMeta): attrs.update( name=model_name(model), ) + if model and attrs.get('name'): + if model._meta.label_lower: + model = model._meta.label_lower + CollectionMeta.model_name_map.update({model: attrs.get('name')}) return super(CollectionMeta, mcs).__new__(mcs, name, bases, attrs) @@ -562,7 +568,11 @@ class DDP(APIMixin): def get_col_by_name(self, name): """Return collection instance for given name.""" - return self._registry[COLLECTION_PATH_FORMAT.format(name=name)] + try: + return self._registry[COLLECTION_PATH_FORMAT.format(name=name)] + except: + name = Collection.model_name_map[str(name)] + return self._registry[COLLECTION_PATH_FORMAT.format(name=name)] def get_pub_by_name(self, name): """Return publication instance for given name.""" diff --git a/dddp/models.py b/dddp/models.py index 28c52e1..fb4f9b7 100644 --- a/dddp/models.py +++ b/dddp/models.py @@ -228,8 +228,12 @@ class AleaIdField(models.CharField): def get_seeded_value(self, instance): """Generate a syncronised value.""" # Django model._meta is public API -> pylint: disable=W0212 + if hasattr(instance, "meteor_collection"): + name = instance.meteor_collection + else: + name = instance._meta return meteor_random_id( - '/collection/%s' % instance._meta, self.max_length, + '/collection/%s' % name, self.max_length, ) def get_pk_value_on_save(self, instance):