From d517e28e8ecf35872beba15e9c193308690f61c3 Mon Sep 17 00:00:00 2001 From: craig Date: Sun, 20 Dec 2015 00:41:05 +1100 Subject: [PATCH 1/2] get dddp to get correct collection and not throw an error --- dddp/api.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dddp/api.py b/dddp/api.py index 0e77f47..af09d20 100644 --- a/dddp/api.py +++ b/dddp/api.py @@ -230,6 +230,8 @@ class CollectionMeta(APIMeta): """DDP Collection metaclass.""" + model_name_map = {} + def __new__(mcs, name, bases, attrs): """Create a new Collection class.""" attrs.update( @@ -240,6 +242,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) @@ -605,7 +611,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.""" From fa15d17e9a003b87240da667b7b248e660399394 Mon Sep 17 00:00:00 2001 From: craig Date: Tue, 22 Dec 2015 07:11:29 +1100 Subject: [PATCH 2/2] hack to not modify meteor --- dddp/models.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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):