def test_lock_packages_with_null_description(locker: Locker, root: ProjectPackage): package_a = get_package("A", "1.0.0") package_a.description = None locker.set_lock_data(root, [package_a]) with locker.lock.open(encoding="utf-8") as f: content = f.read() expected = """[[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [metadata] lock-version = "1.1" python-versions = "*" content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" [metadata.files] A = [] """ assert content == expected
def test_extras_dependencies_are_ordered(locker: Locker, root: ProjectPackage): package_a = get_package("A", "1.0.0") package_a.add_dependency( Factory.create_dependency( "B", {"version": "^1.0.0", "optional": True, "extras": ["c", "a", "b"]} ) ) package_a.requires[-1].activate() locker.set_lock_data(root, [package_a]) expected = """[[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [package.dependencies] B = {version = "^1.0.0", extras = ["a", "b", "c"], optional = true} [metadata] lock-version = "1.1" python-versions = "*" content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" [metadata.files] A = [] """ with locker.lock.open(encoding="utf-8") as f: content = f.read() assert content == expected
def test_extras_dependencies_are_ordered(locker: Locker, root: ProjectPackage): package_a = get_package("A", "1.0.0") package_a.add_dependency( Factory.create_dependency( "B", {"version": "^1.0.0", "optional": True, "extras": ["c", "a", "b"]} ) ) package_a.requires[-1].activate() locker.set_lock_data(root, [package_a]) expected = """[[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [package.dependencies] B = {version = "^1.0.0", extras = ["a", "b", "c"], optional = true} [metadata] lock-version = "1.1" python-versions = "*" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831" [metadata.files] A = [] """ with locker.lock.open(encoding="utf-8") as f: content = f.read() assert content == expected
def test_lock_packages_with_null_description(locker: Locker, root: ProjectPackage): package_a = get_package("A", "1.0.0") package_a.description = None locker.set_lock_data(root, [package_a]) with locker.lock.open(encoding="utf-8") as f: content = f.read() expected = """[[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [metadata] lock-version = "1.1" python-versions = "*" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831" [metadata.files] A = [] """ assert content == expected
def save(locker: Locker, lock_data: _TOMLDocument, root: Package) -> None: """Validate the lock data and write it to disk. Args: locker: The locker object. lock_data: The lock data. root: The root package of the Poetry project. """ packages = load_packages(locker, lock_data) locker.set_lock_data(root, packages)
def test_lock_file_should_not_have_mixed_types(locker: Locker, root: ProjectPackage): package_a = get_package("A", "1.0.0") package_a.add_dependency(Factory.create_dependency("B", "^1.0.0")) package_a.add_dependency( Factory.create_dependency("B", { "version": ">=1.0.0", "optional": True })) package_a.requires[-1].activate() package_a.extras["foo"] = [get_dependency("B", ">=1.0.0")] locker.set_lock_data(root, [package_a]) expected = """[[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [package.dependencies] B = [ {version = "^1.0.0"}, {version = ">=1.0.0", optional = true}, ] [package.extras] foo = ["B (>=1.0.0)"] [metadata] lock-version = "1.1" python-versions = "*" content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" [metadata.files] A = [] """ with locker.lock.open(encoding="utf-8") as f: content = f.read() assert content == expected
def test_lock_file_should_not_have_mixed_types(locker: Locker, root: ProjectPackage): package_a = get_package("A", "1.0.0") package_a.add_dependency(Factory.create_dependency("B", "^1.0.0")) package_a.add_dependency( Factory.create_dependency("B", { "version": ">=1.0.0", "optional": True })) package_a.requires[-1].activate() package_a.extras["foo"] = [get_dependency("B", ">=1.0.0")] locker.set_lock_data(root, [package_a]) expected = """[[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [package.dependencies] B = [ {version = "^1.0.0"}, {version = ">=1.0.0", optional = true}, ] [package.extras] foo = ["B (>=1.0.0)"] [metadata] lock-version = "1.1" python-versions = "*" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831" [metadata.files] A = [] """ with locker.lock.open(encoding="utf-8") as f: content = f.read() assert content == expected
def test_locking_legacy_repository_package_should_include_source_section( root: ProjectPackage, locker: Locker ): package_a = Package( "A", "1.0.0", source_type="legacy", source_url="https://foo.bar", source_reference="legacy", ) packages = [package_a] locker.set_lock_data(root, packages) with locker.lock.open(encoding="utf-8") as f: content = f.read() expected = """[[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [package.source] type = "legacy" url = "https://foo.bar" reference = "legacy" [metadata] lock-version = "1.1" python-versions = "*" content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" [metadata.files] A = [] """ assert content == expected
def test_locking_legacy_repository_package_should_include_source_section( root: ProjectPackage, locker: Locker ): package_a = Package( "A", "1.0.0", source_type="legacy", source_url="https://foo.bar", source_reference="legacy", ) packages = [package_a] locker.set_lock_data(root, packages) with locker.lock.open(encoding="utf-8") as f: content = f.read() expected = """[[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [package.source] type = "legacy" url = "https://foo.bar" reference = "legacy" [metadata] lock-version = "1.1" python-versions = "*" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831" [metadata.files] A = [] """ assert content == expected
def test_locker_dumps_dependency_information_correctly( locker: Locker, root: ProjectPackage ): root_dir = Path(__file__).parent.parent.joinpath("fixtures") package_a = get_package("A", "1.0.0") package_a.add_dependency( Factory.create_dependency( "B", {"path": "project_with_extras", "develop": True}, root_dir=root_dir ) ) package_a.add_dependency( Factory.create_dependency( "C", {"path": "directory/project_with_transitive_directory_dependencies"}, root_dir=root_dir, ) ) package_a.add_dependency( Factory.create_dependency( "D", {"path": "distributions/demo-0.1.0.tar.gz"}, root_dir=root_dir ) ) package_a.add_dependency( Factory.create_dependency( "E", {"url": "https://python-poetry.org/poetry-1.2.0.tar.gz"} ) ) package_a.add_dependency( Factory.create_dependency( "F", {"git": "https://github.com/python-poetry/poetry.git", "branch": "foo"} ) ) packages = [package_a] locker.set_lock_data(root, packages) with locker.lock.open(encoding="utf-8") as f: content = f.read() expected = """[[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [package.dependencies] B = {path = "project_with_extras", develop = true} C = {path = "directory/project_with_transitive_directory_dependencies"} D = {path = "distributions/demo-0.1.0.tar.gz"} E = {url = "https://python-poetry.org/poetry-1.2.0.tar.gz"} F = {git = "https://github.com/python-poetry/poetry.git", branch = "foo"} [metadata] lock-version = "1.1" python-versions = "*" content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" [metadata.files] A = [] """ assert content == expected
def test_lock_file_data_is_ordered(locker: Locker, root: ProjectPackage): package_a = get_package("A", "1.0.0") package_a.add_dependency(Factory.create_dependency("B", "^1.0")) package_a.files = [{"file": "foo", "hash": "456"}, {"file": "bar", "hash": "123"}] package_a2 = get_package("A", "2.0.0") package_a2.files = [{"file": "baz", "hash": "345"}] package_git = Package( "git-package", "1.2.3", source_type="git", source_url="https://github.com/python-poetry/poetry.git", source_reference="develop", source_resolved_reference="123456", ) package_url_linux = Package( "url-package", "1.0", source_type="url", source_url="https://example.org/url-package-1.0-cp39-manylinux_2_17_x86_64.whl", ) package_url_win32 = Package( "url-package", "1.0", source_type="url", source_url="https://example.org/url-package-1.0-cp39-win_amd64.whl", ) packages = [ package_a2, package_a, get_package("B", "1.2"), package_git, package_url_win32, package_url_linux, ] locker.set_lock_data(root, packages) with locker.lock.open(encoding="utf-8") as f: content = f.read() expected = """\ [[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [package.dependencies] B = "^1.0" [[package]] name = "A" version = "2.0.0" description = "" category = "main" optional = false python-versions = "*" [[package]] name = "B" version = "1.2" description = "" category = "main" optional = false python-versions = "*" [[package]] name = "git-package" version = "1.2.3" description = "" category = "main" optional = false python-versions = "*" develop = false [package.source] type = "git" url = "https://github.com/python-poetry/poetry.git" reference = "develop" resolved_reference = "123456" [[package]] name = "url-package" version = "1.0" description = "" category = "main" optional = false python-versions = "*" [package.source] type = "url" url = "https://example.org/url-package-1.0-cp39-manylinux_2_17_x86_64.whl" [[package]] name = "url-package" version = "1.0" description = "" category = "main" optional = false python-versions = "*" [package.source] type = "url" url = "https://example.org/url-package-1.0-cp39-win_amd64.whl" [metadata] lock-version = "1.1" python-versions = "*" content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" [metadata.files] A = [ {file = "bar", hash = "123"}, {file = "foo", hash = "456"}, {file = "baz", hash = "345"}, ] B = [] git-package = [] url-package = [] """ assert content == expected
def test_lock_file_data_is_ordered(locker: Locker, root: ProjectPackage): package_a = get_package("A", "1.0.0") package_a.add_dependency(Factory.create_dependency("B", "^1.0")) package_a.files = [{"file": "foo", "hash": "456"}, {"file": "bar", "hash": "123"}] package_git = Package( "git-package", "1.2.3", source_type="git", source_url="https://github.com/python-poetry/poetry.git", source_reference="develop", source_resolved_reference="123456", ) packages = [package_a, get_package("B", "1.2"), package_git] locker.set_lock_data(root, packages) with locker.lock.open(encoding="utf-8") as f: content = f.read() expected = """[[package]] name = "A" version = "1.0.0" description = "" category = "main" optional = false python-versions = "*" [package.dependencies] B = "^1.0" [[package]] name = "B" version = "1.2" description = "" category = "main" optional = false python-versions = "*" [[package]] name = "git-package" version = "1.2.3" description = "" category = "main" optional = false python-versions = "*" develop = false [package.source] type = "git" url = "https://github.com/python-poetry/poetry.git" reference = "develop" resolved_reference = "123456" [metadata] lock-version = "1.1" python-versions = "*" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831" [metadata.files] A = [ {file = "bar", hash = "123"}, {file = "foo", hash = "456"}, ] B = [] git-package = [] """ assert content == expected