Skip to content

Commit

Permalink
Add purge to exception method
Browse files Browse the repository at this point in the history
  • Loading branch information
Xcelled committed Oct 18, 2018
1 parent a892bda commit 97b1f84
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 112 deletions.
3 changes: 2 additions & 1 deletion src/bandersnatch/master.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ def get(self, path, required_serial, **kw):
)

raise StalePage(
"Expected PyPI serial {} for request {} but got {}".format(
"Expected PyPI serial {} for request {} but got {}. "
+ "HTTP PURGE has been issued to the request url".format(
required_serial, path, got_serial
)
)
Expand Down
124 changes: 13 additions & 111 deletions src/bandersnatch/tests/test_package.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import os.path
import unittest.mock as mock

from unittest.mock import patch

from requests import HTTPError

from bandersnatch.package import Package
Expand All @@ -17,8 +19,6 @@ def test_package_sync_404_json_info_keeps_package_on_non_deleting_mirror(
mirror, requests
):
mirror.delete_packages = False
mirror.master.package_releases = mock.Mock()
mirror.master.package_releases.return_value = {}

response = mock.Mock()
response.status_code = 404
Expand All @@ -36,23 +36,19 @@ def test_package_sync_404_json_info_keeps_package_on_non_deleting_mirror(


def test_package_sync_gives_up_after_3_stale_responses(caplog, mirror, requests):
mirror.master.package_releases = mock.Mock()
mirror.master.package_releases.return_value = ["0.1"]
mirror.master.release_urls = mock.Mock()
mirror.master.release_urls.return_value = []

requests.prepare(b"the simple page", "10")
requests.prepare(b"the simple page", "10")
requests.prepare(b"the simple page", "10")
requests.prepare(b"the simple page", "10")
with patch.object(mirror.master, 'get', wraps=mirror.master.get) as wrapped_get:
requests.prepare(b"the simple page", "10")
requests.prepare(b"the simple page", "10")
requests.prepare(b"the simple page", "10")
requests.prepare(b"the simple page", "10")

package = Package("foo", 11, mirror)
package.sleep_on_stale = 0
package = Package("foo", 11, mirror)
package.sleep_on_stale = 0

package.sync()
assert package.tries == 3
assert mirror.errors
assert "not updating. Giving up" in caplog.text
package.sync()
assert wrapped_get.call_count == 3
assert mirror.errors
assert "not updating. Giving up" in caplog.text


def test_package_sync_with_release_no_files_syncs_simple_page(mirror, requests):
Expand Down Expand Up @@ -406,11 +402,6 @@ def test_package_sync_simple_page_with_existing_dir_with_hash(


def test_package_sync_with_error_keeps_it_on_todo_list(mirror, requests):
mirror.master.package_releases = mock.Mock()
mirror.master.package_releases.return_value = ["0.1"]
mirror.master.release_urls = mock.Mock()
mirror.master.release_urls.return_value = []

requests.side_effect = Exception

mirror.packages_to_sync = {"foo"}
Expand Down Expand Up @@ -451,23 +442,6 @@ def test_package_sync_downloads_release_file(mirror, requests):


def test_package_download_rejects_non_package_directory_links(mirror):
mirror.master.package_releases = mock.Mock()
mirror.master.package_releases.return_value = ["0.1"]
mirror.master.release_urls = mock.Mock()
mirror.master.release_urls.return_value = [
{
"url": "https://pypi.example.com/foo/bar/foo/foo.zip",
"digests": {
"md5": "b6bcb391b040c4468262706faf9d3cce",
"sha256": (
"02db45ea4e09715fbb1ed0fef30d7324db07c"
"9e87fb0d4e5470a3e4e878bd8cd"
),
},
"md5_digest": "b6bcb391b040c4468262706faf9d3cce",
}
]

mirror.packages_to_sync = {"foo"}
package = Package("foo", 10, mirror)
package.sync()
Expand All @@ -479,10 +453,6 @@ def test_package_download_rejects_non_package_directory_links(mirror):
def test_sync_keeps_superfluous_files_on_nondeleting_mirror(mirror, requests):
touch_files(["web/packages/2.4/f/foo/foo.zip"])

mirror.master.package_releases = mock.Mock()
mirror.master.package_releases.return_value = ["0.1"]
mirror.master.release_urls = mock.Mock()
mirror.master.release_urls.return_value = []
mirror.delete_packages = False

mirror.packages_to_sync = {"foo"}
Expand Down Expand Up @@ -528,23 +498,6 @@ def test_package_sync_replaces_mismatching_local_files(mirror, requests):


def test_package_sync_does_not_touch_existing_local_file(mirror, requests):
mirror.master.package_releases = mock.Mock()
mirror.master.package_releases.return_value = ["0.1"]
mirror.master.release_urls = mock.Mock()
mirror.master.release_urls.return_value = [
{
"url": "https://pypi.example.com/packages/any/f/foo/foo.zip",
"digests": {
"md5": "b6bcb391b040c4468262706faf9d3cce",
"sha256": (
"02db45ea4e09715fbb1ed0fef30d7324db07c"
"9e87fb0d4e5470a3e4e878bd8cd"
),
},
"md5_digest": "b6bcb391b040c4468262706faf9d3cce",
}
]

requests.prepare(b"the release content", 10)

os.makedirs("web/packages/any/f/foo")
Expand All @@ -561,23 +514,6 @@ def test_package_sync_does_not_touch_existing_local_file(mirror, requests):


def test_sync_incorrect_download_with_current_serial_fails(mirror, requests):
mirror.master.package_releases = mock.Mock()
mirror.master.package_releases.return_value = ["0.1"]
mirror.master.release_urls = mock.Mock()
mirror.master.release_urls.return_value = [
{
"url": "https://pypi.example.com/packages/any/f/foo/foo.zip",
"digests": {
"md5": "b6bcb391b040c4468262706faf9d3cce",
"sha256": (
"02db45ea4e09715fbb1ed0fef30d7324db07c"
"9e87fb0d4e5470a3e4e878bd8cd"
),
},
"md5_digest": "b6bcb391b040c4468262706faf9d3cce",
}
]

requests.prepare(b"not release content", 10)

mirror.packages_to_sync = {"foo"}
Expand All @@ -589,23 +525,6 @@ def test_sync_incorrect_download_with_current_serial_fails(mirror, requests):


def test_sync_incorrect_download_with_old_serials_retries(mirror, requests):
mirror.master.package_releases = mock.Mock()
mirror.master.package_releases.return_value = ["0.1"]
mirror.master.release_urls = mock.Mock()
mirror.master.release_urls.return_value = [
{
"url": "https://pypi.example.com/packages/any/f/foo/foo.zip",
"digests": {
"md5": "b6bcb391b040c4468262706faf9d3cce",
"sha256": (
"02db45ea4e09715fbb1ed0fef30d7324db07c"
"9e87fb0d4e5470a3e4e878bd8cd"
),
},
"md5_digest": "b6bcb391b040c4468262706faf9d3cce",
}
]

requests.prepare(b"not release content", 9)

mirror.packages_to_sync = {"foo"}
Expand All @@ -617,23 +536,6 @@ def test_sync_incorrect_download_with_old_serials_retries(mirror, requests):


def test_sync_incorrect_download_with_new_serial_fails(mirror, requests):
mirror.master.package_releases = mock.Mock()
mirror.master.package_releases.return_value = ["0.1"]
mirror.master.release_urls = mock.Mock()
mirror.master.release_urls.return_value = [
{
"url": "https://pypi.example.com/packages/any/f/foo/foo.zip",
"digests": {
"md5": "b6bcb391b040c4468262706faf9d3cce",
"sha256": (
"02db45ea4e09715fbb1ed0fef30d7324db07c"
"9e87fb0d4e5470a3e4e878bd8cd"
),
},
"md5_digest": "b6bcb391b040c4468262706faf9d3cce",
}
]

requests.prepare(b"not release content", 11)

mirror.packages_to_sync = {"foo"}
Expand Down

0 comments on commit 97b1f84

Please sign in to comment.