diff --git a/dev-requirements.txt b/dev-requirements.txt new file mode 100644 index 0000000..acdfd20 --- /dev/null +++ b/dev-requirements.txt @@ -0,0 +1 @@ +pycryptodome diff --git a/factordb/factordb.py b/factordb/factordb.py index 8358279..b17633b 100644 --- a/factordb/factordb.py +++ b/factordb/factordb.py @@ -49,3 +49,11 @@ def get_factor_list(self): return [] ml = [[int(x)] * y for x, y in factors] return [y for x in ml for y in x] + + @staticmethod + def submit_factors(product, factors): + headers = {"Content-Type": "application/x-www-form-urlencoded"} + + factors = map(str, factors) + data = {"report": f"{product}={','.join(factors)}"} + requests.post("http://factordb.com/report.php", headers=headers, data=data) diff --git a/tests/test_factordb.py b/tests/test_factordb.py index 32298a4..54958d4 100644 --- a/tests/test_factordb.py +++ b/tests/test_factordb.py @@ -3,6 +3,7 @@ import unittest from factordb.factordb import FactorDB +from Crypto.Util import number class FactorDBTestCase(unittest.TestCase): @@ -63,6 +64,25 @@ def test_factordb_api_prime(self): self.assertTrue(factordb.is_prime()) + def test_submit(self): + # generate not yet factorized numbers + factordb = None + while factordb is None or factordb.get_status() != 'C': + p = number.getPrime(1024) + q = number.getPrime(1024) + n = p * q + + factordb = FactorDB(n) + factordb.connect() + + # sort numbers because factordb returns them in ascending order + factors = sorted([p, q]) + FactorDB.submit_factors(n, factors) + + factordb.connect(reconnect=True) + self.assertEqual(factordb.get_status(), 'FF') + self.assertListEqual(factordb.get_factor_list(), factors) + def __check_testcase(self, factordb, expected): self.assertEqual(factordb.get_id(), expected['id']) self.assertEqual(factordb.get_status(), expected['status'])