def __get_value(index): """ Возвращает простое число с порядковым номером index. При первом обращении вычисляет все MAX_INDEX первых простых и кеширует их. >>> prime = PrimeNumber(index=10) >>> prime.value 29 >>> prime.index = 2 >>> prime.value 3 >>> prime.index = 5 >>> prime.value 11 """ from django.core.cache import cache from primes.computing.prime_sieve import get_first_primes CACHE_ID = 'primes' primes = cache.get(CACHE_ID) if primes is None: primes = get_first_primes(settings.MAX_INDEX) cache.set(CACHE_ID, primes, None) return primes[index - 1]
def testIndexed(self): self.assertItemsEqual([2, 3], prime_sieve.get_first_primes(2)) self.assertItemsEqual([2, 3, 5, 7, 11], prime_sieve.get_first_primes(5)) self.assertItemsEqual([2, 3, 5, 7, 11, 13, 17, 19, 23, 29], prime_sieve.get_first_primes(10)) self.assertItemsEqual([], prime_sieve.get_first_primes(0)) self.assertRaises(ValueError, prime_sieve.get_first_primes, -1)