return None

        hook_id = self.check_hook(gh, force=True)
        if hook_id:
            identifiers = self.github_callable_identifiers_for_hooks + [hook_id]
            gh_callable = self.__class__.objects.get_github_callable(gh, identifiers)
            gh_callable.delete()

            self.hook_set = False
            self.save(update_fields=['hook_set'])

            return True

        return False

contribute_to_model(_Repository, core_models.Repository)


class EventManager(object):
    def __init__(self, repository_payload=None, repository=None):
        if repository is not None:
            self.repository = repository
        else:
            self.get_repository(repository_payload)

    def get_repository(self, repository_payload):
        try:
            self.repository = core_models.Repository.objects.get(github_id=repository_payload['id'])
        except Exception:
            self.repository = None
        return self.repository
from events.models import Event, EventPart

from .managers import ActivityManager


class _Repository(models.Model):
    class Meta:
        abstract = True

    @property
    def activity(self):
        from .limpyd_models import RepositoryActivity
        a, created = RepositoryActivity.get_or_connect(object_id=self.id)
        return a

contribute_to_model(_Repository, Repository)


class _Issue(models.Model):
    class Meta:
        abstract = True

    @property
    def activity(self):
        if not hasattr(self, '_activity_limpyd_object'):
            from .limpyd_models import IssueActivity
            self._activity_limpyd_object, created = IssueActivity.get_or_connect(object_id=self.id)
        return self._activity_limpyd_object

    def ask_for_activity_update(self):
        from .tasks import ResetIssueActivity
        if html_part is None:
            return ''
        return '<div class="part-%s">%s</div>' % (self.field, html_part)


from .trackers import *


class _Repository(models.Model):
    class Meta:
        abstract = True

    @property
    def counters(self):
        if not hasattr(self, '_counters_limpyd_object'):
            from .limpyd_models import RepositoryCounters
            self._counters_limpyd_object, created = RepositoryCounters.get_or_connect(repository_id=self.id)
            if created:
                self._counters_limpyd_object.update_global()
                self._counters_limpyd_object.update_users()
        return self._counters_limpyd_object

    def ask_for_counters_update(self):
        from .tasks import ResetRepositoryCounters
        ResetRepositoryCounters.add_job(self.pk, priority=-5, delayed_for=timedelta(minutes=15))

contribute_to_model(_Repository, Repository)


from .tasks import *
                                    self.user.username,
                                    self.get_state_display())


class _Repository(models.Model):
    class Meta:
        abstract = True

    def has_subscriptions(self, states=SUBSCRIPTION_STATES.READ_RIGHTS):
        """
        Return True if the repository has at least one subscription with the
        given rights (by detault all reading&more rights)
        """
        return self.subscriptions.filter(state__in=states).exists()

contribute_to_model(_Repository, Repository)


class _GithubUser(models.Model):
    class Meta:
        abstract = True

    AUTHORIZED_RIGHTS = {
        SUBSCRIPTION_STATES.ADMIN: ('admin', ),
        SUBSCRIPTION_STATES.USER: ('admin', 'push', ),
        SUBSCRIPTION_STATES.READ: ('admin', 'push', 'pull', ),
    }

    MAX_RIGHT = {
        'admin': SUBSCRIPTION_STATES.ADMIN,
        'push': SUBSCRIPTION_STATES.USER,