def run(self): self.chars = setupmeta.to_int(self.chars, default=setupmeta.Console.columns()) definitions = self.setupmeta.definitions self.check_recommend('name') self.check_recommend('version', "you can use setupmeta's versioning='...'") self.check_recommend('description', "add a README or a docstring to your module") self.check_recommend('long_description', "add a README file") if self.recommend: self.check_recommend('author') self.check_recommend('classifiers') self.check_recommend('download_url') self.check_recommend('license') self.check_recommend('url') if definitions: longest_key = min(24, max(len(key) for key in definitions)) sources = sum((d.sources for d in definitions.values()), []) longest_source = min(32, max(len(s.source) for s in sources)) form = "%%%ss: (%%%ss) %%s" % (longest_key, -longest_source) max_chars = max(60, self.chars - longest_key - longest_source - 5) for definition in sorted(definitions.values()): count = 0 for source in definition.sources: if count: prefix = "\_" elif source.key not in setupmeta.MetaDefs.all_fields: prefix = "%s*" % source.key else: prefix = source.key preview = setupmeta.short(source.value, c=max_chars) print(form % (prefix, source.source, preview)) count += 1
def rendered_attr_auto_bumped(self, version): """ :param Version version: Version to render :return str: Auto-bumped if possible """ value = self.rendered_attr(version) return setupmeta.to_int(value) + 1
def test_parsing(): assert setupmeta.to_int(None) is None assert setupmeta.to_int(None, default=2) == 2 assert setupmeta.to_int('') is None assert setupmeta.to_int('foo') is None assert setupmeta.to_int(['foo']) is None assert setupmeta.to_int([1]) is None assert setupmeta.to_int(1, default=2) == 1 assert setupmeta.to_int(0, default=2) == 0
def test_parsing(): assert setupmeta.to_int(None) is None assert setupmeta.to_int(None, default=2) == 2 assert setupmeta.to_int("") is None assert setupmeta.to_int("foo") is None assert setupmeta.to_int(["foo"]) is None assert setupmeta.to_int([1]) is None assert setupmeta.to_int(1, default=2) == 1 assert setupmeta.to_int(0, default=2) == 0
def parsed_version(text, dirty=None): if text: m = RE_GIT_DESCRIBE.match(text) if m: main = m.group(1) distance = setupmeta.strip_dash(m.group(2)) distance = setupmeta.to_int(distance, default=0) commitid = setupmeta.strip_dash(m.group(3)) if dirty is None: dirty = m.group(4) == "-dirty" return Version(main, distance, commitid, dirty, text) return None
def run(self): if not self.setupmeta: return if self.expand: return self.show_expanded_python() if self.dependencies: return self.show_dependencies() self.chars = setupmeta.to_int(self.chars, default=setupmeta.Console.columns()) definitions = self.setupmeta.definitions self.check_recommend("name") self.check_recommend("version", "you can use setupmeta's versioning='...'") self.check_recommend("description", "add a README or a docstring to your module") self.check_recommend("long_description", "add a README file") if self.recommend: self.check_recommend("author") self.check_recommend("classifiers") self.check_recommend("download_url") self.check_recommend("license") self.check_recommend("url") if definitions: longest_key = min(30, max(len(key) for key in definitions)) sources = sum((d.sources for d in definitions.values()), []) longest_source = min(40, max(len(s.source) for s in sources)) form = "%%%ss: (%%%ss) %%s" % (longest_key, -longest_source) max_chars = max(60, self.chars - longest_key - longest_source - 5) for definition in sorted(definitions.values()): count = 0 for source in definition.sources: if count: prefix = "\\_" elif source.key not in setupmeta.MetaDefs.all_fields: prefix = "%s*" % source.key else: prefix = source.key preview = setupmeta.short(source.value, c=max_chars) s = form % (prefix, setupmeta.short( source.source), preview) print(s) count += 1
def update_sources(self, next_version, commit, push, vdefs): modified = [] for vdef in vdefs.sources: if ".py:" not in vdef.source: continue relative_path, _, target_line = vdef.source.partition(":") full_path = setupmeta.project_path(relative_path) target_line = setupmeta.to_int(target_line, default=0) lines = [] changed = 0 line_number = 0 revised = None with io.open(full_path, "rt") as fh: for line in fh.readlines(): line_number += 1 if line_number == target_line: revised = updated_line(line, next_version, vdef) if revised and revised != line: changed += 1 line = revised lines.append(line) if not changed: print("%s already has the right version" % vdef.source) else: modified.append(relative_path) if commit: with io.open(full_path, "wt") as fh: fh.writelines(lines) else: print("Would update %s with: %s" % (vdef.source, revised.strip())) if not modified: return self.scm.commit_files(commit, push, modified, next_version)
def __init__(self, main=None, distance=0, commitid=None, dirty=False, text=None): """ :param str|None main: Main part of the version (example: "1.0.0") :param int distance: Number of commits since last version tag :param str|None commitid: Current commit id (example: g1234567) :param bool dirty: Whether checkout is dirty or not :param str|None text: Version text as received from SCM """ self.distance = distance or 0 self.commitid = (commitid or "g0000000").strip() self.dirty = ".dirty" if dirty else "" main = (main or "0.0.0").strip() self.text = text or "v%s-%s-%s" % (main, self.distance, self.commitid) components = [setupmeta.to_int(x, default=x) for x in RE_VERSION_COMPONENT.split(main) if x and x.isalnum()] main_triplet = [] additional = [] qualifier = "" for component in components: if not isinstance(component, int): qualifier = "%s%s" % (qualifier, component) continue if not additional and not qualifier and len(main_triplet) < 3: main_triplet.append(component) continue if qualifier is not None: component = "%s%s" % (qualifier, component) qualifier = "" additional.append(component) while len(main_triplet) < 3: main_triplet.append(0) if qualifier: additional.append(qualifier) self.major, self.minor, self.patch = main_triplet self.additional = ".".join(additional)