Beispiel #1
0
 def __new__(cls, name, bases, attrs):
     new_class = super(EmitNewActivityMetaClass, cls).__new__(
         cls, name, bases, attrs)
     if new_class.key:
         post_save.connect(cls.post_save, sender=new_class)
         _registered_activities[new_class.key] = new_class
     return new_class
Beispiel #2
0
 def __new__(cls, name, bases, attrs):
     new_class = super(EmitNewActivityMetaClass, cls).__new__(
         cls, name, bases, attrs)
     if new_class.key:
         post_save.connect(cls.post_save, sender=new_class)
         _registered_activities[new_class.key] = new_class
     return new_class
Beispiel #3
0
def register(adapter):
    '''Register a search adapter'''
    # register the class in the catalog
    if adapter.model and adapter.model not in adapter_catalog:
        adapter_catalog[adapter.model] = adapter
        # Automatically reindex objects on save
        post_save.connect(reindex_model_on_save, sender=adapter.model)
    return adapter
Beispiel #4
0
 def __new__(cls, name, bases, attrs):
     # Ensure any child class dispatch the signals
     adapter = super(SearchAdapterMetaClass, cls).__new__(cls, name, bases, attrs)
     # register the class in the catalog
     if adapter.model and adapter.model not in adapter_catalog:
         adapter_catalog[adapter.model] = adapter
         # Automatically reindex objects on save
         post_save.connect(reindex_model_on_save, sender=adapter.model)
     return adapter
Beispiel #5
0
            author = None

        if author:
            result['author'] = author

        return result

    @property
    def views_count(self):
        return self.metrics.get('views', 0)

    def count_datasets(self):
        self.metrics['datasets'] = len(self.datasets)
        self.save(signal_kwargs={'ignores': ['post_save']})

    def count_discussions(self):
        from udata.models import Discussion
        self.metrics['discussions'] = Discussion.objects(subject=self,
                                                         closed=None).count()
        self.save()

    def count_followers(self):
        from udata.models import Follow
        self.metrics['followers'] = Follow.objects(
            until=None).followers(self).count()
        self.save()


pre_save.connect(Reuse.pre_save, sender=Reuse)
post_save.connect(Reuse.post_save, sender=Reuse)
Beispiel #6
0
        if self.organization:
            author = self.organization.json_ld
        elif self.owner:
            author = self.owner.json_ld
        else:
            author = None

        if author:
            result['author'] = author

        return result


pre_save.connect(Dataset.pre_save, sender=Dataset)
post_save.connect(Dataset.post_save, sender=Dataset)


class CommunityResource(ResourceMixin, WithMetrics, db.Owned, db.Document):
    '''
    Local file, remote file or API added by the community of the users to the
    original dataset
    '''
    dataset = db.ReferenceField(Dataset, reverse_delete_rule=db.NULLIFY)

    meta = {
        'ordering': ['-created_at'],
        'queryset_class': db.OwnedQuerySet,
    }

    @property
Beispiel #7
0
    def clear_api_key(self):
        self.apikey = None

    @classmethod
    def get(cls, id_or_slug):
        obj = cls.objects(slug=id_or_slug).first()
        return obj or cls.objects.get_or_404(id=id_or_slug)

    @classmethod
    def pre_save(cls, sender, document, **kwargs):
        cls.before_save.send(document)

    @classmethod
    def post_save(cls, sender, document, **kwargs):
        cls.after_save.send(document)
        if kwargs.get('created'):
            cls.on_create.send(document)
        else:
            cls.on_update.send(document)


datastore = MongoEngineUserDatastore(db, User, Role)


pre_save.connect(User.pre_save, sender=User)
post_save.connect(User.post_save, sender=User)


class FollowUser(Follow):
    following = db.ReferenceField(User)
Beispiel #8
0
        return chain(
            *[dataset.check_availability()
              for dataset in Dataset.objects(organization=self).visible()[:20]]
        )

    @cached_property
    def json_ld(self):
        type_ = 'GovernmentOrganization' if self.public_service \
                else 'Organization'

        result = {
            '@context': 'http://schema.org',
            '@type': type_,
            'alternateName': self.slug,
            'url': url_for('organizations.show', org=self, _external=True),
            'name': self.name,
        }

        if self.description:
            result['description'] = mdstrip(self.description)

        logo = self.logo(external=True)
        if logo:
            result['logo'] = logo

        return result


pre_save.connect(Organization.pre_save, sender=Organization)
post_save.connect(Organization.post_save, sender=Organization)
Beispiel #9
0
    def clear_api_key(self):
        self.apikey = None

    @classmethod
    def get(cls, id_or_slug):
        obj = cls.objects(slug=id_or_slug).first()
        return obj or cls.objects.get_or_404(id=id_or_slug)

    @classmethod
    def pre_save(cls, sender, document, **kwargs):
        cls.before_save.send(document)

    @classmethod
    def post_save(cls, sender, document, **kwargs):
        cls.after_save.send(document)
        if kwargs.get('created'):
            cls.on_create.send(document)
        else:
            cls.on_update.send(document)


datastore = MongoEngineUserDatastore(db, User, Role)

pre_save.connect(User.pre_save, sender=User)
post_save.connect(User.post_save, sender=User)


class FollowUser(Follow):
    following = db.ReferenceField(User)
Beispiel #10
0
        '''Auto populate urlhash from url'''
        if not self.urlhash or 'url' in self._get_changed_fields():
            self.urlhash = hash_url(self.url)
        super(Reuse, self).clean()

    @classmethod
    def get(cls, id_or_slug):
        obj = cls.objects(slug=id_or_slug).first()
        return obj or cls.objects.get_or_404(id=id_or_slug)

    @classmethod
    def url_exists(cls, url):
        urlhash = hash_url(url)
        return cls.objects(urlhash=urlhash).count() > 0


pre_save.connect(Reuse.pre_save, sender=Reuse)
post_save.connect(Reuse.post_save, sender=Reuse)


class ReuseIssue(Issue):
    subject = db.ReferenceField(Reuse)


class ReuseDiscussion(Discussion):
    subject = db.ReferenceField(Reuse)


class FollowReuse(Follow):
    following = db.ReferenceField(Reuse)
Beispiel #11
0
        return result

    @property
    def views_count(self):
        return self.metrics.get('views', 0)

    def count_members(self):
        self.metrics['members'] = len(self.members)
        self.save()

    def count_datasets(self):
        from udata.models import Dataset
        self.metrics['datasets'] = Dataset.objects(
            organization=self).visible().count()
        self.save()

    def count_reuses(self):
        from udata.models import Reuse
        self.metrics['reuses'] = Reuse.objects(organization=self).count()
        self.save()

    def count_followers(self):
        from udata.models import Follow
        self.metrics['followers'] = Follow.objects(
            until=None).followers(self).count()
        self.save()


pre_save.connect(Organization.pre_save, sender=Organization)
post_save.connect(Organization.post_save, sender=Organization)
Beispiel #12
0
                else:
                    st = "%s %s" % (self.street.short_name, self.street.name)
            else:
                st = self.street.name
            n += ["%s %s" % (st, " ".join(a))]
        else:
            n += [" ".join(a)]
        if levels or to_level is not None:
            if to_level is not None:
                levels = 10
            p = self.building.adm_division
            while p and levels:
                if to_level is not None and p.level == to_level:
                    break
                if p.short_name:
                    n = ["%s %s" % (p.short_name, p.name)] + n
                else:
                    n = [p.name] + n
                p = p.parent
                levels -= 1
        return sep.join(n)

    # @todo: cmp_addr


#
RU_SHORT_AFTER = {"б-р", "проезд", "пер", "ш"}

# Signals
post_save.connect(Address.update_primary, sender=Address)
Beispiel #13
0
        resolve_user(notification.sender)
        notification.save(
        )  # MongoEngine takes care of dirty flags, it will only update if changed.

    received_notifications = BaseNotification.objects(
        __raw__={
            'receiver._cls': PlayerTarget._class_name,
            'receiver.player': document.minecraft_player.id,
            'receiver.user': {
                '$ne': document.id
            }
        })
    for notification in received_notifications:
        resolve_user(notification.sender)
        notification.save(
        )  # MongoEngine takes care of dirty flags, it will only update if changed.


post_save.connect(handle_user_update, sender=User)


class PMNotification(BaseNotification):

    deletable = BooleanField(default=True)
    source = StringField()
    message = StringField(required=True)

    def render_notification_listing(self):
        return render_template('notification_list_entry_pm.html',
                               notification=self)
Beispiel #14
0
 def __new__(cls, name, bases, attrs):
     new_class = super(EmitNewActivityMetaClass, cls).__new__(cls, name, bases, attrs)
     post_save.connect(cls.post_save, sender=new_class)
     return new_class

def handle_user_update(sender, document, created):
    sent_notifications = BaseNotification.objects(__raw__={
        'sender._cls': PlayerTarget._class_name,
        'sender.player': document.minecraft_player.id,
        'sender.user': {'$ne': document.id}
    })
    for notification in sent_notifications:
        resolve_user(notification.sender)
        notification.save()  # MongoEngine takes care of dirty flags, it will only update if changed.

    received_notifications = BaseNotification.objects(__raw__={
        'receiver._cls': PlayerTarget._class_name,
        'receiver.player': document.minecraft_player.id,
        'receiver.user': {'$ne': document.id}
    })
    for notification in received_notifications:
        resolve_user(notification.sender)
        notification.save()  # MongoEngine takes care of dirty flags, it will only update if changed.
post_save.connect(handle_user_update, sender=User)


class PMNotification(BaseNotification):

    deletable = BooleanField(default=True)
    source = StringField()
    message = StringField(required=True)

    def render_notification_listing(self):
        return render_template('notification_list_entry_pm.html', notification=self)
Beispiel #16
0
import uuid

from mongoengine.django.auth import User
from mongoengine.signals import post_save

import auth.documents

def create_api_key(sender, document, created):
    if created == True:
        key = unicode(uuid.uuid4())
        api_key = auth.documents.ApiKey(user=document, key=key, domains=[])
        api_key.save()

post_save.connect(create_api_key, sender=User)