Source code for onbasca.base.models.consensus
# SPDX-FileCopyrightText: 2022 The Tor Project, Inc.
#
# SPDX-License-Identifier: BSD-3-Clause
import datetime
import logging
from django.db import models
from . import BaseModel
logger = logging.getLogger(__name__)
[docs]
class ConsensusManagerBase(models.Manager):
[docs]
def from_router_statuses(self, router_statuses, valid_after=None):
if not valid_after:
router_status = router_statuses[0]
try:
valid_after = router_status.document.valid_after
except Exception:
pass
if not valid_after:
valid_after = datetime.datetime.utcnow().replace(microsecond=0)
consensus, created = self.get_or_create(valid_after=valid_after)
logger.info("Consensus %s created: %s", consensus, created)
return consensus
[docs]
class ConsensusBase(BaseModel):
objects = ConsensusManagerBase()
valid_after = models.DateTimeField(primary_key=True, editable=True)
def __str__(self):
return "{}".format(self.valid_after)
[docs]
def relays_count(self):
return self.relay_set.count()
[docs]
def relays(self):
self.relay_set.all()
[docs]
def routerstatuses(self):
return self.routerstatus_set.all()
# for admin
[docs]
def routerstatuses_count(self):
return self.routerstatus_set.count()