예제 #1
0
def source_secondary():
    return Source(name="secondary",
                  url="https://secondary.com",
                  secondary=True)
예제 #2
0
def source_default():
    return Source(name="default", url="https://default.com", default=True)
예제 #3
0
def source_two():
    return Source(name="two", url="https://two.com")
예제 #4
0
    return Source(name="two", url="https://two.com")


@pytest.fixture
def source_default():
    return Source(name="default", url="https://default.com", default=True)


@pytest.fixture
def source_secondary():
    return Source(name="secondary",
                  url="https://secondary.com",
                  secondary=True)


_existing_source = Source(name="existing", url="https://existing.com")


@pytest.fixture
def source_existing():
    return _existing_source


PYPROJECT_WITH_SOURCES = f"""
[tool.poetry]
name = "source-command-test"
version = "0.1.0"
description = ""
authors = ["Poetry Tester <*****@*****.**>"]

[tool.poetry.dependencies]
예제 #5
0
    def handle(self) -> Optional[int]:
        name = self.argument("name")
        url = self.argument("url")
        is_default = self.option("default")
        is_secondary = self.option("secondary")

        if is_default and is_secondary:
            self.line_error(
                "Cannot configure a source as both <c1>default</c1> and <c1>secondary</c1>."
            )
            return 1

        new_source = Source(name=name,
                            url=url,
                            default=is_default,
                            secondary=is_secondary)
        existing_sources = self.poetry.get_sources()

        sources = AoT([])

        for source in existing_sources:
            if source == new_source:
                self.line(
                    f"Source with name <c1>{name}</c1> already exits. Skipping addition."
                )
                return 0
            elif source.default and is_default:
                self.line_error(
                    f"<error>Source with name <c1>{source.name}</c1> is already set to default. "
                    f"Only one default source can be configured at a time.</error>"
                )
                return 1

            if source.name == name:
                self.line(
                    f"Source with name <c1>{name}</c1> already exits. Updating."
                )
                source = new_source
                new_source = None

            sources.append(self.source_to_table(source))

        if new_source is not None:
            self.line(f"Adding source with name <c1>{name}</c1>.")
            sources.append(self.source_to_table(new_source))

        # ensure new source is valid. eg: invalid name etc.
        self.poetry._pool = Pool()
        try:
            Factory.configure_sources(self.poetry, sources, self.poetry.config,
                                      NullIO())
            self.poetry.pool.repository(name)
        except ValueError as e:
            self.line_error(
                f"<error>Failed to validate addition of <c1>{name}</c1>: {e}</error>"
            )
            return 1

        self.poetry.pyproject.poetry_config["source"] = sources
        self.poetry.pyproject.save()

        return 0
예제 #6
0
 def get_sources(self) -> list[Source]:
     return [
         Source(**source)
         for source in self.pyproject.poetry_config.get("source", [])
     ]