示例#1
0
    def test__filter_project_blocklist_allowlist__pep503_normalize(self) -> None:
        mock_config(
            """\
[plugins]
enabled =
    blocklist_project
    allowlist_project

[blocklist]
packages =
    SampleProject
    trove----classifiers

[allowlist]
packages =
    SampleProject
    trove----classifiers
"""
        )

        plugins = {
            plugin.name: plugin for plugin in LoadedFilters().filter_project_plugins()
        }

        self.assertTrue(plugins["blocklist_project"].check_match(name="sampleproject"))
        self.assertTrue(
            plugins["blocklist_project"].check_match(name="trove-classifiers")
        )
        self.assertFalse(plugins["allowlist_project"].check_match(name="sampleproject"))
        self.assertFalse(
            plugins["allowlist_project"].check_match(name="trove-classifiers")
        )
示例#2
0
    def test_latest_releases_keep_stable(self) -> None:
        mock_config(self.config_contents)

        mirror = Mirror(Path("."), Master(url="https://foo.bar.com"))
        pkg = Package("foo", 1, mirror)
        pkg._metadata = {
            "info": {
                "name": "foo",
                "version": "2.0.0"
            },  # stable version
            "releases": {
                "1.0.0": {},
                "1.1.0": {},
                "1.1.1": {},
                "1.1.2": {},
                "1.1.3": {},
                "2.0.0": {},  # <= stable version, keep it
                "2.0.1b1": {},
                "2.0.1b2": {},  # <= most recent, keep it
            },
        }

        pkg._filter_all_releases(mirror.filters.filter_release_plugins())

        assert pkg.releases == {"2.0.1b2": {}, "2.0.0": {}}
示例#3
0
    def test__casing__no__affect(self) -> None:
        mock_config("""\
[plugins]
enabled =
    blocklist_release
[blocklist]
packages =
    Foo<=1.2.0
""")

        mirror = BandersnatchMirror(Path("."),
                                    Master(url="https://foo.bar.com"))
        pkg = Package("foo", 1)
        pkg._metadata = {
            "info": {
                "name": "foo"
            },
            "releases": {
                "1.2.0": {},
                "1.2.1": {}
            },
        }

        pkg.filter_all_releases(mirror.filters.filter_release_plugins())

        self.assertEqual(pkg.releases, {"1.2.1": {}})
示例#4
0
    def test__filter__matches__release(self) -> None:

        with open(Path(self.tempdir.name) / "requirements.txt", "w") as fh:
            fh.write(
                """\
#    This is needed for workshop 1
#
foo==1.2.0             # via -r requirements.in
"""
            )

        mock_config(
            f"""\
[plugins]
enabled =
    project_requirements
    project_requirements_pinned
[allowlist]
requirements_path = {self.tempdir.name}
requirements =
    requirements.txt
"""
        )

        mirror = BandersnatchMirror(Path("."), Master(url="https://foo.bar.com"))
        pkg = Package("foo", 1)
        pkg._metadata = {
            "info": {"name": "foo"},
            "releases": {"1.2.0": {}, "1.2.1": {}},
        }

        pkg.filter_all_releases(mirror.filters.filter_release_plugins())

        self.assertEqual({"1.2.0": {}}, pkg.releases)
示例#5
0
    def test__filter__find_files(self) -> None:
        absolute_file_path = Path(self.tempdir.name) / "requirements.txt"
        with open(absolute_file_path, "w") as fh:
            fh.write(
                """\
#    This is needed for workshop 1
#
foo==1.2.0             # via -r requirements.in
"""
            )

        mock_config(
            f"""\
[plugins]
enabled =
    project_requirements
[allowlist]
requirements =
    {absolute_file_path}
"""
        )

        mirror = BandersnatchMirror(Path("."), Master(url="https://foo.bar.com"))

        mirror.packages_to_sync = {
            "foo": "",
            "bar": "",
            "baz": "",
        }
        mirror._filter_packages()
        self.assertEqual({"foo": ""}, mirror.packages_to_sync)
示例#6
0
    def test__filter__commented__out(self) -> None:
        mock_config(
            """\
[mirror]
storage-backend = filesystem

[plugins]
enabled =
    allowlist_project

[allowlist]
packages =
    foo==1.2.3   # inline comment
#    bar
"""
        )
        mirror = BandersnatchMirror(Path("."), Master(url="https://foo.bar.com"))
        mirror.packages_to_sync = {
            "foo": "",
            "bar": "",
            "snu": "",
        }
        mirror._filter_packages()

        self.assertEqual({"foo": ""}, mirror.packages_to_sync)
示例#7
0
    def test__dont__filter__prereleases(self) -> None:
        mock_config(
            """\
[plugins]
enabled =
    allowlist_release
[allowlist]
packages =
    foo<=1.2.0
"""
        )

        mirror = BandersnatchMirror(Path("."), Master(url="https://foo.bar.com"))
        pkg = Package("foo", 1)
        pkg._metadata = {
            "info": {"name": "foo"},
            "releases": {
                "1.1.0a2": {},
                "1.1.1beta1": {},
                "1.2.0": {},
                "1.2.1": {},
                "1.2.2alpha3": {},
                "1.2.3rc1": {},
            },
        }

        pkg.filter_all_releases(mirror.filters.filter_release_plugins())

        self.assertEqual(pkg.releases, {"1.1.0a2": {}, "1.1.1beta1": {}, "1.2.0": {}})
示例#8
0
    def test_latest_releases_uninitialized(self) -> None:
        mock_config(self.config_contents)

        mirror = Mirror(Path("."), Master(url="https://foo.bar.com"))
        pkg = Package("foo", 1, mirror)
        pkg._metadata = {
            "info": {
                "name": "foo",
                "version": "2.0.0"
            },
            "releases": {
                "1.0.0": {},
                "1.1.0": {},
                "1.1.1": {},
                "1.1.2": {},
                "1.1.3": {},
                "2.0.0": {},
            },
        }

        pkg._filter_all_releases(mirror.filters.filter_release_plugins())

        assert pkg.releases == {
            "1.0.0": {},
            "1.1.0": {},
            "1.1.1": {},
            "1.1.2": {},
            "1.1.3": {},
            "2.0.0": {},
        }
示例#9
0
    def test__filter__varying__specifiers(self) -> None:
        mock_config("""\
[mirror]
storage-backend = filesystem

[plugins]
enabled =
    blocklist_project

[blocklist]
packages =
    foo==1.2.3
    bar~=3.0,<=1.5
    snu
""")
        mirror = BandersnatchMirror(Path("."),
                                    Master(url="https://foo.bar.com"))
        mirror.packages_to_sync = {
            "foo": "",
            "foo2": "",
            "bar": "",
            "snu": "",
        }
        mirror._filter_packages()

        self.assertEqual({
            "foo": "",
            "foo2": "",
            "bar": ""
        }, mirror.packages_to_sync)
示例#10
0
    def test_plugin_compiles_patterns(self) -> None:
        mock_config(self.config_contents)

        plugins = bandersnatch.filter.LoadedFilters().filter_release_file_plugins()

        assert any(
            type(plugin) == filename_name.ExcludePlatformFilter for plugin in plugins
        )
示例#11
0
    def test_plugin_check_match(self) -> None:
        mock_config(self.config_contents)

        mirror = Mirror(Path("."), Master(url="https://foo.bar.com"))
        mirror.packages_to_sync = {"foo-good": "", "foo-evil": "", "foo-neutral": ""}
        mirror._filter_packages()

        assert list(mirror.packages_to_sync.keys()) == ["foo-good"]
示例#12
0
    def test__plugin__loads__default(self) -> None:
        mock_config("""\
[blocklist]
""")

        plugins = bandersnatch.filter.LoadedFilters().filter_project_plugins()
        names = [plugin.name for plugin in plugins]
        self.assertNotIn("blocklist_project", names)
示例#13
0
    def test__plugin__doesnt_load__explicitly__disabled(self) -> None:
        mock_config("""\
[plugins]
enabled =
    allowlist_package
""")

        plugins = bandersnatch.filter.LoadedFilters().filter_release_plugins()
        names = [plugin.name for plugin in plugins]
        self.assertNotIn("allowlist_release", names)
示例#14
0
    def test__filter_no_plugin(self) -> None:
        mock_config("""\
[plugins]
enabled =
""")

        plugins = LoadedFilters().filter_release_plugins()
        self.assertEqual(len(plugins), 0)

        plugins = LoadedFilters().filter_project_plugins()
        self.assertEqual(len(plugins), 0)
示例#15
0
    def test_plugin_compiles_patterns(self) -> None:
        mock_config(self.config_contents)

        plugins = bandersnatch.filter.LoadedFilters().filter_release_plugins()

        assert any(
            type(plugin) == latest_name.LatestReleaseFilter
            for plugin in plugins)
        plugin = next(plugin for plugin in plugins
                      if isinstance(plugin, latest_name.LatestReleaseFilter))
        assert plugin.keep == 2
示例#16
0
    def test__plugin__loads__explicitly_enabled(self) -> None:
        mock_config(contents="""\
[plugins]
enabled =
    whitelist_project
""")

        plugins = bandersnatch.filter.LoadedFilters().filter_project_plugins()
        names = [plugin.name for plugin in plugins]
        self.assertListEqual(names, ["whitelist_project"])
        self.assertEqual(len(plugins), 1)
示例#17
0
    def test__plugin__loads__default(self) -> None:
        mock_config("""\
[mirror]
storage-backend = filesystem

[plugins]
""")

        plugins = bandersnatch.filter.LoadedFilters().filter_project_plugins()
        names = [plugin.name for plugin in plugins]
        self.assertNotIn("whitelist_project", names)
示例#18
0
    def test__plugin__loads__explicitly_enabled(self) -> None:
        mock_config("""\
[plugins]
enabled =
    allowlist_release
""")

        plugins = bandersnatch.filter.LoadedFilters().filter_release_plugins()
        names = [plugin.name for plugin in plugins]
        self.assertListEqual(names, ["allowlist_release"])
        self.assertEqual(len(plugins), 1)
示例#19
0
    def test_plugin_compiles_patterns(self) -> None:
        mock_config(self.config_contents)

        plugins = bandersnatch.filter.LoadedFilters().filter_project_plugins()

        assert any(type(plugin) == regex_name.RegexProjectFilter for plugin in plugins)
        plugin = next(
            plugin
            for plugin in plugins
            if isinstance(plugin, regex_name.RegexProjectFilter)
        )
        assert plugin.patterns == [re.compile(r".+-evil$"), re.compile(r".+-neutral$")]
示例#20
0
    def test_plugin_compiles_patterns(self) -> None:
        mock_config(self.config_contents)

        plugins = bandersnatch.filter.LoadedFilters().filter_release_plugins()

        assert any(type(plugin) == regex_name.RegexReleaseFilter for plugin in plugins)
        plugin = next(
            plugin
            for plugin in plugins
            if isinstance(plugin, regex_name.RegexReleaseFilter)
        )
        assert plugin.patterns == [re.compile(r".+rc\d$"), re.compile(r".+alpha\d$")]
示例#21
0
def test_plugin_init(s3_mock: S3Path) -> None:
    config_loader = mock_config("""
[mirror]
directory = /tmp/pypi
json = true
master = https://pypi.org
timeout = 60
global-timeout = 18000
workers = 3
hash-index = true
stop-on-error = true
storage-backend = swift
verifiers = 3
keep_index_versions = 2
compare-method = hash
[s3]
region_name = us-east-1
aws_access_key_id = 123456
aws_secret_access_key = 123456
endpoint_url = http://localhost:9090
signature_version = s3v4
""")
    backend = s3.S3Storage(config=config_loader.config)
    backend.initialize_plugin()

    path = s3.S3Path("/tmp/pypi")
    resource, _ = path._accessor.configuration_map.get_configuration(path)
    assert resource.meta.client.meta.endpoint_url == "http://localhost:9090"

    config_loader = mock_config("""
[mirror]
directory = /tmp/pypi
json = true
master = https://pypi.org
timeout = 60
global-timeout = 18000
workers = 3
hash-index = true
stop-on-error = true
storage-backend = swift
verifiers = 3
keep_index_versions = 2
compare-method = hash
[s3]
endpoint_url = http://localhost:9090
""")
    backend = s3.S3Storage(config=config_loader.config)
    backend.initialize_plugin()

    path = s3.S3Path("/tmp/pypi")
    resource, _ = path._accessor.configuration_map.get_configuration(path)
    assert resource.meta.client.meta.endpoint_url == "http://localhost:9090"
示例#22
0
    def test_plugin_check_match(self) -> None:
        mock_config(self.config_contents)

        mirror = Mirror(Path("."), Master(url="https://foo.bar.com"))
        pkg = Package("foo", 1, mirror)
        pkg._metadata = {
            "info": {"name": "foo", "version": "foo-1.2.0"},
            "releases": {"foo-1.2.0rc2": {}, "foo-1.2.0": {}, "foo-1.2.0alpha2": {}},
        }

        pkg._filter_all_releases(mirror.filters.filter_release_plugins())

        assert pkg.releases == {"foo-1.2.0": {}}
示例#23
0
    def test__plugin__doesnt_load__explicitly__disabled(self) -> None:
        mock_config("""\
[mirror]
storage-backend = filesystem
workers = 2

[plugins]
enabled =
    allowlist_package
""")

        plugins = bandersnatch.filter.LoadedFilters().filter_release_plugins()
        names = [plugin.name for plugin in plugins]
        self.assertNotIn("project_requirements", names)
示例#24
0
    def test__filter__nomatch_package(self) -> None:
        mock_config("""\
        [blocklist]
        plugins =
            blocklist_project
        packages =
            foo
        """)

        mirror = BandersnatchMirror(Path("."),
                                    Master(url="https://foo.bar.com"))
        mirror.packages_to_sync = {"foo2": ""}
        mirror._filter_packages()

        self.assertIn("foo2", mirror.packages_to_sync.keys())
示例#25
0
    def test__plugin__loads__explicitly_enabled(self) -> None:
        mock_config("""\
[mirror]
storage-backend = filesystem
workers = 2

[plugins]
enabled =
    project_requirements_pinned
""")

        plugins = bandersnatch.filter.LoadedFilters().filter_release_plugins()
        names = [plugin.name for plugin in plugins]
        self.assertListEqual(names, ["project_requirements_pinned"])
        self.assertEqual(len(plugins), 1)
示例#26
0
    def test__plugin__loads__explicitly_enabled(self) -> None:
        mock_config(contents="""\
[mirror]
storage-backend = filesystem
workers = 2

[plugins]
enabled =
    allowlist_project
""")

        plugins = bandersnatch.filter.LoadedFilters().filter_project_plugins()
        names = [plugin.name for plugin in plugins]
        self.assertListEqual(names, ["allowlist_project"])
        self.assertEqual(len(plugins), 1)
    def test_plugin_includes_predefined_patterns(self) -> None:
        mock_config(self.config_contents)

        plugins = bandersnatch.filter.LoadedFilters().filter_release_plugins()

        assert any(
            type(plugin) == prerelease_name.PreReleaseFilter
            for plugin in plugins)
        plugin = next(plugin for plugin in plugins
                      if isinstance(plugin, prerelease_name.PreReleaseFilter))
        expected_patterns = [
            re.compile(pattern_string)
            for pattern_string in plugin.PRERELEASE_PATTERNS
        ]
        assert plugin.patterns == expected_patterns
示例#28
0
    def test__filter_project_plugins__loads(self) -> None:
        mock_config("""\
[plugins]
enabled = all
""")
        builtin_plugin_names = [
            "blacklist_project",
            "regex_project",
            "whitelist_project",
        ]

        plugins = LoadedFilters().filter_project_plugins()
        names = [plugin.name for plugin in plugins]
        for name in builtin_plugin_names:
            self.assertIn(name, names)
示例#29
0
    def test_latest_releases_ensure_reusable(self) -> None:
        """
        Tests the filter multiple times to ensure no state is preserved and
        thus is reusable between packages
        """
        mock_config(self.config_contents)

        mirror = BandersnatchMirror(Path("."),
                                    Master(url="https://foo.bar.com"))
        pkg1 = Package("foo", 1)
        pkg1._metadata = {
            "info": {
                "name": "foo",
                "version": "2.0.0"
            },
            "releases": {
                "0.1.1": {},
                "0.1.2": {},
                "0.1.3": {},
                "1.0.0": {},
                "1.1.0": {},
                "1.2.0": {},
                "2.0.0": {},
            },
        }
        pkg2 = Package("bar", 1)
        pkg2._metadata = {
            "info": {
                "name": "bar",
                "version": "0.3.0"
            },
            "releases": {
                "0.1.0": {},
                "0.1.1": {},
                "0.1.2": {},
                "0.1.3": {},
                "0.1.4": {},
                "0.1.5": {},
                "0.2.0": {},
                "0.3.0": {},
            },
        }

        pkg1.filter_all_releases(mirror.filters.filter_release_plugins())
        pkg2.filter_all_releases(mirror.filters.filter_release_plugins())

        assert pkg1.releases == {"1.2.0": {}, "2.0.0": {}}
        assert pkg2.releases == {"0.2.0": {}, "0.3.0": {}}
示例#30
0
    def test__filter_release_plugins__loads(self) -> None:
        mock_config("""\
[plugins]
enabled = all
""")
        builtin_plugin_names = [
            "blacklist_release",
            "prerelease_release",
            "regex_release",
            "latest_release",
        ]

        plugins = LoadedFilters().filter_release_plugins()
        names = [plugin.name for plugin in plugins]
        for name in builtin_plugin_names:
            self.assertIn(name, names)