python-kacl 0.7.2__py3-none-any.whl → 0.7.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
kacl/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
1
  # Version of the python-kacl package
2
- __version__ = "0.7.2"
2
+ __version__ = "0.7.4"
3
3
 
4
4
  from kacl.document import KACLDocument
5
5
  from kacl.serializer import KACLMarkdownSerializer
kacl/document.py CHANGED
@@ -30,7 +30,7 @@ class KACLDocument:
30
30
  link_references=None,
31
31
  meta_data=None,
32
32
  file_path=None,
33
- config=KACLConfig(),
33
+ config=None,
34
34
  ):
35
35
  self.__data = data
36
36
  self.__headers = headers if headers else []
@@ -39,7 +39,7 @@ class KACLDocument:
39
39
  if not self.__link_references:
40
40
  self.__link_references = dict()
41
41
  self.__meta_data = meta_data
42
- self.config = config
42
+ self.config = config if config is not None else KACLConfig()
43
43
  self.stash = []
44
44
  self.file_path = file_path
45
45
 
@@ -82,6 +82,9 @@ class KACLDocument:
82
82
  data = fh.read()
83
83
  try:
84
84
  doc = KACLDocument.parse(data, None)
85
+ # stash documents must be validated against the same
86
+ # config as the changelog they belong to
87
+ doc.config = self.config
85
88
  self.stash.append(doc)
86
89
  except Exception:
87
90
  continue
@@ -205,7 +208,7 @@ class KACLDocument:
205
208
  try:
206
209
  v0 = versions[i]
207
210
  v1 = versions[i + 1]
208
- if semver.VersionInfo.compare(v0.version(), v1.version()) < 1:
211
+ if semver.Version.parse(v0.version()).compare(v1.version()) < 1:
209
212
  validation.add_error(
210
213
  line=v1.raw(),
211
214
  line_number=v1.line_number(),
@@ -502,7 +505,11 @@ class KACLDocument:
502
505
 
503
506
  if auto_link:
504
507
  link_provider = self.__get_link_provider()
505
- for i in range(2):
508
+ # Only process the versions we just added/modified
509
+ # If add_unreleased=True: process Unreleased (index 0) and new version (index 1)
510
+ # If add_unreleased=False: only process new version (index 0)
511
+ versions_to_link = 2 if self.config.add_unreleased else 1
512
+ for i in range(versions_to_link):
506
513
  fargs = {
507
514
  "version": self.__versions[i].version(),
508
515
  "previous_version": None,
@@ -615,7 +622,12 @@ class KACLDocument:
615
622
  versions[i].set_link(link_provider.unreleased_changes(**fargs))
616
623
  else:
617
624
  versions[i].set_link(link_provider.compare_versions(**fargs))
618
- versions[-1].set_link(link_provider.initial_version(**fargs))
625
+ versions[-1].set_link(
626
+ link_provider.initial_version(
627
+ version=versions[-1].version(),
628
+ latest_version=self.current_version(),
629
+ )
630
+ )
619
631
  elif len(versions) == 1:
620
632
  fargs = {
621
633
  "version": versions[0].version(),
kacl/kacl_cli.py CHANGED
@@ -244,7 +244,12 @@ def next(ctx, version):
244
244
  is_flag=True,
245
245
  help="This option suppresses a link, even if available.",
246
246
  )
247
- def get(ctx, version, no_link):
247
+ @click.option(
248
+ "--no-header",
249
+ is_flag=True,
250
+ help="This option suppresses the header and link.",
251
+ )
252
+ def get(ctx, version, no_link, no_header):
248
253
  """Returns a given version from the Changelog."""
249
254
  kacl_changelog = load_changelog(ctx)
250
255
 
@@ -252,10 +257,14 @@ def get(ctx, version, no_link):
252
257
  kacl_version = kacl_changelog.get(version)
253
258
 
254
259
  if kacl_version:
255
- if no_link:
256
- kacl_version.set_link(None)
257
- kacl_changelog_content = kacl.dump(kacl_version)
258
- click.echo(kacl_changelog_content)
260
+ if no_header:
261
+ kacl_changelog_content = kacl.dump(kacl_version.sections())
262
+ click.echo(kacl_changelog_content)
263
+ else:
264
+ if no_link:
265
+ kacl_version.set_link(None)
266
+ kacl_changelog_content = kacl.dump(kacl_version)
267
+ click.echo(kacl_changelog_content)
259
268
  else:
260
269
  click.echo(
261
270
  click.style("Error: ", fg="red")
kacl/serializer.py CHANGED
@@ -36,6 +36,15 @@ class KACLMarkdownSerializer:
36
36
  if document.has_link_reference():
37
37
  link_references.append(self.__serialize_link_reference(document))
38
38
 
39
+ elif isinstance(document, dict):
40
+ # Validate that the dict contains KACLChanges objects (from version.sections())
41
+ if document and all(isinstance(v, KACLChanges) for v in document.values()):
42
+ data.extend([self.__serialize_sections(document), ""])
43
+ else:
44
+ raise TypeError(
45
+ "Dict input must contain KACLChanges objects (from version.sections())"
46
+ )
47
+
39
48
  data.extend(link_references)
40
49
 
41
50
  if data[-1] != "":
@@ -72,7 +81,17 @@ class KACLMarkdownSerializer:
72
81
 
73
82
  def __serialize_version(self, obj):
74
83
  lines = [self.__serialize_header(obj), ""]
75
- for title, changes in obj.sections().items():
84
+ lines.append(self.__serialize_sections(obj.sections()))
85
+ return "\n".join(lines).strip()
86
+
87
+ def __serialize_sections(self, sections_dict):
88
+ """Serialize a dictionary of section title -> KACLChanges.
89
+
90
+ Used by both __serialize_version (for full version with header)
91
+ and for standalone sections (for --no-header output).
92
+ """
93
+ lines = []
94
+ for title, changes in sections_dict.items():
76
95
  lines.extend(
77
96
  [
78
97
  self.__serialize_header(changes),
@@ -81,7 +100,6 @@ class KACLMarkdownSerializer:
81
100
  "",
82
101
  ]
83
102
  )
84
-
85
103
  return "\n".join(lines).strip()
86
104
 
87
105
  def __serialize_list(self, obj):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-kacl
3
- Version: 0.7.2
3
+ Version: 0.7.4
4
4
  Summary: Python module and CLI tool for validating and modifying Changelogs in "keep-a-changelog" format"
5
5
  Author-email: Matthias Schmieder <schmieder.matthias@gmail.com>
6
6
  License: MIT
@@ -1,22 +1,22 @@
1
- kacl/__init__.py,sha256=a9OB0XDXEUnOYCDzHxN6YiQ58IrTOubzTfFXVmghz7M,667
1
+ kacl/__init__.py,sha256=nnerstRMbRV15Yzvsk9DPZlAbVvFmuCI5ff5Zogv_pc,667
2
2
  kacl/__main__.py,sha256=cpulIGoFUJNN5ZW9oUoNN1PnBvrOyJ24xwtpf_yRwgQ,91
3
3
  kacl/changes.py,sha256=Speu1KLMNQVn0U2BMaO8ta4IEaQLTQtpW0IhN0JjGdY,704
4
4
  kacl/config.py,sha256=c2QiP-BriJJwzrw36oigJWKe6t4o6yhmN_nPSL6bcRk,4242
5
- kacl/document.py,sha256=jyltUjNWp67t54DMkBudOd3btX2awLJgGKDPvbyoMOo,30733
5
+ kacl/document.py,sha256=RtkIDx4eEQIerLkj1khIvLmAp2PdeAMnCEW47euXa9M,31424
6
6
  kacl/element.py,sha256=OG02QI8ND5fJpBMceT6dbIHr4uX9gLxK_fPCsOvMDHI,416
7
7
  kacl/exception.py,sha256=MfOVpUvhcQtm10rSY__74-oLo445PG8mLFGJPPIfXH0,41
8
8
  kacl/jira_client.py,sha256=KPE94bZDkJFKw3okFsCgf2DjoyMlUUTMZKtQGKreVQY,989
9
- kacl/kacl_cli.py,sha256=kUDssIf5SH6ppQxil8ESplUw6ejyj6srW6nOfXqLD0Y,23688
9
+ kacl/kacl_cli.py,sha256=WdAhN4seDw-myafYaBn83drH33kbztUhnNPxr4BSbWw,23980
10
10
  kacl/link_provider.py,sha256=tgvMYhJe2ErH1m_qXMlQEacq9Cg_KGp_-sF03sVFP6E,1866
11
11
  kacl/parser.py,sha256=EUtRjgaW0beWVqiYaRJ9Rcf6jbuGoTgWzVBdOdUHnv8,2587
12
- kacl/serializer.py,sha256=PdR2FFCh9rbBhkxXwUYD0fSjQqTG_Mb6mYws3lNAWQ8,3090
12
+ kacl/serializer.py,sha256=g5eFim8OpSbgyShyFANSwOEbAfJqCNUXaRJtPO79blc,3931
13
13
  kacl/utils.py,sha256=4iWIJVNtv22v0IGXDjuEATPMQsJBr5Ycy9Q2zV2jkHE,2835
14
14
  kacl/validation.py,sha256=b9r_5CyY6Cmi9BePh47IgZ3j64zdVsoB_fFvucieNbw,2125
15
15
  kacl/version.py,sha256=IDYCWIIXzxdYyMptUAidMgf0SXJqoETFVJ8NVyKgA9A,9526
16
16
  kacl/config/kacl-default.yml,sha256=cXHl_w04SW0HA7OyJMMuaC6DTeXlhI2Sfsx7lygTPf4,1513
17
- python_kacl-0.7.2.dist-info/licenses/LICENSE,sha256=TRSJOIt7LZuMeZXFleJVL_LHczSxqi70HEiTLT-kI8Q,1075
18
- python_kacl-0.7.2.dist-info/METADATA,sha256=Mocj5ub2iwUjpPJOlbullX5IJ4_MvmxABHoDlNbFsuw,42453
19
- python_kacl-0.7.2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
20
- python_kacl-0.7.2.dist-info/entry_points.txt,sha256=rXqqJKfm6Y7fYfioq_7ay2VWOOM9C-hts1IsoGTtojM,76
21
- python_kacl-0.7.2.dist-info/top_level.txt,sha256=BcmQgo67JyGnVZ3Jc0Ag8hKMGVOqXc8ex01zW4Njw5M,5
22
- python_kacl-0.7.2.dist-info/RECORD,,
17
+ python_kacl-0.7.4.dist-info/licenses/LICENSE,sha256=TRSJOIt7LZuMeZXFleJVL_LHczSxqi70HEiTLT-kI8Q,1075
18
+ python_kacl-0.7.4.dist-info/METADATA,sha256=oUDaurtowv1UTAOj5UX56gj02_LepuwhzEb7Q0xporA,42453
19
+ python_kacl-0.7.4.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
20
+ python_kacl-0.7.4.dist-info/entry_points.txt,sha256=rXqqJKfm6Y7fYfioq_7ay2VWOOM9C-hts1IsoGTtojM,76
21
+ python_kacl-0.7.4.dist-info/top_level.txt,sha256=BcmQgo67JyGnVZ3Jc0Ag8hKMGVOqXc8ex01zW4Njw5M,5
22
+ python_kacl-0.7.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (82.0.1)
2
+ Generator: setuptools (84.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5