Exemple #1
0
 def formatted(branches, main, separator, extra):
     if isinstance(branches, list):
         branches = ','.join(branches)
     result = ''
     if main:
         result += setupmeta.stringify(main)
     if result or extra:
         result += setupmeta.stringify(separator)
     if extra:
         result += setupmeta.stringify(extra)
     if branches:
         result = 'branch(%s):%s' % (branches, result)
     return result
Exemple #2
0
    def bumped(self, what, current_version):
        """
        :param str what: Which component to bump
        :param Version current_version: Current version
        :return str: Represented next version, with 'what' bumped
        """
        if not isinstance(self.main_bits, list):
            setupmeta.abort("Main format is not a list: %s" %
                            setupmeta.stringify(self.main_bits))

        if what not in self.bumpable:
            msg = "Can't bump '%s', it's out of scope" % what
            msg += " of main format '%s'" % self.main
            msg += " acceptable values: %s" % ", ".join(self.bumpable)
            setupmeta.abort(msg)

        major, minor, rev = current_version.major, current_version.minor, current_version.patch
        if what == "major":
            major, minor, rev = (major + 1, 0, 0)

        elif what == "minor":
            major, minor, rev = (major, minor + 1, 0)

        elif what == "patch":
            major, minor, rev = (major, minor, rev + 1)

        next_version = Version(main="%s.%s.%s" % (major, minor, rev))
        return self.rendered(next_version, extra=False)
Exemple #3
0
    def formatted(branches, main, extra):
        if isinstance(branches, list):
            branches = ",".join(branches)

        result = ""
        if main:
            result += setupmeta.stringify(main)

        if extra:
            if result:
                result += "+"

            result += setupmeta.stringify(extra)

        if branches:
            result = "branch(%s):%s" % (branches, result)

        return result
Exemple #4
0
def test_stringify():
    assert setupmeta.stringify((1, 2)) == '("1", "2")'
    assert setupmeta.stringify(["1", "2"]) == '["1", "2"]'
    assert setupmeta.stringify(("a b", "c d")) == '("a b", "c d")'

    assert setupmeta.stringify("""quoted ("double"+'single')""", quote=True) == """'quoted ("double"+'single')'"""
    assert setupmeta.stringify("""quoted 'single only'""", quote=True) == '''"quoted 'single only'"'''
    assert setupmeta.stringify("no 'foo'") == "no 'foo'"
    assert setupmeta.stringify("no 'foo'", quote=True) == '''"no 'foo'"'''

    assert setupmeta.stringify({"bar": "no 'foo'"}) == """{bar: no 'foo'}"""
    assert setupmeta.stringify({"bar": 'no "foo"'}) == """{bar: no "foo"}"""

    assert setupmeta.listify("a b") == ["a", "b"]
    assert sorted(setupmeta.listify(set("ab"))) == ["a", "b"]
    assert setupmeta.listify(("a", "b")) == ["a", "b"]
Exemple #5
0
    def show_expanded_python(self):
        """Copy-pastable setup.py, if one wants to get rid of setupmeta"""
        definitions = self.setupmeta.definitions
        print('"""\nGenerated by https://pypi.org/project/setupmeta/\n"""\n')
        print("from setuptools import setup\n\n")

        version = definitions.get("version")
        if version:
            print('__version__ = %s\n\n' %
                  setupmeta.stringify(version.value, quote=True))

        print("setup(")

        defs = []
        for definition in sorted(definitions.values()):
            if not definition.value or definition.key not in setupmeta.MetaDefs.all_fields:
                continue
            if definition.key == "setup_requires":
                if isinstance(definition.value,
                              list) and "setupmeta" in definition.value:
                    definition.value.remove("setupmeta")
                if "setupmeta" == definition.value:
                    continue
                if definition.value:
                    definition.value = setupmeta.stringify(definition.value,
                                                           quote=True,
                                                           indent="        ")
            elif definition.key == "download_url":
                if version and version.value in definition.value:
                    definition.value = definition.value.replace(
                        version.value, "%s")
                    definition.value = "%s %% __version__" % setupmeta.stringify(
                        setupmeta.short(definition.value), quote=True)
                else:
                    definition.value = setupmeta.stringify(definition.value,
                                                           quote=True,
                                                           indent="        ")
            elif definition.key == "long_description":
                definition.value = 'open(%s).read()' % setupmeta.stringify(
                    setupmeta.short(definition.source), quote=True)
            elif definition.key == "version":
                definition.value = "__version__"
            else:
                definition.value = setupmeta.stringify(definition.value,
                                                       quote=True,
                                                       indent="        ")
            if definition.value:
                defs.append(definition)

        longest = max(len(d.value) for d in defs if "\n" not in d.value)
        longest = min(longest, 70)
        for definition in defs:
            if definition.key == "versioning":
                line = "    # versioning=%s," % definition.value
            else:
                line = "    %s=%s," % (definition.key, definition.value)
            source = definition.actual_source
            if source and source != "explicit":
                comment = "# from %s" % setupmeta.short(source)
                rest, _, last_line = line.rpartition("\n")
                if len(last_line) < longest:
                    padding = " " * (longest - len(last_line))
                else:
                    padding = " "
                last_line = "%s%s%s" % (last_line, padding, comment)
                line = "%s\n%s" % (rest, last_line) if rest else last_line
            print(line)

        print(")")
Exemple #6
0
def longest_line(lines, maximum=70):
    lines = [setupmeta.stringify(line) for line in lines]
    longest = max(len(line) for line in lines if "\n" not in line)
    return min(longest, maximum)
Exemple #7
0
    def show_expanded_python(self):
        """Copy-pastable setup.py, if one wants to get rid of setupmeta"""
        definitions = self.setupmeta.definitions
        print('"""\nGenerated by https://pypi.org/project/setupmeta/\n"""\n')
        print("from setuptools import setup\n\n")

        version = definitions.get("version")
        if version:
            print("__version__ = %s\n\n" % setupmeta.stringify(version.value, quote=True))

        print("setup(")

        defs = []
        for definition in sorted(definitions.values()):
            if not definition.value or definition.key not in setupmeta.MetaDefs.all_fields:
                continue

            if definition.key == "setup_requires":
                # When expanding, remove mention of 'setupmeta',
                # as expansion is aimed at giving a people a way to get a setup.py as-if setupmeta didn't exist
                # ie: it's a way of easily getting rid of setupmeta (should the need arise)
                if "setupmeta" in definition.value:
                    definition.value.remove("setupmeta")

                if definition.value:
                    definition.value = setupmeta.stringify(definition.value, quote=True, indent="        ")

            elif definition.key == "download_url":
                if version and version.value in definition.value:
                    definition.value = definition.value.replace(version.value, "%s")
                    definition.value = "%s %% __version__" % setupmeta.stringify(setupmeta.short(definition.value), quote=True)

                else:
                    definition.value = setupmeta.stringify(definition.value, quote=True, indent="        ")

            elif definition.key == "long_description":
                definition.value = "open(%s).read()" % setupmeta.stringify(setupmeta.short(definition.source), quote=True)

            elif definition.key == "version":
                definition.value = "__version__"

            elif definition.key != "include_package_data":
                definition.value = setupmeta.stringify(definition.value, quote=True, indent="        ")

            if definition.value:
                defs.append(definition)

        longest = longest_line([d.value for d in defs])
        for definition in defs:
            if definition.key == "versioning":
                line = "    # versioning=%s," % definition.value

            else:
                line = "    %s=%s," % (definition.key, definition.value)

            source = definition.actual_source
            if source and source != "explicit":
                comment = "# from %s" % setupmeta.short(source)
                rest, _, last_line = line.rpartition("\n")
                if len(last_line) < longest:
                    padding = " " * (longest - len(last_line))

                else:
                    padding = " "

                last_line = "%s%s%s" % (last_line, padding, comment)
                line = "%s\n%s" % (rest, last_line) if rest else last_line

            print(line)

        print(")")
Exemple #8
0
def test_stringify():
    assert setupmeta.stringify_dict('foo') == 'foo'
    assert setupmeta.stringify((1, 2)) == "('1', '2')"
    assert setupmeta.listify("a b") == ['a', 'b']
    assert sorted(setupmeta.listify(set("ab"))) == ['a', 'b']
    assert setupmeta.listify(("a", "b")) == ['a', 'b']