diff --git a/pyproject.toml b/pyproject.toml index acb887f24e..f065435b28 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,8 +49,7 @@ members = [ [dependency-groups] dev = [ - # held back due to https://github.com/psf/black/issues/4963 - "black<26.1.0", + "black", "coverage", "coveralls", "fakeredis", diff --git a/src/auslib/migrate/versions/017_add_scheduled_rule_changes_conditions.py b/src/auslib/migrate/versions/017_add_scheduled_rule_changes_conditions.py index e7461edf81..bb90abe4b2 100644 --- a/src/auslib/migrate/versions/017_add_scheduled_rule_changes_conditions.py +++ b/src/auslib/migrate/versions/017_add_scheduled_rule_changes_conditions.py @@ -37,19 +37,15 @@ def upgrade(migrate_engine): metadata.create_all() # 2) Copy the conditions from the existing Scheduled Changes tables to them. - migrate_engine.execute( - """INSERT INTO rules_scheduled_changes_conditions + migrate_engine.execute("""INSERT INTO rules_scheduled_changes_conditions (sc_id, telemetry_product, telemetry_channel, telemetry_uptake, data_version, `when`) SELECT sc_id, telemetry_product, telemetry_channel, telemetry_uptake, data_version, `when` from rules_scheduled_changes; -""" - ) - migrate_engine.execute( - """INSERT INTO rules_scheduled_changes_conditions_history +""") + migrate_engine.execute("""INSERT INTO rules_scheduled_changes_conditions_history (change_id, changed_by, timestamp, sc_id, telemetry_product, telemetry_channel, telemetry_uptake, data_version, `when`) SELECT change_id, changed_by, timestamp, sc_id, telemetry_product, telemetry_channel, telemetry_uptake, data_version, `when` from rules_scheduled_changes_history; -""" - ) +""") # 3) _Then_ drop the conditions columns from the existing Tables. rules_scheduled_changes = Table("rules_scheduled_changes", metadata, autoload=True) diff --git a/src/auslib/migrate/versions/019_add_change_type.py b/src/auslib/migrate/versions/019_add_change_type.py index 1639998c4b..10296b20b3 100644 --- a/src/auslib/migrate/versions/019_add_change_type.py +++ b/src/auslib/migrate/versions/019_add_change_type.py @@ -11,20 +11,16 @@ def upgrade(migrate_engine): # 2) Update the values of change_type depending on base_data_version - migrate_engine.execute( - """ + migrate_engine.execute(""" UPDATE rules_scheduled_changes SET change_type = "insert" WHERE base_data_version is NULL; - """ - ) - migrate_engine.execute( - """ + """) + migrate_engine.execute(""" UPDATE rules_scheduled_changes SET change_type = "update" WHERE base_data_version is not NULL; - """ - ) + """) # 3) Alter the column and set nullable=False change_type.alter(nullable=False) @@ -32,20 +28,16 @@ def upgrade(migrate_engine): change_type = Column("change_type", String(50)) change_type.create(Table("rules_scheduled_changes_history", metadata, autoload=True)) - migrate_engine.execute( - """ + migrate_engine.execute(""" UPDATE rules_scheduled_changes_history SET change_type = "insert" WHERE base_data_version is NULL; - """ - ) - migrate_engine.execute( - """ + """) + migrate_engine.execute(""" UPDATE rules_scheduled_changes_history SET change_type = "update" WHERE base_data_version is not NULL; - """ - ) + """) rules_scheduled_changes = Table("rules_scheduled_changes", metadata, autoload=True) rules_scheduled_changes.c.base_update_type.alter(nullable=True) diff --git a/src/auslib/util/versions.py b/src/auslib/util/versions.py index 125d09faba..609fe1960a 100644 --- a/src/auslib/util/versions.py +++ b/src/auslib/util/versions.py @@ -56,7 +56,7 @@ def parse(self, vstring): if not match: raise ValueError("invalid version number '%s'" % vstring) - (major, minor, patch, prerelease, prerelease_num) = match.group(1, 2, 4, 5, 6) + major, minor, patch, prerelease, prerelease_num = match.group(1, 2, 4, 5, 6) if patch: self.version = tuple(map(int, [major, minor, patch])) diff --git a/taskcluster/balrog_taskgraph/transforms/docker_push.py b/taskcluster/balrog_taskgraph/transforms/docker_push.py index 4941be6fb9..e04ce009f0 100644 --- a/taskcluster/balrog_taskgraph/transforms/docker_push.py +++ b/taskcluster/balrog_taskgraph/transforms/docker_push.py @@ -6,7 +6,6 @@ Set environment variables for the skopeo push-image command """ - import os import tomllib diff --git a/taskcluster/balrog_taskgraph/transforms/run_on_releases.py b/taskcluster/balrog_taskgraph/transforms/run_on_releases.py index 274d2885b7..eebb9d8074 100644 --- a/taskcluster/balrog_taskgraph/transforms/run_on_releases.py +++ b/taskcluster/balrog_taskgraph/transforms/run_on_releases.py @@ -6,7 +6,6 @@ Support run-on-releases option """ - from taskgraph.transforms.base import TransformSequence transforms = TransformSequence() diff --git a/tests/admin/views/base.py b/tests/admin/views/base.py index 80c8bf9f8f..7aa4532783 100644 --- a/tests/admin/views/base.py +++ b/tests/admin/views/base.py @@ -55,15 +55,13 @@ def my_userinfo(*args, **kwargs): app.config["M2M_ACCOUNT_MAPPING"] = {} app.config["CORS_ORIGINS"] = "*" with open(self.version_file, "w+") as f: - f.write( - """ + f.write(""" { "source":"https://github.com/mozilla-releng/balrog", "version":"1.0", "commit":"abcdef123456" } -""" - ) +""") dbo.setDb("sqlite:///:memory:", releases_history_buckets={"*": "fake"}, releases_history_class=FakeGCSHistory) self.orig_releases_history = dbo.releases.history @@ -119,33 +117,28 @@ def my_userinfo(*args, **kwargs): dbo.releases.t.insert().execute(name="a", product="a", data=createBlob(dict(name="a", hashFunction="sha512", schema_version=1)), data_version=1) dbo.releases.t.insert().execute(name="ab", product="a", data=createBlob(dict(name="ab", hashFunction="sha512", schema_version=1)), data_version=1) dbo.releases.history.bucket.blobs["ab/None-456-bob.json"] = FakeBlob("") - dbo.releases.history.bucket.blobs["ab/1-456-bob.json"] = FakeBlob( - """ + dbo.releases.history.bucket.blobs["ab/1-456-bob.json"] = FakeBlob(""" { "name": "ab", "hashFunction": "sha512", "schema_version": 1 } -""" - ) +""") dbo.releases.t.insert().execute(name="b", product="b", data=createBlob(dict(name="b", hashFunction="sha512", schema_version=1)), data_version=1) dbo.releases.history.bucket.blobs["b/None-567-bob.json"] = FakeBlob("") - dbo.releases.history.bucket.blobs["b/1-567-bob.json"] = FakeBlob( - """ + dbo.releases.history.bucket.blobs["b/1-567-bob.json"] = FakeBlob(""" { "name": "b", "hashFunction": "sha512", "schema_version": 1 } -""" - ) +""") dbo.releases.t.insert().execute(name="c", product="c", data=createBlob(dict(name="c", hashFunction="sha512", schema_version=1)), data_version=1) dbo.releases.t.insert().execute( name="d", product="d", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "d", "schema_version": 1, @@ -164,12 +157,10 @@ def my_userinfo(*args, **kwargs): } } } -""" - ), +"""), ) dbo.releases.history.bucket.blobs["d/None-678-bob.json"] = FakeBlob("") - dbo.releases.history.bucket.blobs["d/1-678-bob.json"] = FakeBlob( - """ + dbo.releases.history.bucket.blobs["d/1-678-bob.json"] = FakeBlob(""" { "name": "d", "schema_version": 1, @@ -188,8 +179,7 @@ def my_userinfo(*args, **kwargs): } } } -""" - ) +""") dbo.rules.t.insert().execute( rule_id=1, priority=100, diff --git a/tests/admin/views/test_releases.py b/tests/admin/views/test_releases.py index 5e7a10337d..3696358b29 100644 --- a/tests/admin/views/test_releases.py +++ b/tests/admin/views/test_releases.py @@ -17,15 +17,13 @@ def testGetRelease(self): self.assertStatusCode(ret, 200) self.assertDictEqual( ret.get_json(), - json.loads( - """ + json.loads(""" { "name": "b", "hashFunction": "sha512", "schema_version": 1 } -""" - ), +"""), ) def testGetRelease404(self): @@ -39,8 +37,7 @@ def testReleasePostUpdateExisting(self): ret = select([dbo.releases.data]).where(dbo.releases.name == "d").execute().fetchone()[0] self.assertDictEqual( ret, - createBlob( - """ + createBlob(""" { "name": "d", "schema_version": 1, @@ -61,8 +58,7 @@ def testReleasePostUpdateExisting(self): } } } -""" - ), +"""), ) def testReleasePostUpdateExistingWithoutPermission(self): @@ -148,8 +144,7 @@ def testReleasePutUpdateMergeableOutdatedData(self): } } }""" - result_blob = createBlob( - """ + result_blob = createBlob(""" { "name": "dd", "schema_version": 1, @@ -183,8 +178,7 @@ def testReleasePutUpdateMergeableOutdatedData(self): } } } - }""" - ) + }""") # Testing Put request to add new release ret = self._put("/releases/dd", data=dict(blob=ancestor_blob, name="dd", product="dd", data_version=1)) @@ -385,8 +379,7 @@ def testReleasePostCreatesNewReleasev1(self): self.assertEqual(ret["name"], "e") self.assertDictEqual( ret["data"], - createBlob( - """ + createBlob(""" { "name": "e", "hashFunction": "sha512", @@ -395,8 +388,7 @@ def testReleasePostCreatesNewReleasev1(self): "partial": "foo" } } -""" - ), +"""), ) def testReleasePostCreatesNewReleaseNoAuthentication(self): @@ -418,8 +410,7 @@ def testReleasePostCreatesNewReleasev2(self): self.assertEqual(ret["name"], "e") self.assertDictEqual( ret["data"], - createBlob( - """ + createBlob(""" { "name": "e", "hashFunction": "sha512", @@ -428,8 +419,7 @@ def testReleasePostCreatesNewReleasev2(self): "complete": "foo" } } -""" - ), +"""), ) def testReleasePostInvalidKey(self): @@ -490,8 +480,7 @@ def testLocalePut(self): self.assertStatusCode(ret, 201) self.assertEqual(ret.get_data(as_text=True), json.dumps(dict(new_data_version=2)), "Data: %s" % ret.get_data()) ret = select([dbo.releases.data]).where(dbo.releases.name == "ab").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "ab", "schema_version": 1, @@ -510,8 +499,7 @@ def testLocalePut(self): } } } -""" - ) +""") self.assertDictEqual(ret, expected) history_entries = [blob.data for name, blob in dbo.releases.history.bucket.blobs.items() if name.startswith("ab/")] @@ -557,8 +545,7 @@ def testLocalePutSpecificPermission(self): self.assertStatusCode(ret, 201) self.assertEqual(ret.get_data(as_text=True), json.dumps(dict(new_data_version=2)), "Data: %s" % ret.get_data()) ret = select([dbo.releases.data]).where(dbo.releases.name == "ab").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "ab", "schema_version": 1, @@ -577,8 +564,7 @@ def testLocalePutSpecificPermission(self): } } } -""" - ) +""") self.assertDictEqual(ret, expected) history_entries = [blob.data for name, blob in dbo.releases.history.bucket.blobs.items() if name.startswith("ab/")] @@ -615,8 +601,7 @@ def testLocalePutForNewRelease(self): self.assertStatusCode(ret, 201) self.assertEqual(ret.get_data(as_text=True), json.dumps(dict(new_data_version=2)), "Data: %s" % ret.get_data()) ret = select([dbo.releases.data]).where(dbo.releases.name == "e").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "e", "schema_version": 1, @@ -635,8 +620,7 @@ def testLocalePutForNewRelease(self): } } } -""" - ) +""") self.assertDictEqual(ret, expected) history_entries = [blob.data for name, blob in dbo.releases.history.bucket.blobs.items() if name.startswith("e/")] @@ -651,8 +635,7 @@ def testLocalePutAppend(self): self.assertStatusCode(ret, 201) self.assertEqual(ret.get_data(as_text=True), json.dumps(dict(new_data_version=2)), "Data: %s" % ret.get_data()) ret = select([dbo.releases.data]).where(dbo.releases.name == "d").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "d", "schema_version": 1, @@ -679,13 +662,11 @@ def testLocalePutAppend(self): } } } -""" - ) +""") self.assertDictEqual(ret, expected) history_entries = [blob.data for name, blob in dbo.releases.history.bucket.blobs.items() if name.startswith("d/")] - interim_blob = createBlob( - """ + interim_blob = createBlob(""" { "name": "d", "schema_version": 1, @@ -704,8 +685,7 @@ def testLocalePutAppend(self): } } } -""" - ) +""") self.assertEqual(len(history_entries), 3) self.assertEqual(history_entries[0], "") self.assertDictEqual(json.loads(history_entries[2]), expected) @@ -719,8 +699,7 @@ def testLocalePutForNewReleaseWithAlias(self): self.assertStatusCode(ret, 201) self.assertEqual(ret.get_data(as_text=True), json.dumps(dict(new_data_version=2)), "Data: %s" % ret.get_data()) ret = select([dbo.releases.data]).where(dbo.releases.name == "e").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "e", "hashFunction": "sha512", @@ -742,8 +721,7 @@ def testLocalePutForNewReleaseWithAlias(self): } } } -""" - ) +""") self.assertDictEqual(ret, expected) history_entries = [blob.data for name, blob in dbo.releases.history.bucket.blobs.items() if name.startswith("e/")] @@ -758,8 +736,7 @@ def testLocalePutAppendWithAlias(self): self.assertStatusCode(ret, 201) self.assertEqual(ret.get_data(as_text=True), json.dumps(dict(new_data_version=2)), "Data: %s" % ret.get_data()) ret = select([dbo.releases.data]).where(dbo.releases.name == "d").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "d", "schema_version": 1, @@ -793,13 +770,11 @@ def testLocalePutAppendWithAlias(self): } } } -""" - ) +""") self.assertDictEqual(ret, expected) history_entries = [blob.data for name, blob in dbo.releases.history.bucket.blobs.items() if name.startswith("d/")] - interim_blob = createBlob( - """ + interim_blob = createBlob(""" { "name": "d", "schema_version": 1, @@ -818,8 +793,7 @@ def testLocalePutAppendWithAlias(self): } } } -""" - ) +""") self.assertEqual(len(history_entries), 3) self.assertEqual(history_entries[0], "") self.assertDictEqual(json.loads(history_entries[1]), interim_blob) @@ -832,8 +806,7 @@ def testLocalePutWithCopy(self): self.assertStatusCode(ret, 201) self.assertEqual(ret.get_data(as_text=True), json.dumps(dict(new_data_version=2)), "Data: %s" % ret.get_data()) ret = select([dbo.releases.data]).where(dbo.releases.name == "ab").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "ab", "schema_version": 1, @@ -852,8 +825,7 @@ def testLocalePutWithCopy(self): } } } -""" - ) +""") self.assertDictEqual(ret, expected) history_entries = [blob.data for name, blob in dbo.releases.history.bucket.blobs.items() if name.startswith("ab/")] @@ -862,8 +834,7 @@ def testLocalePutWithCopy(self): self.assertDictEqual(json.loads(history_entries[2]), expected) ret = select([dbo.releases.data]).where(dbo.releases.name == "b").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "b", "schema_version": 1, @@ -882,8 +853,7 @@ def testLocalePutWithCopy(self): } } } -""" - ) +""") self.assertDictEqual(ret, expected) history_entries = [blob.data for name, blob in dbo.releases.history.bucket.blobs.items() if name.startswith("b/")] @@ -985,8 +955,7 @@ def testNewReleasePut(self): self.assertEqual(r[0]["product"], "Firefox") self.assertDictEqual( r[0]["data"], - createBlob( - """ + createBlob(""" { "name": "new_release", "hashFunction": "sha512", @@ -1000,8 +969,7 @@ def testNewReleasePut(self): } } } -""" - ), +"""), ) def testNewReleasePutBadInput(self): @@ -1092,16 +1060,14 @@ def testPutExistingRelease(self): self.assertEqual(r[0]["product"], "Firefox") self.assertDictEqual( r[0]["data"], - createBlob( - """ + createBlob(""" { "name": "d", "schema_version": 3, "hashFunction": "sha512", "actions": "doit" } -""" - ), +"""), ) def testGMPReleasePut(self): @@ -1143,8 +1109,7 @@ def testGMPReleasePut(self): self.assertEqual(r[0]["product"], "a") self.assertDictEqual( r[0]["data"], - createBlob( - """ + createBlob(""" { "name": "gmprel", "schema_version": 1000, @@ -1166,8 +1131,7 @@ def testGMPReleasePut(self): } } } -""" - ), +"""), ) def testGetReleases(self): @@ -1181,15 +1145,13 @@ def testGetReleasesNamesOnly(self): self.assertStatusCode(ret, 200) self.assertDictEqual( ret.get_json(), - json.loads( - """ + json.loads(""" { "names": [ "a", "ab", "b", "c", "d" ] } -""" - ), +"""), ) def testGetReleasesNamePrefix(self): @@ -1203,8 +1165,7 @@ def testGetReleasesNamePrefix(self): self.assertDictEqual( ret_data, - json.loads( - """ + json.loads(""" { "releases": [ {"data_version": 1, "name": "a", "product": "a", "read_only": false, @@ -1222,8 +1183,7 @@ def testGetReleasesNamePrefix(self): {"data_version": 1, "name": "ab", "product": "a", "read_only": false, "rule_ids": [], "rule_info": {}, "required_signoffs": {}} ] } -""" - ), +"""), ) def testGetReleasesNamePrefixNamesOnly(self): @@ -1231,13 +1191,11 @@ def testGetReleasesNamePrefixNamesOnly(self): self.assertStatusCode(ret, 200) self.assertDictEqual( ret.get_json(), - json.loads( - """ + json.loads(""" { "names": ["a", "ab"] } -""" - ), +"""), ) def testReleasesPost(self): @@ -1249,8 +1207,7 @@ def testReleasesPost(self): self.assertEqual(ret["name"], "e") self.assertDictEqual( ret["data"], - createBlob( - """ + createBlob(""" { "name": "e", "hashFunction": "sha512", @@ -1259,8 +1216,7 @@ def testReleasesPost(self): "partial": "foo" } } -""" - ), +"""), ) diff --git a/tests/blobs/test_apprelease.py b/tests/blobs/test_apprelease.py index 4ab68dc61e..2528899b3e 100755 --- a/tests/blobs/test_apprelease.py +++ b/tests/blobs/test_apprelease.py @@ -122,8 +122,7 @@ def setUp(self): self.metadata.create_all(dbo.engine) dbo.setDomainAllowlist(self.allowlistedDomains) self.sampleReleaseBlob = ReleaseBlobV1() - self.sampleReleaseBlob.loadJSON( - """ + self.sampleReleaseBlob.loadJSON(""" { "name": "j1", "schema_version": 1, @@ -203,8 +202,7 @@ def setUp(self): } } } - """ - ) + """) def testGetPartialReleaseReferences_Happy_Case(self): partial_releases = self.sampleReleaseBlob.getReferencedReleases() @@ -301,8 +299,7 @@ def setUp(self): self.specialForceHosts = ["http://a.com"] self.allowlistedDomains = {"boring.com": ("h",)} self.blob = ReleaseBlobV1() - self.blob.loadJSON( - """ + self.blob.loadJSON(""" { "name": "h", "schema_version": 1, @@ -326,8 +323,7 @@ def setUp(self): } } } -}""" - ) +}""") def testIsValid(self): # Raises on error @@ -353,11 +349,9 @@ def test2_0(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -384,11 +378,9 @@ def test3_0(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -415,11 +407,9 @@ def test3_5(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -446,11 +436,9 @@ def test3_6(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -487,8 +475,7 @@ def setUp(self): self.specialForceHosts = ["http://a.com"] self.allowlistedDomains = {"a.com": ("h",), "boring.com": ("h",)} self.blob = ReleaseBlobV1() - self.blob.loadJSON( - """ + self.blob.loadJSON(""" { "name": "h", "schema_version": 1, @@ -520,8 +507,7 @@ def setUp(self): } } } -}""" - ) +}""") def testSpecialQueryParam(self): updateQuery = { @@ -543,11 +529,9 @@ def testSpecialQueryParam(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -574,11 +558,9 @@ def testSpecialQueryParamForced(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -605,11 +587,9 @@ def testSpecialQueryParamForcedFail(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -636,11 +616,9 @@ def testNonSpecialQueryParam(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -667,11 +645,9 @@ def testNonSpecialQueryParamForced(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -698,11 +674,9 @@ def testNoSpecialDefined(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -723,8 +697,7 @@ def setUp(self): product="j", version="39.0", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "j1", "schema_version": 2, @@ -737,12 +710,10 @@ def setUp(self): } } } -""" - ), +"""), ) self.blobJ2 = ReleaseBlobV2() - self.blobJ2.loadJSON( - """ + self.blobJ2.loadJSON(""" { "name": "j2", "schema_version": 2, @@ -779,11 +750,9 @@ def setUp(self): } } } -""" - ) +""") self.blobK = ReleaseBlobV2() - self.blobK.loadJSON( - """ + self.blobK.loadJSON(""" { "name": "k", "schema_version": 2, @@ -831,12 +800,10 @@ def setUp(self): } } } -""" - ) +""") self.sampleReleaseBlob = ReleaseBlobV2() - self.sampleReleaseBlob.loadJSON( - """ + self.sampleReleaseBlob.loadJSON(""" { "name": "SampleBlob", "schema_version": 2, @@ -916,8 +883,7 @@ def setUp(self): } } } - """ - ) + """) def testGetPartialReleaseReferences_Happy_Case(self): partial_releases = self.sampleReleaseBlob.getReferencedReleases() @@ -949,11 +915,9 @@ def testSchema2CompleteOnly(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -1018,11 +982,9 @@ def testSchema2WithOptionalAttributes(self): 'actions="silent" openURL="http://example.org/url/l" notificationURL="http://example.org/notification/l" ' 'alertURL="http://example.org/alert/l">' ) - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -1053,11 +1015,9 @@ def testSchema2WithIsOSUpdate(self): 'showNeverForVersion="true" actions="silent" openURL="http://example.org/url/l2" ' 'notificationURL="http://example.org/notification/l2" alertURL="http://example.org/alert/l2">' ) - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -1088,8 +1048,7 @@ def setUp(self): product="j", version="0.5", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "j1", "schema_version": 2, @@ -1103,12 +1062,10 @@ def setUp(self): } } } -""" - ), +"""), ) self.blobJ2 = ReleaseBlobV2() - self.blobJ2.loadJSON( - """ + self.blobJ2.loadJSON(""" { "name": "j2", "schema_version": 2, @@ -1138,8 +1095,7 @@ def setUp(self): } } } -""" - ) +""") def testIsValid(self): # Raises on error @@ -1165,11 +1121,9 @@ def testCompleteOnly(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -1235,8 +1189,7 @@ def setUp(self): product="f", version="22.0", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "f1", "schema_version": 3, @@ -1249,16 +1202,14 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="f2", product="f", version="23.0", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "f2", "schema_version": 3, @@ -1271,12 +1222,10 @@ def setUp(self): } } } -""" - ), +"""), ) self.blobF3 = ReleaseBlobV3() - self.blobF3.loadJSON( - """ + self.blobF3.loadJSON(""" { "name": "f3", "schema_version": 3, @@ -1332,15 +1281,13 @@ def setUp(self): } } } -""" - ) +""") dbo.releases.t.insert().execute( name="g1", product="g", version="23.0", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "g1", "schema_version": 3, @@ -1353,12 +1300,10 @@ def setUp(self): } } } -""" - ), +"""), ) self.blobG2 = ReleaseBlobV3() - self.blobG2.loadJSON( - """ + self.blobG2.loadJSON(""" { "name": "g2", "schema_version": 3, @@ -1412,12 +1357,10 @@ def setUp(self): } } } -""" - ) +""") self.sampleReleaseBlobV3 = ReleaseBlobV3() - self.sampleReleaseBlobV3.loadJSON( - """ + self.sampleReleaseBlobV3.loadJSON(""" { "name": "f3", "schema_version": 3, @@ -1479,8 +1422,7 @@ def setUp(self): } } } - """ - ) + """) def testGetPartialReleaseReferences_Happy_Case(self): partial_releases = self.sampleReleaseBlobV3.getReferencedReleases() @@ -1636,11 +1578,9 @@ def testSchema3NoPartial(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -1667,11 +1607,9 @@ def testSchema3NoPartialBlock(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -1777,8 +1715,7 @@ def setUp(self): product="h", version="29.0", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "h0", "schema_version": 4, @@ -1791,16 +1728,14 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="h1", product="h", version="30.0", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "h1", "schema_version": 4, @@ -1813,12 +1748,10 @@ def setUp(self): } } } -""" - ), +"""), ) self.blobH2 = ReleaseBlobV4() - self.blobH2.loadJSON( - """ + self.blobH2.loadJSON(""" { "name": "h2", "schema_version": 4, @@ -1886,11 +1819,9 @@ def setUp(self): } } } -""" - ) +""") self.blobH3 = ReleaseBlobV4() - self.blobH3.loadJSON( - """ + self.blobH3.loadJSON(""" { "name": "h3", "schema_version": 4, @@ -1964,13 +1895,11 @@ def setUp(self): } } } -""" - ) +""") def testGetPartialReleaseReferences_Happy_Case(self): sample_release_blob_v4 = ReleaseBlobV4() - sample_release_blob_v4.loadJSON( - """ + sample_release_blob_v4.loadJSON(""" { "name": "sample", "schema_version": 4, @@ -2044,16 +1973,14 @@ def testGetPartialReleaseReferences_Happy_Case(self): } } } - """ - ) + """) partial_releases = sample_release_blob_v4.getReferencedReleases() self.assertTrue(5, len(partial_releases)) self.assertEqual(sorted(partial_releases), ["h0", "h1", "h2", "h3", "h4"]) def testGetPartialReleaseReferences_Empty_Partials_Case(self): sample_release_blob_v4 = ReleaseBlobV4() - sample_release_blob_v4.loadJSON( - """ + sample_release_blob_v4.loadJSON(""" { "name": "h1", "schema_version": 4, @@ -2066,15 +1993,13 @@ def testGetPartialReleaseReferences_Empty_Partials_Case(self): } } } - """ - ) + """) partial_releases = sample_release_blob_v4.getReferencedReleases() self.assertEqual(0, len(partial_releases)) def testGetPartialReleaseReferences_Empty_Locales_Case(self): sample_release_blob_v4 = ReleaseBlobV4() - sample_release_blob_v4.loadJSON( - """ + sample_release_blob_v4.loadJSON(""" { "name": "sample", "schema_version": 4, @@ -2133,8 +2058,7 @@ def testGetPartialReleaseReferences_Empty_Locales_Case(self): } } } - """ - ) + """) partial_releases = sample_release_blob_v4.getReferencedReleases() self.assertTrue(4, len(partial_releases)) self.assertEqual(sorted(partial_releases), ["h0", "h1", "h2", "h3"]) @@ -2263,11 +2187,9 @@ def testSchema4NoPartials(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -2293,11 +2215,9 @@ def testSchema4NoPartials(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -2323,11 +2243,9 @@ def testSchema4NoPartials(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -2354,11 +2272,9 @@ def testSchema4MismatchedLocalePartialsAndFileUrls(self): expected_header = """ """ - expected = [ - """ + expected = [""" -""" - ] +"""] expected_footer = "" expected = [x.strip() for x in expected] self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -2367,8 +2283,7 @@ def testSchema4MismatchedLocalePartialsAndFileUrls(self): def testConvertFromV3(self): v3Blob = ReleaseBlobV3() - v3Blob.loadJSON( - """ + v3Blob.loadJSON(""" { "name": "g2", "schema_version": 3, @@ -2394,8 +2309,7 @@ def testConvertFromV3(self): } } } -""" - ) +""") v4Blob = ReleaseBlobV4.fromV3(v3Blob) # Raises on error @@ -2415,8 +2329,7 @@ def testConvertFromV3(self): def testConvertFromV3Noop(self): v3Blob = ReleaseBlobV3() - v3Blob.loadJSON( - """ + v3Blob.loadJSON(""" { "name": "g2", "schema_version": 4, @@ -2449,8 +2362,7 @@ def testConvertFromV3Noop(self): } } } -""" - ) +""") v4Blob = ReleaseBlobV4.fromV3(v3Blob) # Raises on error @@ -2495,8 +2407,7 @@ def setUp(self): product="h", version="30.0", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "h1", "schema_version": 5, @@ -2509,12 +2420,10 @@ def setUp(self): } } } -""" - ), +"""), ) self.blobH2 = ReleaseBlobV5() - self.blobH2.loadJSON( - """ + self.blobH2.loadJSON(""" { "name": "h2", "schema_version": 5, @@ -2576,13 +2485,11 @@ def setUp(self): } } } -""" - ) +""") def testGetPartialReleaseReferences_Happy_Case(self): sample_release_blob_v5 = ReleaseBlobV5() - sample_release_blob_v5.loadJSON( - """ + sample_release_blob_v5.loadJSON(""" { "name": "sample", "schema_version": 5, @@ -2644,16 +2551,14 @@ def testGetPartialReleaseReferences_Happy_Case(self): } } } - """ - ) + """) partial_releases = sample_release_blob_v5.getReferencedReleases() self.assertTrue(2, len(partial_releases)) self.assertEqual(sorted(partial_releases), ["h1", "h2"]) def testGetPartialReleaseReferences_Empty_fileUrls_Case(self): sample_release_blob_v5 = ReleaseBlobV5() - sample_release_blob_v5.loadJSON( - """ + sample_release_blob_v5.loadJSON(""" { "name": "h2", "schema_version": 5, @@ -2735,8 +2640,7 @@ def testGetPartialReleaseReferences_Empty_fileUrls_Case(self): } } } - """ - ) + """) partial_releases = sample_release_blob_v5.getReferencedReleases() self.assertTrue(3, len(partial_releases)) self.assertEqual(sorted(partial_releases), ["h1", "h2", "h3"]) @@ -2795,8 +2699,7 @@ def setUp(self): name="h1", product="h", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "h1", "schema_version": 6, @@ -2809,12 +2712,10 @@ def setUp(self): } } } -""" - ), +"""), ) self.blobH2 = ReleaseBlobV6() - self.blobH2.loadJSON( - """ + self.blobH2.loadJSON(""" { "name": "h2", "schema_version": 6, @@ -2873,13 +2774,11 @@ def setUp(self): } } } -""" - ) +""") def testGetPartialReleaseReferences_Happy_Case(self): sample_release_blob_v6 = ReleaseBlobV6() - sample_release_blob_v6.loadJSON( - """ + sample_release_blob_v6.loadJSON(""" { "name": "h2", "schema_version": 6, @@ -2938,16 +2837,14 @@ def testGetPartialReleaseReferences_Happy_Case(self): } } } - """ - ) + """) partial_releases = sample_release_blob_v6.getReferencedReleases() self.assertTrue(2, len(partial_releases)) self.assertEqual(sorted(partial_releases), ["h1", "h2"]) def testGetPartialReleaseReferences_Empty_Partials_Case(self): sample_release_blob_v6 = ReleaseBlobV6() - sample_release_blob_v6.loadJSON( - """{ + sample_release_blob_v6.loadJSON("""{ "name": "h1", "schema_version": 6, "platforms": { @@ -2959,8 +2856,7 @@ def testGetPartialReleaseReferences_Empty_Partials_Case(self): } } } - """ - ) + """) partial_releases = sample_release_blob_v6.getReferencedReleases() self.assertEqual(0, len(partial_releases)) @@ -3006,8 +2902,7 @@ def testSchema6OptionalAttributes(self): def testCheckFailForUnsuportedAttributes(self): self.blobH3 = ReleaseBlobV6() - self.blobH3.loadJSON( - """ + self.blobH3.loadJSON(""" { "name": "h3", "schema_version": 5, @@ -3069,8 +2964,7 @@ def testCheckFailForUnsuportedAttributes(self): } } } -""" - ) +""") self.assertRaises(BlobValidationError, self.blobH3.validate, "h", self.allowlistedDomains) @@ -3085,8 +2979,7 @@ def setUp(self): name="h1", product="h", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "h1", "schema_version": 8, @@ -3099,8 +2992,7 @@ def setUp(self): } } } -""" - ), +"""), ) self.blobH2 = ReleaseBlobV8() self.blobH2.loadJSON( @@ -3236,8 +3128,7 @@ def setUp(self): name="h1", product="h", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "h1", "schema_version": 9, @@ -3253,12 +3144,10 @@ def setUp(self): } } } -""" - ), +"""), ) self.blobH2 = ReleaseBlobV9() - self.blobH2.loadJSON( - """ + self.blobH2.loadJSON(""" { "name": "h2", "schema_version": 9, @@ -3362,8 +3251,7 @@ def setUp(self): } } } -""" - ) +""") def testWithoutActionsByLocale(self): updateQuery = { @@ -3517,8 +3405,7 @@ def testWithActions(self): def testDisableBITS(self): blob = ReleaseBlobV9() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "bbb", "schema_version": 9, @@ -3571,8 +3458,7 @@ def testDisableBITS(self): } } } -""" - ) +""") blob.validate("h", self.allowlistedDomains) updateQuery = { "product": "b", @@ -3594,8 +3480,7 @@ def testDisableBITS(self): def testDisableBITSFalseNotAllowed(self): blob = ReleaseBlobV9() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "bbb", "schema_version": 9, @@ -3648,14 +3533,12 @@ def testDisableBITSFalseNotAllowed(self): } } } -""" - ) +""") self.assertRaises(BlobValidationError, blob.validate, "h", self.allowlistedDomains) def testDisableBackgroundUpdates(self): blob = ReleaseBlobV9() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "bbb", "schema_version": 9, @@ -3708,8 +3591,7 @@ def testDisableBackgroundUpdates(self): } } } -""" - ) +""") blob.validate("h", self.allowlistedDomains) updateQuery = { "product": "b", @@ -3732,8 +3614,7 @@ def testDisableBackgroundUpdates(self): def testDisableBackgroundUpdatesFalseNotAllowed(self): blob = ReleaseBlobV9() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "bbb", "schema_version": 9, @@ -3786,8 +3667,7 @@ def testDisableBackgroundUpdatesFalseNotAllowed(self): } } } - """ - ) + """) self.assertRaises(BlobValidationError, blob.validate, "h", self.allowlistedDomains) @@ -3876,16 +3756,14 @@ def setUp(self): dbo.setDb("sqlite:///:memory:", releases_history_buckets={"*": "fake"}, releases_history_class=FakeGCSHistory) self.metadata.create_all(dbo.engine) self.blob = DesupportBlob() - self.blob.loadJSON( - """ + self.blob.loadJSON(""" { "name": "d1", "schema_version": 50, "detailsUrl": "http://moo.com/%locale%/cow/%version%/%os%", "displayVersion": "50.0" } -""" - ) +""") def testDesupport(self): updateQuery = {"locale": "", "version": "", "buildTarget": "Darwin_x86_64-gcc3-u-i386-x86_64"} @@ -3894,11 +3772,9 @@ def testDesupport(self): returned_footer = self.blob.getInnerFooterXML(updateQuery, "minor", self.allowlistedDomains, self.specialForceHosts) returned = [x.strip() for x in returned] expected_header = "" - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) diff --git a/tests/blobs/test_gmp.py b/tests/blobs/test_gmp.py index c69bb12423..3891a39658 100644 --- a/tests/blobs/test_gmp.py +++ b/tests/blobs/test_gmp.py @@ -11,8 +11,7 @@ def setUp(self): self.specialForceHosts = ["http://a.com"] self.allowlistedDomains = {"a.com": ("gg",), "boring.com": ("gg",)} self.blob = GMPBlobV1() - self.blob.loadJSON( - """ + self.blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -73,14 +72,12 @@ def setUp(self): } } } -""" - ) +""") def testValidateHashLength(self): blob = GMPBlobV1() blob.allowlistedDomains = {"boring.com": ("gg",)} - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "validName", "schema_version": 1000, @@ -98,8 +95,7 @@ def testValidateHashLength(self): } } } -""" - ) +""") self.assertRaisesRegex( ValueError, ("The hashValue length is different from the required length of 128 for sha512"), blob.validate, "gg", self.allowlistedDomains ) @@ -262,11 +258,9 @@ def testGMPUpdateSingleAddons(self): returned_footer = self.blob.getInnerFooterXML(updateQuery, "minor", self.allowlistedDomains, self.specialForceHosts) returned = [x.strip() for x in returned] expected_header = "" - expected = [ - """ + expected = [""" -""" - ] +"""] expected = [x.strip() for x in expected] expected_footer = "" self.assertEqual(returned_header.strip(), expected_header.strip()) @@ -361,8 +355,7 @@ def testGMPWithForbiddenDomainInMirror(self): def testContainsForbiddenDomain(self): blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -380,14 +373,12 @@ def testContainsForbiddenDomain(self): } } } -""" - ) +""") self.assertTrue(blob.containsForbiddenDomain("gg", self.allowlistedDomains)) def testContainsForbiddenDomainInMirror(self): blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -406,14 +397,12 @@ def testContainsForbiddenDomainInMirror(self): } } } -""" - ) +""") self.assertTrue(blob.containsForbiddenDomain("gg", self.allowlistedDomains)) def testDoesNotContainForbiddenDomain(self): blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -431,14 +420,12 @@ def testDoesNotContainForbiddenDomain(self): } } } -""" - ) +""") self.assertFalse(blob.containsForbiddenDomain("gg", self.allowlistedDomains)) def testDoesNotContainForbiddenDomainWithMirror(self): blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -457,47 +444,41 @@ def testDoesNotContainForbiddenDomainWithMirror(self): } } } -""" - ) +""") self.assertFalse(blob.containsForbiddenDomain("gg", self.allowlistedDomains)) def testGMPLayoutEmptyVendor(self): # Correct layout with empty vendors blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, "hashFunction": "SHA512", "vendors": {} } - """ - ) + """) blob.validate("gg", self.allowlistedDomains) def testGMPLayoutNoVendor(self): # Incorrect layout with no vendors blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, "hashFunction": "SHA512" } - """ - ) + """) self.assertRaises(Exception, blob.validate, "gg", self.allowlistedDomains) def testGMPLayoutTwoPlatforms(self): # Correct layout with one vendor and two platforms blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -519,16 +500,14 @@ def testGMPLayoutTwoPlatforms(self): } } } - """ - ) + """) blob.validate("gg", self.allowlistedDomains) def testGMPLayoutMissingVersion(self): # Incorrect layout with missing version for an vendor name blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -549,16 +528,14 @@ def testGMPLayoutMissingVersion(self): } } } - """ - ) + """) self.assertRaises(Exception, blob.validate, "gg", self.allowlistedDomains) def testGMPLayoutEmptyPlatforms(self): # Correct layout with empty platforms blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -570,16 +547,14 @@ def testGMPLayoutEmptyPlatforms(self): } } } - """ - ) + """) blob.validate("gg", self.allowlistedDomains) def testGMPLayoutEmptyPlatformName(self): # Incorrect layout with empty platform name blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -599,16 +574,14 @@ def testGMPLayoutEmptyPlatformName(self): } } } - """ - ) + """) self.assertRaises(Exception, blob.validate, "gg", self.allowlistedDomains) def testGMPLayoutNoFilesize(self): # Incorrect layout with missing filesize blob = GMPBlobV1() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -629,6 +602,5 @@ def testGMPLayoutNoFilesize(self): } } } - """ - ) + """) self.assertRaises(Exception, blob.validate, "gg", self.allowlistedDomains) diff --git a/tests/blobs/test_guardian.py b/tests/blobs/test_guardian.py index 0e9a7f3d12..ac6ac5634a 100644 --- a/tests/blobs/test_guardian.py +++ b/tests/blobs/test_guardian.py @@ -7,8 +7,7 @@ @pytest.fixture(scope="session") def guardianblob(): blob = GuardianBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "Guardian-1.0.0.0", "product": "Guardian", @@ -27,8 +26,7 @@ def guardianblob(): } } } -""" - ) +""") return blob diff --git a/tests/blobs/test_superblob.py b/tests/blobs/test_superblob.py index 635ce0bfca..3bedb17262 100644 --- a/tests/blobs/test_superblob.py +++ b/tests/blobs/test_superblob.py @@ -10,8 +10,7 @@ def setUp(self): self.specialForceHosts = ("http://a.com",) self.allowlistedDomains = {"a.com": ("b", "c", "e", "b2g", "response-a", "response-b", "s")} self.superblob_gmp = SuperBlob() - self.superblob_gmp.loadJSON( - """ + self.superblob_gmp.loadJSON(""" { "name": "GMPSuperblob", "schema_version": 1000, @@ -20,11 +19,9 @@ def setUp(self): "d" ] } -""" - ) +""") self.superblob_addon = SuperBlob() - self.superblob_addon.loadJSON( - """ + self.superblob_addon.loadJSON(""" { "name": "SystemAddOnsSuperblob", "schema_version": 1000, @@ -33,8 +30,7 @@ def setUp(self): "Pocket-2.0" ] } -""" - ) +""") def testGetResponseBlobs(self): blob_names_addon = self.superblob_addon.getResponseBlobs() diff --git a/tests/blobs/test_systemaddons.py b/tests/blobs/test_systemaddons.py index f8567be619..823b5ed405 100644 --- a/tests/blobs/test_systemaddons.py +++ b/tests/blobs/test_systemaddons.py @@ -10,8 +10,7 @@ def setUp(self): self.specialForceHosts = ["http://a.com"] self.allowlistedDomains = {"a.com": ("gg",), "boring.com": ("gg",)} self.blob1 = SystemAddonsBlob() - self.blob1.loadJSON( - """ + self.blob1.loadJSON(""" { "name": "fake", "schema_version": 5000, @@ -57,41 +56,34 @@ def setUp(self): } } } -""" - ) +""") self.blob2 = SystemAddonsBlob() - self.blob2.loadJSON( - """ + self.blob2.loadJSON(""" { "name": "fake", "schema_version": 5000, "hashFunction": "SHA512", "uninstall": true } -""" - ) +""") self.blob3 = SystemAddonsBlob() - self.blob3.loadJSON( - """ + self.blob3.loadJSON(""" { "name": "fake", "schema_version": 5000, "hashFunction": "SHA512", "uninstall": false } -""" - ) +""") self.empty_blob = SystemAddonsBlob() - self.empty_blob.loadJSON( - """ + self.empty_blob.loadJSON(""" { "name": "fake", "schema_version": 5000, "hashFunction": "SHA512", "addons": {} } -""" - ) +""") def testXML(self): updateQuery = { @@ -204,8 +196,7 @@ def testXMLNoAddonsNoUninstallBlob(self): def testContainsForbiddenDomain(self): blob = SystemAddonsBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -223,14 +214,12 @@ def testContainsForbiddenDomain(self): } } } -""" - ) +""") self.assertTrue(blob.containsForbiddenDomain("gg", self.allowlistedDomains)) def testDoesNotContainForbiddenDomain(self): blob = SystemAddonsBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 1000, @@ -248,63 +237,55 @@ def testDoesNotContainForbiddenDomain(self): } } } -""" - ) +""") self.assertFalse(blob.containsForbiddenDomain("gg", self.allowlistedDomains)) def testAddonLayoutEmptyAddons(self): # Correct layout with empty addons blob = SystemAddonsBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 5000, "hashFunction": "SHA512", "addons": {} } - """ - ) + """) blob.validate("gg", self.allowlistedDomains) def testAddonLayoutWithUninstall(self): # Correct layout with no addons, and with uninstall blob = SystemAddonsBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 5000, "hashFunction": "SHA512", "uninstall": false } - """ - ) + """) blob.validate("gg", self.allowlistedDomains) def testAddonLayoutNoAddonsNoUninstall(self): # Incorrect layout with no addons and no uninstall blob = SystemAddonsBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 5000, "hashFunction": "SHA512" } - """ - ) + """) self.assertRaises(Exception, blob.validate, "gg", self.allowlistedDomains) def testAddonLayoutTwoPlatforms(self): # Correct layout with one addon and two platforms blob = SystemAddonsBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 5000, @@ -325,16 +306,14 @@ def testAddonLayoutTwoPlatforms(self): } } } - """ - ) + """) blob.validate("gg", self.allowlistedDomains) def testAddonLayoutNoVersion(self): # Incorrect layout with missing version for an addon name blob = SystemAddonsBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 5000, @@ -354,16 +333,14 @@ def testAddonLayoutNoVersion(self): } } } - """ - ) + """) self.assertRaises(Exception, blob.validate, "gg", self.allowlistedDomains) def testAddonLayoutEmptyPlatforms(self): # Correct layout with empty platforms blob = SystemAddonsBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 5000, @@ -375,16 +352,14 @@ def testAddonLayoutEmptyPlatforms(self): } } } - """ - ) + """) blob.validate("gg", self.allowlistedDomains) def testAddonLayoutEmptyPlatformName(self): # Incorrect layout with empty platform name blob = SystemAddonsBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 5000, @@ -403,16 +378,14 @@ def testAddonLayoutEmptyPlatformName(self): } } } - """ - ) + """) self.assertRaises(Exception, blob.validate, "gg", self.allowlistedDomains) def testAddonLayoutNoFilesize(self): # Incorrect layout with missing filesize blob = SystemAddonsBlob() - blob.loadJSON( - """ + blob.loadJSON(""" { "name": "fake", "schema_version": 5000, @@ -432,6 +405,5 @@ def testAddonLayoutNoFilesize(self): } } } - """ - ) + """) self.assertRaises(Exception, blob.validate, "gg", self.allowlistedDomains) diff --git a/tests/test_AUS.py b/tests/test_AUS.py index b2434977d8..3dca5f7822 100644 --- a/tests/test_AUS.py +++ b/tests/test_AUS.py @@ -93,121 +93,121 @@ def se(*args, **kwargs): return (served_mapping, served_fallback, served_pinned, tested) def testThrottling100(self): - (served, _, _, tested) = self.random_aus_test(background_rate=100) + served, _, _, tested = self.random_aus_test(background_rate=100) self.assertEqual(served, 1) self.assertEqual(tested, 1) def testThrottling50(self): - (served, _, _, tested) = self.random_aus_test(background_rate=50) + served, _, _, tested = self.random_aus_test(background_rate=50) self.assertEqual(served, 50) self.assertEqual(tested, 100) def testThrottling25(self): - (served, _, _, tested) = self.random_aus_test(background_rate=25) + served, _, _, tested = self.random_aus_test(background_rate=25) self.assertEqual(served, 25) self.assertEqual(tested, 100) def testThrottlingZero(self): - (served, _, _, tested) = self.random_aus_test(background_rate=0) + served, _, _, tested = self.random_aus_test(background_rate=0) self.assertEqual(served, 0) self.assertEqual(tested, 100) def testThrottling25WithForcing(self): - (served, _, _, tested) = self.random_aus_test(background_rate=25, force=FORCE_MAIN_MAPPING) + served, _, _, tested = self.random_aus_test(background_rate=25, force=FORCE_MAIN_MAPPING) self.assertEqual(served, 1) self.assertEqual(tested, 1) def testThrottling25WithForcingFailure(self): - (served, fallback, _, tested) = self.random_aus_test(background_rate=25, force=FORCE_FALLBACK_MAPPING) + served, fallback, _, tested = self.random_aus_test(background_rate=25, force=FORCE_FALLBACK_MAPPING) self.assertEqual(served, 0) self.assertEqual(fallback, 0) self.assertEqual(tested, 1) def testThrottling100WithFallback(self): - (served_mapping, served_fallback, _, tested) = self.random_aus_test(background_rate=100, fallback=True) + served_mapping, served_fallback, _, tested = self.random_aus_test(background_rate=100, fallback=True) self.assertEqual(served_mapping, 1) self.assertEqual(served_fallback, 0) self.assertEqual(tested, 1) def testThrottling50WithFallback(self): - (served_mapping, served_fallback, _, tested) = self.random_aus_test(background_rate=50, fallback=True) + served_mapping, served_fallback, _, tested = self.random_aus_test(background_rate=50, fallback=True) self.assertEqual(served_mapping, 50) self.assertEqual(served_fallback, 50) self.assertEqual(tested, 100) def testThrottling25WithFallback(self): - (served_mapping, served_fallback, _, tested) = self.random_aus_test(background_rate=25, fallback=True) + served_mapping, served_fallback, _, tested = self.random_aus_test(background_rate=25, fallback=True) self.assertEqual(served_mapping, 25) self.assertEqual(served_fallback, 75) self.assertEqual(tested, 100) def testThrottlingZeroWithFallback(self): - (served_mapping, served_fallback, _, tested) = self.random_aus_test(background_rate=0, fallback=True) + served_mapping, served_fallback, _, tested = self.random_aus_test(background_rate=0, fallback=True) self.assertEqual(served_mapping, 0) self.assertEqual(served_fallback, 100) self.assertEqual(tested, 100) def testThrottling25WithForcingAndFallback(self): - (served_mapping, served_fallback, _, tested) = self.random_aus_test(background_rate=25, force=FORCE_MAIN_MAPPING, fallback=True) + served_mapping, served_fallback, _, tested = self.random_aus_test(background_rate=25, force=FORCE_MAIN_MAPPING, fallback=True) self.assertEqual(served_mapping, 1) self.assertEqual(served_fallback, 0) self.assertEqual(tested, 1) def testThrottling25WithForcingFailureAndFallback(self): - (served, fallback, _, tested) = self.random_aus_test(background_rate=25, force=FORCE_FALLBACK_MAPPING, fallback=True) + served, fallback, _, tested = self.random_aus_test(background_rate=25, force=FORCE_FALLBACK_MAPPING, fallback=True) self.assertEqual(served, 0) self.assertEqual(fallback, 1) self.assertEqual(tested, 1) def testPinningWithThrottling100(self): - (_, _, served_pinned, tested) = self.random_aus_test(background_rate=100, pin=True) + _, _, served_pinned, tested = self.random_aus_test(background_rate=100, pin=True) self.assertEqual(served_pinned, 1) self.assertEqual(tested, 1) def testPinningWithThrottling25WithForcing(self): - (_, _, served_pinned, tested) = self.random_aus_test(background_rate=25, force=FORCE_MAIN_MAPPING, pin=True) + _, _, served_pinned, tested = self.random_aus_test(background_rate=25, force=FORCE_MAIN_MAPPING, pin=True) self.assertEqual(served_pinned, 1) self.assertEqual(tested, 1) def testPinningWithThrottling100WithFallback(self): - (_, _, served_pinned, tested) = self.random_aus_test(background_rate=100, fallback=True, pin=True) + _, _, served_pinned, tested = self.random_aus_test(background_rate=100, fallback=True, pin=True) self.assertEqual(served_pinned, 1) self.assertEqual(tested, 1) def testPinningWithThrottling25WithFallback(self): - (_, _, served_pinned, tested) = self.random_aus_test(background_rate=25, fallback=True, pin=True) + _, _, served_pinned, tested = self.random_aus_test(background_rate=25, fallback=True, pin=True) self.assertEqual(served_pinned, 100) self.assertEqual(tested, 100) def testPinningWithThrottlingZeroWithFallback(self): - (_, _, served_pinned, tested) = self.random_aus_test(background_rate=0, fallback=True, pin=True) + _, _, served_pinned, tested = self.random_aus_test(background_rate=0, fallback=True, pin=True) self.assertEqual(served_pinned, 100) self.assertEqual(tested, 100) def testPinningWithThrottling25WithForcingAndFallback(self): - (_, _, served_pinned, tested) = self.random_aus_test(background_rate=25, force=FORCE_MAIN_MAPPING, fallback=True, pin=True) + _, _, served_pinned, tested = self.random_aus_test(background_rate=25, force=FORCE_MAIN_MAPPING, fallback=True, pin=True) self.assertEqual(served_pinned, 1) self.assertEqual(tested, 1) def testPinningWithThrottling25WithForcingFailureAndFallback(self): - (_, _, served_pinned, tested) = self.random_aus_test(background_rate=25, force=FORCE_FALLBACK_MAPPING, fallback=True, pin=True) + _, _, served_pinned, tested = self.random_aus_test(background_rate=25, force=FORCE_FALLBACK_MAPPING, fallback=True, pin=True) self.assertEqual(served_pinned, 1) self.assertEqual(tested, 1) diff --git a/tests/test_db.py b/tests/test_db.py index 7830a289ba..fcf9d77aaf 100644 --- a/tests/test_db.py +++ b/tests/test_db.py @@ -3915,8 +3915,7 @@ async def testInsertCreatesCorrectHistory(self): async def testUpdateCreatesCorrectHistory(self): await self.release_assets.async_update( where={"name": "Firefox-60.0-build1", "path": ".platforms.Linux_x86_64-gcc3.locales.en-US"}, - what={ - "data": """{ + what={"data": """{ "appVersion": "60.0", "buildID": "20200827144429", "completes": [ @@ -3934,8 +3933,7 @@ async def testUpdateCreatesCorrectHistory(self): "hashValue": "311324ceacfb8450a948da6b2176a1103d8a4eb716381951fb197b4414097efee9a91c9fd4fbcb797dd1e80fe69b8e2410a945602d5dfd0a5c485a004c52fbda" } ] -}""" - }, +}"""}, changed_by="bob", old_data_version=1, ) @@ -4388,8 +4386,7 @@ def setUp(self): name="a", product="a", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "a", "schema_version": 1, @@ -4413,22 +4410,19 @@ def setUp(self): } } } -""" - ), +"""), ) self.releases.t.insert().execute( name="b", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "b", "hashFunction": "sha512", "schema_version": 1 } -""" - ), +"""), ) self.db.permissions.t.insert().execute(permission="admin", username="bill", data_version=1) self.db.permissions.t.insert().execute(permission="admin", username="me", data_version=1) @@ -4471,8 +4465,7 @@ def testAddLocaleToRelease(self): data = {"complete": {"filesize": 1, "from": "*", "hashValue": "abc"}} self.releases.addLocaleToRelease(name="a", product="a", platform="p", locale="c", data=data, old_data_version=1, changed_by="bill") ret = select([self.releases.data]).where(self.releases.name == "a").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "a", "schema_version": 1, @@ -4503,16 +4496,14 @@ def testAddLocaleToRelease(self): } } } -""" - ) +""") self.assertEqual(ret, expected) def testAddLocaleToReleaseWithAlias(self): data = {"complete": {"filesize": 123, "from": "*", "hashValue": "abc"}} self.releases.addLocaleToRelease(name="a", product="a", platform="p", locale="c", data=data, old_data_version=1, changed_by="bill", alias=["p4"]) ret = select([self.releases.data]).where(self.releases.name == "a").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "a", "hashFunction": "sha512", @@ -4546,16 +4537,14 @@ def testAddLocaleToReleaseWithAlias(self): } } } -""" - ) +""") self.assertEqual(ret, expected) def testAddLocaleToReleaseOverride(self): data = {"complete": {"filesize": 123, "from": "*", "hashValue": "789"}} self.releases.addLocaleToRelease(name="a", product="a", platform="p", locale="l", data=data, old_data_version=1, changed_by="bill") ret = select([self.releases.data]).where(self.releases.name == "a").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "a", "hashFunction": "sha512", @@ -4579,16 +4568,14 @@ def testAddLocaleToReleaseOverride(self): } } } -""" - ) +""") self.assertEqual(ret, expected) def testAddLocaleToReleasePlatformsDoesntExist(self): data = {"complete": {"filesize": 432, "from": "*", "hashValue": "abc"}} self.releases.addLocaleToRelease(name="b", product="b", platform="q", locale="l", data=data, old_data_version=1, changed_by="bill") ret = select([self.releases.data]).where(self.releases.name == "b").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "b", "hashFunction": "sha512", @@ -4607,16 +4594,14 @@ def testAddLocaleToReleasePlatformsDoesntExist(self): } } } -""" - ) +""") self.assertEqual(ret, expected) def testAddLocaleToReleaseNoLocales(self): data = {"complete": {"filesize": 432, "from": "*", "hashValue": "abc"}} self.releases.addLocaleToRelease(name="a", product="a", platform="p3", locale="l", data=data, old_data_version=1, changed_by="bill") ret = select([self.releases.data]).where(self.releases.name == "a").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "a", "hashFunction": "sha512", @@ -4649,16 +4634,14 @@ def testAddLocaleToReleaseNoLocales(self): } } } -""" - ) +""") self.assertEqual(ret, expected) def testAddLocaleToReleaseSecondPlatform(self): data = {"complete": {"filesize": 324, "from": "*", "hashValue": "abc"}} self.releases.addLocaleToRelease(name="a", product="a", platform="q", locale="l", data=data, old_data_version=1, changed_by="bill") ret = select([self.releases.data]).where(self.releases.name == "a").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "a", "hashFunction": "sha512", @@ -4693,16 +4676,14 @@ def testAddLocaleToReleaseSecondPlatform(self): } } } -""" - ) +""") self.assertEqual(ret, expected) def testAddLocaleToReleaseResolveAlias(self): data = {"complete": {"filesize": 444, "from": "*", "hashValue": "abc"}} self.releases.addLocaleToRelease(name="a", product="a", platform="p2", locale="j", data=data, old_data_version=1, changed_by="bill") ret = select([self.releases.data]).where(self.releases.name == "a").execute().fetchone()[0] - expected = createBlob( - """ + expected = createBlob(""" { "name": "a", "hashFunction": "sha512", @@ -4733,8 +4714,7 @@ def testAddLocaleToReleaseResolveAlias(self): } } } -""" - ) +""") self.assertEqual(ret, expected) def testAddLocaleWhenReadOnly(self): @@ -4745,8 +4725,7 @@ def testAddLocaleWhenReadOnly(self): ) def testAddMergeableOutdatedData(self): - ancestor_blob = createBlob( - """ + ancestor_blob = createBlob(""" { "name": "p", "schema_version": 1, @@ -4770,10 +4749,8 @@ def testAddMergeableOutdatedData(self): } } } -""" - ) - blob1 = createBlob( - """ +""") + blob1 = createBlob(""" { "name": "p", "schema_version": 1, @@ -4804,10 +4781,8 @@ def testAddMergeableOutdatedData(self): } } } -""" - ) - blob2 = createBlob( - """ +""") + blob2 = createBlob(""" { "name": "p", "schema_version": 1, @@ -4838,10 +4813,8 @@ def testAddMergeableOutdatedData(self): } } } -""" - ) - result_blob = createBlob( - """ +""") + result_blob = createBlob(""" { "name": "p", "schema_version": 1, @@ -4879,8 +4852,7 @@ def testAddMergeableOutdatedData(self): } } } -""" - ) +""") with self.db.begin() as trans: self.releases.insert(changed_by="bill", name="p", product="z", data=ancestor_blob, transaction=trans) self.releases.update({"name": "p"}, {"product": "z", "data": blob1}, changed_by="bill", old_data_version=1, transaction=trans) @@ -4895,8 +4867,7 @@ def testAddMergeableOutdatedData(self): self.assertEqual(json.loads(history_entries[3]), result_blob) def testAddMergeableWithChangesToList(self): - ancestor_blob = createBlob( - """ + ancestor_blob = createBlob(""" { "name": "release4", "schema_version": 4, @@ -4924,10 +4895,8 @@ def testAddMergeableWithChangesToList(self): } } } -""" - ) - blob1 = createBlob( - """ +""") + blob1 = createBlob(""" { "name": "release4", "schema_version": 4, @@ -4960,10 +4929,8 @@ def testAddMergeableWithChangesToList(self): } } } -""" - ) - blob2 = createBlob( - """ +""") + blob2 = createBlob(""" { "name": "release4", "schema_version": 4, @@ -4996,10 +4963,8 @@ def testAddMergeableWithChangesToList(self): } } } -""" - ) - result_blob = createBlob( - """ +""") + result_blob = createBlob(""" { "name": "release4", "schema_version": 4, @@ -5037,8 +5002,7 @@ def testAddMergeableWithChangesToList(self): } } } -""" - ) +""") with self.db.begin() as trans: self.releases.insert(changed_by="bill", name="release4", product="z", data=ancestor_blob, transaction=trans) self.releases.update({"name": "release4"}, {"product": "z", "data": blob1}, changed_by="bill", old_data_version=1, transaction=trans) @@ -5053,8 +5017,7 @@ def testAddMergeableWithChangesToList(self): self.assertEqual(json.loads(history_entries[3]), result_blob) def testAddConflictingOutdatedData(self): - ancestor_blob = createBlob( - """ + ancestor_blob = createBlob(""" { "name": "p", "schema_version": 1, @@ -5078,10 +5041,8 @@ def testAddConflictingOutdatedData(self): } } } -""" - ) - blob1 = createBlob( - """ +""") + blob1 = createBlob(""" { "name": "p", "schema_version": 1, @@ -5112,10 +5073,8 @@ def testAddConflictingOutdatedData(self): } } } -""" - ) - blob2 = createBlob( - """ +""") + blob2 = createBlob(""" { "name": "p", "schema_version": 1, @@ -5146,8 +5105,7 @@ def testAddConflictingOutdatedData(self): } } } -""" - ) +""") with self.db.begin() as trans: self.releases.insert(changed_by="bill", name="p", product="z", data=ancestor_blob, transaction=trans) self.releases.update({"name": "p"}, {"product": "z", "data": blob1}, changed_by="bill", old_data_version=1, transaction=trans) @@ -5167,8 +5125,7 @@ def testAddConflictingOutdatedData(self): self.assertEqual(json.loads(history_entries[2]), blob1) def testAddLocaleToReleaseDoesMerging(self): - ancestor_blob = createBlob( - """ + ancestor_blob = createBlob(""" { "name": "release4", "schema_version": 4, @@ -5197,10 +5154,8 @@ def testAddLocaleToReleaseDoesMerging(self): } } } -""" - ) - result_blob = createBlob( - """ +""") + result_blob = createBlob(""" { "name": "release4", "schema_version": 4, @@ -5239,8 +5194,7 @@ def testAddLocaleToReleaseDoesMerging(self): } } } -""" - ) +""") with self.db.begin() as trans: self.releases.insert(changed_by="bill", name="release4", product="z", data=ancestor_blob, transaction=trans) self.releases.addLocaleToRelease( diff --git a/tests/web/api/base.py b/tests/web/api/base.py index f6ae108930..35763ebfbf 100644 --- a/tests/web/api/base.py +++ b/tests/web/api/base.py @@ -33,8 +33,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="Fennec.55.0a1", product="Fennec", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Fennec.55.0a1", "schema_version": 1, @@ -65,8 +64,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( rule_id=2, priority=90, backgroundRate=100, mapping="Firefox.55.0a1", update_type="minor", product="Firefox", instructionSet="SSE", data_version=1 @@ -75,8 +73,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="Firefox.55.0a1", product="Firefox", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Firefox.55.0a1", "schema_version": 1, @@ -100,8 +97,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(rule_id=3, priority=90, backgroundRate=0, mapping="q", update_type="minor", product="q", data_version=3) dbo.rules.history.t.insert().execute( @@ -114,8 +110,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="q", product="q", data_version=2, - data=createBlob( - """ + data=createBlob(""" { "name": "q", "schema_version": 1, @@ -138,8 +133,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( diff --git a/tests/web/test_client.py b/tests/web/test_client.py index 071fa5bcf7..09c2586524 100644 --- a/tests/web/test_client.py +++ b/tests/web/test_client.py @@ -135,15 +135,13 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe self.app.config["VERSION_FILE"] = self.version_file self.app.config["CONTENT_SIGNATURE_PRODUCTS"] = ["gmp"] with open(self.version_file, "w+") as f: - f.write( - """ + f.write(""" { "source":"https://github.com/mozilla-releng/balrog", "version":"1.0", "commit":"abcdef123456" } -""" - ) +""") dbo.setDb("sqlite:///:memory:") self.metadata.create_all(dbo.engine) dbo.setDomainAllowlist(self.app.config["ALLOWLISTED_DOMAINS"]) @@ -154,8 +152,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="b", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "b", "schema_version": 1, @@ -186,8 +183,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=90, backgroundRate=100, mapping="s", update_type="minor", product="s", instructionSet="SSE", data_version=1) @@ -195,8 +191,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="s", product="s", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "s", "schema_version": 1, @@ -219,16 +214,14 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=90, backgroundRate=0, mapping="q", update_type="minor", product="q", fallbackMapping="fallback", data_version=1) dbo.releases.t.insert().execute( name="q", product="q", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "q", "schema_version": 1, @@ -251,15 +244,13 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="fallback", product="q", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "fallback", "schema_version": 1, @@ -282,8 +273,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( rule_id=42024, priority=90, backgroundRate=100, mapping="c", update_type="minor", product="c", distribution="default", data_version=1 @@ -292,8 +282,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="c", product="c", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "c", "schema_version": 1, @@ -316,8 +305,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( priority=90, @@ -332,8 +320,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="distTest", product="distTest", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "distTest", "schema_version": 1, @@ -356,8 +343,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=80, backgroundRate=100, mapping="c2", update_type="minor", product="c", data_version=1) @@ -365,8 +351,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="c2", product="c", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "c2", "schema_version": 1, @@ -389,16 +374,14 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=90, backgroundRate=100, mapping="d", update_type="minor", product="d", data_version=1) dbo.releases.t.insert().execute( name="d", product="d", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "d", "schema_version": 1, @@ -421,8 +404,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=90, backgroundRate=0, mapping="e", update_type="minor", product="e", data_version=1) @@ -430,8 +412,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="e", product="e", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "e", "schema_version": 1, @@ -452,8 +433,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( @@ -467,8 +447,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="f", product="f", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "f", "schema_version": 1, @@ -491,8 +470,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=200, backgroundRate=100, mapping="gmp", update_type="minor", product="gmp", data_version=1) @@ -510,36 +488,31 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="gmp-with-one-response-product", product="gmp-with-one-response-product", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "superblob", "schema_version": 4000, "products": ["response-a"] } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="gmp", product="gmp", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "superblob", "schema_version": 4000, "products": ["response-a", "response-b"] } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="response-a", product="response-a", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "response-a", "schema_version": 1, @@ -574,15 +547,13 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="response-b", product="response-b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "response-b", "schema_version": 1, @@ -604,8 +575,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( priority=180, backgroundRate=100, mapping="systemaddons-uninstall", update_type="minor", product="systemaddons-uninstall", data_version=1 @@ -614,24 +584,21 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="systemaddons-uninstall", product="systemaddons-uninstall", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "fake", "schema_version": 5000, "hashFunction": "SHA512", "uninstall": true } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=180, backgroundRate=100, mapping="systemaddons", update_type="minor", product="systemaddons", data_version=1) dbo.releases.t.insert().execute( name="systemaddons", product="systemaddons", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "fake", "schema_version": 5000, @@ -650,8 +617,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( @@ -666,8 +632,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="product_that_should_not_be_updated-1.1", product="product_that_should_not_be_updated", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "product_that_should_not_be_updated-1.1", "schema_version": 1, @@ -690,8 +655,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( @@ -706,8 +670,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="product_that_should_not_be_updated-2.0", product="product_that_should_not_be_updated", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "product_that_should_not_be_updated-2.0", "schema_version": 1, @@ -730,8 +693,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( priority=200, @@ -762,50 +724,43 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe name="superblobaddon-with-one-response-blob", product="superblobaddon-with-one-response-blob", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "superblobaddon", "schema_version": 4000, "blobs": ["responseblob-a"] } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="superblobaddon-with-multiple-response-blob", product="superblobaddon-with-multiple-response-blob", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "superblobaddon", "schema_version": 4000, "blobs": ["responseblob-a", "responseblob-b"] } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="superblobaddon-with-multiple-response-blob-glob", product="superblobaddon-with-multiple-response-blob-glob", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "superblobaddon", "schema_version": 4000, "blobs": ["responseblob-a", "responseblob-b"] } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="responseblob-a", product="responseblob-a", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "responseblob-a", "schema_version": 5000, @@ -846,15 +801,13 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="responseblob-b", product="responseblob-b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "responseblob-b", "schema_version": 5000, @@ -874,8 +827,7 @@ def setup(self, insert_release, firefox_54_0_1_build1, firefox_56_0_build1, supe } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( priority=100, product="Firefox", channel="release", mapping="Firefox-56.0-build1", backgroundRate=100, update_type="minor", data_version=1 @@ -1865,8 +1817,7 @@ def setUp(self): name="a", product="a", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "a", "schema_version": 1, @@ -1889,16 +1840,14 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=90, backgroundRate=100, mapping="b", update_type="minor", product="b", mig64=True, data_version=1) dbo.releases.t.insert().execute( name="b", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "b", "schema_version": 1, @@ -1921,16 +1870,14 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=90, backgroundRate=100, mapping="c", update_type="minor", product="c", mig64=False, data_version=1) dbo.releases.t.insert().execute( name="c", product="c", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "c", "schema_version": 1, @@ -1953,8 +1900,7 @@ def setUp(self): } } } -""" - ), +"""), ) def testRuleFalseQueryNull(self): @@ -2027,8 +1973,7 @@ def setUp(self): name="a", product="a", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "a", "schema_version": 1, @@ -2051,16 +1996,14 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=90, backgroundRate=100, mapping="b", update_type="minor", product="b", jaws=True, data_version=1) dbo.releases.t.insert().execute( name="b", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "b", "schema_version": 1, @@ -2083,16 +2026,14 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.rules.t.insert().execute(priority=90, backgroundRate=100, mapping="c", update_type="minor", product="c", jaws=False, data_version=1) dbo.releases.t.insert().execute( name="c", product="c", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "c", "schema_version": 1, @@ -2115,8 +2056,7 @@ def setUp(self): } } } -""" - ), +"""), ) def testRuleFalseQueryNull(self): @@ -2427,8 +2367,7 @@ def setUp(self): name="Firefox-mozilla-central-nightly-latest", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Firefox-mozilla-central-nightly-latest", "schema_version": 1, @@ -2451,8 +2390,7 @@ def setUp(self): } } } -""" - ), +"""), ) def testGoodNightly(self): @@ -2495,8 +2433,7 @@ def setUp(self): name="Firefox-mozilla-central-nightly-1", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Firefox-mozilla-central-nightly-1", "schema_version": 1, @@ -2519,16 +2456,14 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.pinnable_releases.t.insert().execute(data_version=1, product="b", channel="c", version="2.0.", mapping="Firefox-mozilla-central-nightly-2") dbo.releases.t.insert().execute( name="Firefox-mozilla-central-nightly-2", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Firefox-mozilla-central-nightly-2", "schema_version": 1, @@ -2551,16 +2486,14 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.pinnable_releases.t.insert().execute(data_version=1, product="b", channel="c", version="2.1.", mapping="Firefox-mozilla-central-nightly-2-1") dbo.releases.t.insert().execute( name="Firefox-mozilla-central-nightly-2-1", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Firefox-mozilla-central-nightly-2-1", "schema_version": 1, @@ -2583,16 +2516,14 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.pinnable_releases.t.insert().execute(data_version=1, product="b", channel="c", version="2.2.", mapping="Firefox-mozilla-central-nightly-2-2") dbo.releases.t.insert().execute( name="Firefox-mozilla-central-nightly-2-2", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Firefox-mozilla-central-nightly-2-2", "schema_version": 1, @@ -2615,8 +2546,7 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.pinnable_releases.t.insert().execute(data_version=1, product="b", channel="c", version="2.", mapping="Firefox-mozilla-central-nightly-2-3") dbo.pinnable_releases.t.insert().execute(data_version=1, product="b", channel="c", version="2.3.", mapping="Firefox-mozilla-central-nightly-2-3") @@ -2624,8 +2554,7 @@ def setUp(self): name="Firefox-mozilla-central-nightly-2-3", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Firefox-mozilla-central-nightly-2-3", "schema_version": 1, @@ -2648,8 +2577,7 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( priority=200, backgroundRate=100, mapping="Firefox-mozilla-central-nightly-3", update_type="minor", product="b", data_version=1, version="<3.0" @@ -2660,8 +2588,7 @@ def setUp(self): name="Firefox-mozilla-central-nightly-3", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Firefox-mozilla-central-nightly-3", "schema_version": 1, @@ -2684,8 +2611,7 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.pinnable_releases.t.insert().execute(data_version=1, product="b", channel="c", version="4.", mapping="Firefox-mozilla-central-nightly-4") dbo.pinnable_releases.t.insert().execute(data_version=1, product="b", channel="c", version="4.0.", mapping="Firefox-mozilla-central-nightly-4") @@ -2693,8 +2619,7 @@ def setUp(self): name="Firefox-mozilla-central-nightly-4", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Firefox-mozilla-central-nightly-4", "schema_version": 1, @@ -2717,8 +2642,7 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( priority=90, backgroundRate=100, mapping="Firefox-mozilla-central-nightly-5", update_type="minor", product="b", data_version=1 @@ -2729,8 +2653,7 @@ def setUp(self): name="Firefox-mozilla-central-nightly-5", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Firefox-mozilla-central-nightly-5", "schema_version": 1, @@ -2753,23 +2676,20 @@ def setUp(self): } } } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="desupport", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "desupport", "schema_version": 50, "detailsUrl": "http://example.com/desupport", "displayVersion": "1" } -""" - ), +"""), ) dbo.rules.t.insert().execute( priority=100, backgroundRate=100, mapping="desupport", update_type="minor", product="b", data_version=1, osVersion="obsolete" diff --git a/tests/web/test_json.py b/tests/web/test_json.py index d87e55b21f..b85d9a9e87 100644 --- a/tests/web/test_json.py +++ b/tests/web/test_json.py @@ -47,8 +47,7 @@ def guardian_db(): name="Guardian-Evil-1.0.0.0", product="Guardian", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Guardian-Evil-1.0.0.0", "product": "Guardian", @@ -63,8 +62,7 @@ def guardian_db(): } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( priority=150, @@ -90,8 +88,7 @@ def guardian_db(): name="Guardian-0.5.0.0", product="Guardian", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Guardian-0.5.0.0", "product": "Guardian", @@ -110,15 +107,13 @@ def guardian_db(): } } } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="Guardian-0.6.0.0", product="Guardian", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Guardian-0.6.0.0", "product": "Guardian", @@ -137,15 +132,13 @@ def guardian_db(): } } } -""" - ), +"""), ) dbo.releases.t.insert().execute( name="Guardian-1.0.0.0", product="Guardian", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "Guardian-1.0.0.0", "product": "Guardian", @@ -164,8 +157,7 @@ def guardian_db(): } } } -""" - ), +"""), ) dbo.rules.t.insert().execute( priority=120, @@ -233,8 +225,7 @@ def guardian_db(): name="b", product="b", data_version=1, - data=createBlob( - """ + data=createBlob(""" { "name": "b", "schema_version": 1, @@ -265,8 +256,7 @@ def guardian_db(): } } } -""" - ), +"""), ) diff --git a/uv.lock b/uv.lock index 4214f7e422..d4ce9e7d35 100644 --- a/uv.lock +++ b/uv.lock @@ -315,7 +315,7 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ - { name = "black", specifier = "<26.1.0" }, + { name = "black" }, { name = "coverage" }, { name = "coveralls" }, { name = "fakeredis" }, @@ -384,7 +384,7 @@ dev = [ [[package]] name = "black" -version = "25.12.0" +version = "26.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -394,19 +394,19 @@ dependencies = [ { name = "platformdirs" }, { name = "pytokens" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c4/d9/07b458a3f1c525ac392b5edc6b191ff140b596f9d77092429417a54e249d/black-25.12.0.tar.gz", hash = "sha256:8d3dd9cea14bff7ddc0eb243c811cdb1a011ebb4800a5f0335a01a68654796a7", size = 659264, upload-time = "2025-12-08T01:40:52.501Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/52/c551e36bc95495d2aa1a37d50566267aa47608c81a53f91daa809e03293f/black-25.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a05ddeb656534c3e27a05a29196c962877c83fa5503db89e68857d1161ad08a5", size = 1923809, upload-time = "2025-12-08T01:46:55.126Z" }, - { url = "https://files.pythonhosted.org/packages/a0/f7/aac9b014140ee56d247e707af8db0aae2e9efc28d4a8aba92d0abd7ae9d1/black-25.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9ec77439ef3e34896995503865a85732c94396edcc739f302c5673a2315e1e7f", size = 1742384, upload-time = "2025-12-08T01:49:37.022Z" }, - { url = "https://files.pythonhosted.org/packages/74/98/38aaa018b2ab06a863974c12b14a6266badc192b20603a81b738c47e902e/black-25.12.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e509c858adf63aa61d908061b52e580c40eae0dfa72415fa47ac01b12e29baf", size = 1798761, upload-time = "2025-12-08T01:46:05.386Z" }, - { url = "https://files.pythonhosted.org/packages/16/3a/a8ac542125f61574a3f015b521ca83b47321ed19bb63fe6d7560f348bfe1/black-25.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:252678f07f5bac4ff0d0e9b261fbb029fa530cfa206d0a636a34ab445ef8ca9d", size = 1429180, upload-time = "2025-12-08T01:45:34.903Z" }, - { url = "https://files.pythonhosted.org/packages/e6/2d/bdc466a3db9145e946762d52cd55b1385509d9f9004fec1c97bdc8debbfb/black-25.12.0-cp313-cp313-win_arm64.whl", hash = "sha256:bc5b1c09fe3c931ddd20ee548511c64ebf964ada7e6f0763d443947fd1c603ce", size = 1239350, upload-time = "2025-12-08T01:46:09.458Z" }, - { url = "https://files.pythonhosted.org/packages/35/46/1d8f2542210c502e2ae1060b2e09e47af6a5e5963cb78e22ec1a11170b28/black-25.12.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:0a0953b134f9335c2434864a643c842c44fba562155c738a2a37a4d61f00cad5", size = 1917015, upload-time = "2025-12-08T01:53:27.987Z" }, - { url = "https://files.pythonhosted.org/packages/41/37/68accadf977672beb8e2c64e080f568c74159c1aaa6414b4cd2aef2d7906/black-25.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2355bbb6c3b76062870942d8cc450d4f8ac71f9c93c40122762c8784df49543f", size = 1741830, upload-time = "2025-12-08T01:54:36.861Z" }, - { url = "https://files.pythonhosted.org/packages/ac/76/03608a9d8f0faad47a3af3a3c8c53af3367f6c0dd2d23a84710456c7ac56/black-25.12.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9678bd991cc793e81d19aeeae57966ee02909877cb65838ccffef24c3ebac08f", size = 1791450, upload-time = "2025-12-08T01:44:52.581Z" }, - { url = "https://files.pythonhosted.org/packages/06/99/b2a4bd7dfaea7964974f947e1c76d6886d65fe5d24f687df2d85406b2609/black-25.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:97596189949a8aad13ad12fcbb4ae89330039b96ad6742e6f6b45e75ad5cfd83", size = 1452042, upload-time = "2025-12-08T01:46:13.188Z" }, - { url = "https://files.pythonhosted.org/packages/b2/7c/d9825de75ae5dd7795d007681b752275ea85a1c5d83269b4b9c754c2aaab/black-25.12.0-cp314-cp314-win_arm64.whl", hash = "sha256:778285d9ea197f34704e3791ea9404cd6d07595745907dd2ce3da7a13627b29b", size = 1267446, upload-time = "2025-12-08T01:46:14.497Z" }, - { url = "https://files.pythonhosted.org/packages/68/11/21331aed19145a952ad28fca2756a1433ee9308079bd03bd898e903a2e53/black-25.12.0-py3-none-any.whl", hash = "sha256:48ceb36c16dbc84062740049eef990bb2ce07598272e673c17d1a7720c71c828", size = 206191, upload-time = "2025-12-08T01:40:50.963Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/e1/c5/61175d618685d42b005847464b8fb4743a67b1b8fdb75e50e5a96c31a27a/black-26.3.1.tar.gz", hash = "sha256:2c50f5063a9641c7eed7795014ba37b0f5fa227f3d408b968936e24bc0566b07", size = 666155, upload-time = "2026-03-12T03:36:03.593Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/77/5728052a3c0450c53d9bb3945c4c46b91baa62b2cafab6801411b6271e45/black-26.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:855822d90f884905362f602880ed8b5df1b7e3ee7d0db2502d4388a954cc8c54", size = 1895034, upload-time = "2026-03-12T03:40:21.813Z" }, + { url = "https://files.pythonhosted.org/packages/52/73/7cae55fdfdfbe9d19e9a8d25d145018965fe2079fa908101c3733b0c55a0/black-26.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8a33d657f3276328ce00e4d37fe70361e1ec7614da5d7b6e78de5426cb56332f", size = 1718503, upload-time = "2026-03-12T03:40:23.666Z" }, + { url = "https://files.pythonhosted.org/packages/e1/87/af89ad449e8254fdbc74654e6467e3c9381b61472cc532ee350d28cfdafb/black-26.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1cd08e99d2f9317292a311dfe578fd2a24b15dbce97792f9c4d752275c1fa56", size = 1793557, upload-time = "2026-03-12T03:40:25.497Z" }, + { url = "https://files.pythonhosted.org/packages/43/10/d6c06a791d8124b843bf325ab4ac7d2f5b98731dff84d6064eafd687ded1/black-26.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:c7e72339f841b5a237ff14f7d3880ddd0fc7f98a1199e8c4327f9a4f478c1839", size = 1422766, upload-time = "2026-03-12T03:40:27.14Z" }, + { url = "https://files.pythonhosted.org/packages/59/4f/40a582c015f2d841ac24fed6390bd68f0fc896069ff3a886317959c9daf8/black-26.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:afc622538b430aa4c8c853f7f63bc582b3b8030fd8c80b70fb5fa5b834e575c2", size = 1232140, upload-time = "2026-03-12T03:40:28.882Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/e36e27c9cebc1311b7579210df6f1c86e50f2d7143ae4fcf8a5017dc8809/black-26.3.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2d6bfaf7fd0993b420bed691f20f9492d53ce9a2bcccea4b797d34e947318a78", size = 1889234, upload-time = "2026-03-12T03:40:30.964Z" }, + { url = "https://files.pythonhosted.org/packages/0e/7b/9871acf393f64a5fa33668c19350ca87177b181f44bb3d0c33b2d534f22c/black-26.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f89f2ab047c76a9c03f78d0d66ca519e389519902fa27e7a91117ef7611c0568", size = 1720522, upload-time = "2026-03-12T03:40:32.346Z" }, + { url = "https://files.pythonhosted.org/packages/03/87/e766c7f2e90c07fb7586cc787c9ae6462b1eedab390191f2b7fc7f6170a9/black-26.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b07fc0dab849d24a80a29cfab8d8a19187d1c4685d8a5e6385a5ce323c1f015f", size = 1787824, upload-time = "2026-03-12T03:40:33.636Z" }, + { url = "https://files.pythonhosted.org/packages/ac/94/2424338fb2d1875e9e83eed4c8e9c67f6905ec25afd826a911aea2b02535/black-26.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:0126ae5b7c09957da2bdbd91a9ba1207453feada9e9fe51992848658c6c8e01c", size = 1445855, upload-time = "2026-03-12T03:40:35.442Z" }, + { url = "https://files.pythonhosted.org/packages/86/43/0c3338bd928afb8ee7471f1a4eec3bdbe2245ccb4a646092a222e8669840/black-26.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:92c0ec1f2cc149551a2b7b47efc32c866406b6891b0ee4625e95967c8f4acfb1", size = 1258109, upload-time = "2026-03-12T03:40:36.832Z" }, + { url = "https://files.pythonhosted.org/packages/8e/0d/52d98722666d6fc6c3dd4c76df339501d6efd40e0ff95e6186a7b7f0befd/black-26.3.1-py3-none-any.whl", hash = "sha256:2bd5aa94fc267d38bb21a70d7410a89f1a1d318841855f698746f8e7f51acd1b", size = 207542, upload-time = "2026-03-12T03:36:01.668Z" }, ] [[package]]