code-annotations 2.2.0__py2.py3-none-any.whl → 2.3.2__py2.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.
@@ -2,4 +2,4 @@
2
2
  Extensible tools for parsing annotations in codebases.
3
3
  """
4
4
 
5
- __version__ = '2.2.0'
5
+ __version__ = "2.3.2"
code_annotations/base.py CHANGED
@@ -14,6 +14,9 @@ from code_annotations import annotation_errors
14
14
  from code_annotations.exceptions import ConfigurationException
15
15
  from code_annotations.helpers import VerboseEcho
16
16
 
17
+ PACKAGE_DIR = os.path.dirname(os.path.realpath(__file__))
18
+ DEFAULT_TEMPLATE_DIR = os.path.join(PACKAGE_DIR, "report_templates")
19
+
17
20
 
18
21
  class AnnotationConfig:
19
22
  """
@@ -58,10 +61,17 @@ class AnnotationConfig:
58
61
  self.echo(f"Configured for source path: {self.source_path}")
59
62
 
60
63
  self._configure_coverage(raw_config.get('coverage_target', None))
61
- self.report_template_dir = raw_config.get('report_template_dir')
62
- self.rendered_report_dir = raw_config.get('rendered_report_dir')
63
- self.rendered_report_file_extension = raw_config.get('rendered_report_file_extension')
64
- self.rendered_report_source_link_prefix = raw_config.get('rendered_report_source_link_prefix')
64
+
65
+ self.rendered_report_format = raw_config.get('rendered_report_format', 'rst')
66
+ self.report_template_dir = raw_config.get(
67
+ 'report_template_dir',
68
+ os.path.join(DEFAULT_TEMPLATE_DIR, self.rendered_report_format)
69
+ )
70
+ self.rendered_report_dir = raw_config.get('rendered_report_dir', 'annotation_reports')
71
+ self.rendered_report_source_link_prefix = raw_config.get('rendered_report_source_link_prefix', None)
72
+ self.trim_filename_prefixes = raw_config.get('trim_filename_prefixes', [])
73
+ self.third_party_package_location = raw_config.get('third_party_package_location', "site-packages")
74
+ self.rendered_report_file_extension = f".{self.rendered_report_format}"
65
75
 
66
76
  self._configure_annotations(raw_config)
67
77
  self._configure_extensions()
code_annotations/cli.py CHANGED
@@ -241,10 +241,15 @@ def generate_docs(config_file, verbosity, report_files):
241
241
  try:
242
242
  config = AnnotationConfig(config_file, verbosity)
243
243
 
244
+ if not report_files:
245
+ raise ConfigurationException(
246
+ "No report files provided. Please provide one or more report files to generate docs from."
247
+ )
248
+
244
249
  for key in (
245
250
  "report_template_dir",
246
251
  "rendered_report_dir",
247
- "rendered_report_file_extension",
252
+ "rendered_report_format",
248
253
  "rendered_report_source_link_prefix",
249
254
  ):
250
255
  if not getattr(config, key):
@@ -27,8 +27,7 @@ class ReportRenderer:
27
27
  self.config = config
28
28
  self.echo = self.config.echo
29
29
  self.report_files = report_files
30
- self.create_time = datetime.datetime.utcnow().isoformat()
31
-
30
+ self.create_time = datetime.datetime.now(tz=datetime.timezone.utc)
32
31
  self.full_report = self._aggregate_reports()
33
32
 
34
33
  self.jinja_environment = jinja2.Environment(
@@ -62,6 +61,12 @@ class ReportRenderer:
62
61
  loaded_report = yaml.safe_load(report_file)
63
62
 
64
63
  for filename in loaded_report:
64
+ trimmed_filename = filename
65
+ for prefix in self.config.trim_filename_prefixes:
66
+ if filename.startswith(prefix):
67
+ trimmed_filename = filename[len(prefix):]
68
+ break
69
+
65
70
  if filename in report:
66
71
  for loaded_annotation in loaded_report[filename]:
67
72
  found = False
@@ -74,9 +79,9 @@ class ReportRenderer:
74
79
  break
75
80
 
76
81
  if not found:
77
- report[filename].append(loaded_annotation)
82
+ report[trimmed_filename].append(loaded_annotation)
78
83
  else:
79
- report[filename] = loaded_report[filename]
84
+ report[trimmed_filename] = loaded_report[filename]
80
85
 
81
86
  def _aggregate_reports(self):
82
87
  """
@@ -91,11 +96,12 @@ class ReportRenderer:
91
96
 
92
97
  return report
93
98
 
94
- def _write_doc_file(self, doc_filename, doc_data):
99
+ def _write_doc_file(self, doc_title, doc_filename, doc_data):
95
100
  """
96
101
  Write out a single report file with the given data. This is rendered using the configured top level template.
97
102
 
98
103
  Args:
104
+ doc_title: Title to use for the document.
99
105
  doc_filename: Filename to write to.
100
106
  doc_data: Dict of reporting data to use, in the {'file name': [list, of, annotations,]} style.
101
107
  """
@@ -110,14 +116,16 @@ class ReportRenderer:
110
116
 
111
117
  with open(full_doc_filename, 'w') as output:
112
118
  output.write(self.top_level_template.render(
119
+ doc_title=doc_title,
113
120
  create_time=self.create_time,
114
121
  report=doc_data,
115
122
  all_choices=self.all_choices,
116
123
  all_annotations=self.config.annotation_tokens,
117
124
  group_mapping=self.group_mapping,
118
125
  slugify=slugify,
119
- source_link_prefix=self.config.rendered_report_source_link_prefix)
120
- )
126
+ source_link_prefix=self.config.rendered_report_source_link_prefix,
127
+ third_party_package_location=self.config.third_party_package_location,
128
+ ))
121
129
 
122
130
  def _generate_per_choice_docs(self):
123
131
  """
@@ -130,7 +138,7 @@ class ReportRenderer:
130
138
  if isinstance(annotation['annotation_data'], list) and choice in annotation['annotation_data']:
131
139
  choice_report[filename].append(annotation)
132
140
 
133
- self._write_doc_file(f'choice_{choice}', choice_report)
141
+ self._write_doc_file(f"All References to Choice '{choice}'", f'choice_{choice}', choice_report)
134
142
 
135
143
  def _generate_per_annotation_docs(self):
136
144
  """
@@ -143,13 +151,15 @@ class ReportRenderer:
143
151
  if report_annotation['annotation_token'] == annotation:
144
152
  annotation_report[filename].append(report_annotation)
145
153
 
146
- self._write_doc_file(f'annotation_{annotation}', annotation_report)
154
+ self._write_doc_file(
155
+ f"All References to Annotation '{annotation}'", f'annotation_{annotation}', annotation_report
156
+ )
147
157
 
148
158
  def render(self):
149
159
  """
150
160
  Perform the rendering of all documentation using the configured Jinja2 templates.
151
161
  """
152
162
  # Generate the top level list of all annotations
153
- self._write_doc_file('index', self.full_report)
163
+ self._write_doc_file("Complete Annotation List", 'index', self.full_report)
154
164
  self._generate_per_choice_docs()
155
165
  self._generate_per_annotation_docs()
@@ -0,0 +1,14 @@
1
+ {% if is_third_party %}
2
+ {# no links for third party code since we don't know where to link to #}
3
+ {% if annotation.extra and annotation.extra.object_id %}
4
+ {{ annotation.extra.object_id }} {% if annotation.line_number > 0 %}line {{ annotation.line_number }}{% endif %}: {{ annotation.annotation_token }} {% include "annotation_data.tpl" %}
5
+ {% else %}
6
+ {% if loop.changed(annotation.line_number)%}{{ filename }}:{{ annotation.line_number }}<br />{% endif %}:
7
+ {{ annotation.annotation_token }} {% include "annotation_data.tpl" %}
8
+ {% endif %}
9
+
10
+ {% elif annotation.extra and annotation.extra.object_id %}
11
+ <a href="{{ source_link_prefix }}{{ filename }}#L{{ annotation.line_number }}" target="_blank">{{ annotation.extra.object_id }} {% if annotation.line_number > 0 %}line {{ annotation.line_number }}{% endif %}</a>: {{ annotation.annotation_token }} {% include "annotation_data.tpl" %}
12
+ {% else %}
13
+ <a href="{{ source_link_prefix }}{{ filename }}#L{{ annotation.line_number }}" target="_blank">`{{ filename }}:{{ annotation.line_number }}: {{ annotation.annotation_token }} {% include "annotation_data.tpl" %}
14
+ {% endif %}
@@ -0,0 +1,8 @@
1
+ {% if annotation.annotation_data is sequence and annotation.annotation_data is not string %}
2
+ {% for a in annotation.annotation_data %}
3
+ <a href="choice-{{ slugify(a) }}.html">{{ a }}</a>{% if not loop.last %}, {% endif %}
4
+ {% endfor %}
5
+
6
+ {% else %}
7
+ {{ annotation.annotation_data }}
8
+ {% endif %}
@@ -0,0 +1,27 @@
1
+ {% extends "base.tpl" %}
2
+ {% block content %}
3
+ Annotations found in {{ report|length }} files.
4
+
5
+ {% for filename in report %}
6
+ {% set is_third_party = third_party_package_location in filename %}
7
+
8
+ <h2 id="file-{{ slugify(filename) }}">{{ filename }}</h2>
9
+ <div class="file-annotations">
10
+ {{ report[filename]|length }} annotations {% if is_third_party %}(installed package){% endif %}<br />
11
+ </div>
12
+
13
+ {% for annotation in report[filename] %}
14
+ {% if loop.changed(annotation.report_group_id) %}
15
+ {% if not loop.first %}</ul></div>{% endif %}
16
+ <div class="group-annotations"><ul>
17
+ {% endif %}
18
+ <li>{% include 'annotation.tpl' %}</li>
19
+ {% if loop.last %}
20
+ </ul></div>
21
+ {% endif %}
22
+ {% endfor %}
23
+
24
+
25
+ {% endfor %}
26
+
27
+ {% endblock %}
@@ -0,0 +1,92 @@
1
+ <html>
2
+ <head>
3
+ <title>{{ doc_title }}</title>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <style>
6
+ body {
7
+ font-family: 'Trebuchet MS', sans-serif;
8
+ }
9
+
10
+ .title {
11
+ text-align: center;
12
+ }
13
+
14
+ .table {
15
+ display: table;
16
+ border-spacing: 12px;
17
+ }
18
+
19
+ .row {
20
+ display: table-row;
21
+ margin-bottom: 0;
22
+ margin-top: 0;
23
+ width: 100%;
24
+ }
25
+
26
+ .cell1 {
27
+ display: table-cell;
28
+ width: 20%;
29
+ margin-right: 1%;
30
+ border: 1px solid #ccc;
31
+ margin 12px;
32
+ background-color: #ffffee;
33
+ }
34
+
35
+ .cell2 {
36
+ display: table-cell;
37
+ width: 79%;
38
+ margin-right: 1%;
39
+ margin 12px;
40
+ }
41
+
42
+ .group-annotations {
43
+ border: 1px solid #ccc;
44
+ margin: 10px;
45
+ }
46
+ </style>
47
+ </head>
48
+ <body>
49
+ <h1 class="title">{{ doc_title }}</h1>
50
+
51
+ <div class="table">
52
+ <div class="row">
53
+ <div class="cell1">
54
+ <h3><a href="index.html">Home</a></h3>
55
+
56
+ <h3>Annotations</h3>
57
+
58
+ <ul>
59
+ {% for a in all_annotations %}
60
+ <li><a href="annotation-{{ slugify(a) }}.html">annotation_{{ slugify(a) }}</a></li>
61
+ {% endfor %}
62
+ </ul>
63
+
64
+ <h3>Choices</h3>
65
+
66
+ <ul>
67
+ {% for choice in all_choices %}
68
+ <li><a href="choice-{{ slugify(choice) }}.html">choice_{{ slugify(choice) }}</a></li>
69
+ {% endfor %}
70
+ </ul>
71
+ </div>
72
+ <div class="cell2">
73
+ <h2>Files in this page</h2>
74
+ <ul>
75
+ {% for filename in report %}
76
+ <li><a href="#file-{{ slugify(filename) }}">{{ filename }}</a></li>
77
+ {% endfor %}
78
+ </ul>
79
+
80
+ {% block content %}{% endblock %}
81
+ </div>
82
+ </div>
83
+ </div>
84
+ {% block footer %}
85
+ <div class="footer">
86
+ <br /><br />
87
+ <hr />
88
+ Built at {{ create_time.strftime('%Y-%m-%d %H:%M:%S %Z') }}
89
+ </div>
90
+ {% endblock %}
91
+ </body>
92
+ </html>
@@ -0,0 +1,13 @@
1
+ {% if is_third_party %}
2
+ {# no links for third party code since we don't know where to link to #}
3
+ {% if annotation.extra and annotation.extra.object_id %}
4
+ {{ annotation.extra.object_id }} {% if annotation.line_number > 0 %}line {{ annotation.line_number }}{% endif %}: {{ annotation.annotation_token }} {% include "annotation_data.tpl" %}
5
+ {% else %}
6
+ {{ filename }}:{{ annotation.line_number }}: {{ annotation.annotation_token }} {% include "annotation_data.tpl" %}
7
+ {% endif %}
8
+
9
+ {% elif annotation.extra and annotation.extra.object_id %}
10
+ `{{ annotation.extra.object_id }} {% if annotation.line_number > 0 %}line {{ annotation.line_number }}{% endif %} <{{ source_link_prefix }}{{ filename }}#L{{ annotation.line_number }}>`_: {{ annotation.annotation_token }} {% include "annotation_data.tpl" %}
11
+ {% else %}
12
+ `{{ filename }}:{{ annotation.line_number }} <{{ source_link_prefix }}{{ filename }}#L{{ annotation.line_number }}>`_: {{ annotation.annotation_token }} {% include "annotation_data.tpl" %}
13
+ {% endif %}
@@ -0,0 +1,8 @@
1
+ {% if annotation.annotation_data is sequence and annotation.annotation_data is not string %}
2
+ {% for a in annotation.annotation_data %}
3
+ choice_{{ slugify(a) }}_{% if not loop.last %}, {% endif %}
4
+ {% endfor %}
5
+
6
+ {% else %}
7
+ {{ annotation.annotation_data }}
8
+ {% endif %}
@@ -0,0 +1,2 @@
1
+ .. _index.rst#{{ slugify(filename + '-' + annotation.report_group_id |string) }}:
2
+ .. admonition:: {{ group_mapping[annotation.annotation_token] or annotation.annotation_token }}
@@ -0,0 +1,34 @@
1
+ {% extends "base.tpl" %}
2
+ {% block content %}
3
+ Annotations found in {{ report|length }} files.
4
+
5
+ {% for filename in report %}
6
+ {% set is_third_party = third_party_package_location in filename %}
7
+
8
+ {{ filename }}
9
+ {{ "-" * filename|length }}
10
+
11
+ .. note:: {{ report[filename]|length }} annotations {% if is_third_party %}(installed package){% endif %}
12
+
13
+
14
+ {% for annotation in report[filename] %}
15
+ {% if annotation.report_group_id %}
16
+ {% if loop.changed(annotation.report_group_id) %}
17
+ {% include 'annotation_group.tpl' %}
18
+
19
+
20
+ {% endif %}
21
+ * {% include 'annotation.tpl' %}
22
+
23
+ {% else %}
24
+ {% if loop.changed(annotation.report_group_id) %}
25
+
26
+ {% endif %}
27
+ * {% include 'annotation.tpl' %}
28
+
29
+ {% endif %}
30
+ {% endfor %}
31
+
32
+ {% endfor %}
33
+
34
+ {% endblock %}
@@ -0,0 +1,41 @@
1
+ {{ "#" * doc_title|length }}
2
+ {{ doc_title }}
3
+ {{ "#" * doc_title|length }}
4
+
5
+ .. sidebar:: Table of Contents
6
+
7
+ `Home <index.rst>`_
8
+
9
+ Annotations
10
+
11
+ {% for a in all_annotations %}
12
+ * annotation_{{ slugify(a) }}_
13
+ {% endfor %}
14
+
15
+ Choices
16
+
17
+ {% for choice in all_choices %}
18
+ * choice_{{ slugify(choice) }}_
19
+ {% endfor %}
20
+
21
+
22
+ .. contents::
23
+
24
+ {% block content %}{% endblock %}
25
+
26
+
27
+ {# backlinks for all choices #}
28
+ {% for choice in all_choices %}
29
+ .. _choice_{{ slugify(choice) }}: {{ slugify('choice_' + choice) + '.rst' }}
30
+ {% endfor %}
31
+
32
+
33
+ {# backlinks for all annotations #}
34
+ {% for annotation in all_annotations %}
35
+ .. _annotation_{{ slugify(annotation) }}: {{ slugify('annotation_' + annotation) + '.rst' }}
36
+ {% endfor %}
37
+
38
+
39
+ {% block footer %}
40
+ Built at {{ create_time.strftime('%Y-%m-%d %H:%M:%S %Z') }}
41
+ {% endblock %}
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: code-annotations
3
- Version: 2.2.0
3
+ Version: 2.3.2
4
4
  Summary: Extensible tools for parsing annotations in codebases
5
5
  Home-page: https://github.com/openedx/code-annotations
6
6
  Author: edX
@@ -10,6 +10,7 @@ Keywords: edx pii code annotations
10
10
  Classifier: Development Status :: 3 - Alpha
11
11
  Classifier: Framework :: Django
12
12
  Classifier: Framework :: Django :: 4.2
13
+ Classifier: Framework :: Django :: 5.2
13
14
  Classifier: Intended Audience :: Developers
14
15
  Classifier: License :: OSI Approved :: Apache Software License
15
16
  Classifier: Natural Language :: English
@@ -21,11 +22,11 @@ Requires-Python: >=3.11
21
22
  Description-Content-Type: text/x-rst
22
23
  License-File: LICENSE.txt
23
24
  License-File: NOTICE.txt
24
- Requires-Dist: pyyaml
25
25
  Requires-Dist: click
26
+ Requires-Dist: python-slugify
26
27
  Requires-Dist: Jinja2
28
+ Requires-Dist: pyyaml
27
29
  Requires-Dist: stevedore
28
- Requires-Dist: python-slugify
29
30
  Provides-Extra: django
30
31
  Requires-Dist: Django>=4.2; extra == "django"
31
32
  Dynamic: author
@@ -36,6 +37,7 @@ Dynamic: description-content-type
36
37
  Dynamic: home-page
37
38
  Dynamic: keywords
38
39
  Dynamic: license
40
+ Dynamic: license-file
39
41
  Dynamic: provides-extra
40
42
  Dynamic: requires-dist
41
43
  Dynamic: requires-python
@@ -44,9 +46,6 @@ Dynamic: summary
44
46
  code-annotations
45
47
  =============================
46
48
 
47
- |pypi-badge| |CI| |codecov-badge| |doc-badge| |pyversions-badge|
48
- |license-badge|
49
-
50
49
  Extensible tools for parsing annotations in codebases
51
50
 
52
51
  Overview
@@ -100,31 +99,6 @@ refer to this `list of resources`_ if you need any assistance.
100
99
  .. _list of resources: https://open.edx.org/getting-help
101
100
 
102
101
 
103
- .. |pypi-badge| image:: https://img.shields.io/pypi/v/code-annotations.svg
104
- :target: https://pypi.python.org/pypi/code-annotations/
105
- :alt: PyPI
106
-
107
- .. |CI| image:: https://github.com/openedx/code-annotations/workflows/Python%20CI/badge.svg?branch=master
108
- :target: https://github.com/openedx/code-annotations/actions?query=workflow%3A%22Python+CI%22
109
- :alt: CI
110
-
111
- .. |codecov-badge| image:: http://codecov.io/github/edx/code-annotations/coverage.svg?branch=master
112
- :target: http://codecov.io/github/edx/code-annotations?branch=master
113
- :alt: Codecov
114
-
115
- .. |doc-badge| image:: https://readthedocs.org/projects/code-annotations/badge/?version=latest
116
- :target: http://code-annotations.readthedocs.io/en/latest/
117
- :alt: Documentation
118
-
119
- .. |pyversions-badge| image:: https://img.shields.io/pypi/pyversions/code-annotations.svg
120
- :target: https://pypi.python.org/pypi/code-annotations/
121
- :alt: Supported Python versions
122
-
123
- .. |license-badge| image:: https://img.shields.io/github/license/edx/code-annotations.svg
124
- :target: https://github.com/openedx/code-annotations/blob/master/LICENSE.txt
125
- :alt: License
126
-
127
-
128
102
  Change Log
129
103
  ----------
130
104
 
@@ -141,6 +115,11 @@ Change Log
141
115
  Unreleased
142
116
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
143
117
 
118
+ [2.3.2] - 2026-03-02
119
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
120
+
121
+ * Dot release to capture many requirements updates.
122
+
144
123
  [2.2.0] - 2025-01-15
145
124
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
146
125
 
@@ -0,0 +1,38 @@
1
+ code_annotations/__init__.py,sha256=ij9AfbvreDvJ4wkfHHu4h7QNIw1ImgJNOe4L6ylKzTQ,86
2
+ code_annotations/annotation_errors.py,sha256=v3xFxAU_vuISeksMAE-OflcV4NQ2yMn-i81nWYRQRjA,2313
3
+ code_annotations/base.py,sha256=Bj28QihddIYuU_2FLzLCLb6WQn0YC69E4b2iMZq9oZ8,24125
4
+ code_annotations/cli.py,sha256=FoUB-tYqx7cGn3mRKwbXmASio1H-9dk0Zh_pRKhXYuo,8602
5
+ code_annotations/exceptions.py,sha256=zNjJ0yibWesstKY4k-bp6cq9HEWwwrUYT0V9Exrcta4,173
6
+ code_annotations/find_django.py,sha256=baD-TO36cf-KnISElFxOADWB1ltSKFJj9hiH7SlPjEs,17827
7
+ code_annotations/find_static.py,sha256=RLK_5ewmX2BWXxRiC7LSBe-Xmfz6zMAUdxvalAywQl8,3689
8
+ code_annotations/generate_docs.py,sha256=Wm-vKODRdu2DTO5yO1QH2UFwrLlMkXsSfULruX8h3So,6137
9
+ code_annotations/helpers.py,sha256=0FHAAZ9KHMwwfjj9i-qToOEECwteCgCq2XQ8MBYPhtk,5687
10
+ code_annotations/contrib/config/__init__.py,sha256=5zthEHAhALT0-1lUfGvxA-x3urzYi7T7f17wsCeUrZM,616
11
+ code_annotations/contrib/config/feature_toggle_annotations.yaml,sha256=MGN6wxTUv-Mvfw-OhvAIbxCTOYx5Z1TVI5Qc3ECioQs,1053
12
+ code_annotations/contrib/config/openedx_events_annotations.yaml,sha256=Pnmb3Iqy8ut0XtHEsINbzQXKtTpLzgFqqheV1wp22Nc,614
13
+ code_annotations/contrib/config/setting_annotations.yaml,sha256=gRftQVBd9YE0RjBXYLwqMmAl4vCX4cNqOlC7nGquYts,279
14
+ code_annotations/contrib/sphinx/extensions/__init__.py,sha256=47ufX1v15HMstSWMXY8_DD3cfnxMeq9h-moQlfVgAlU,93
15
+ code_annotations/contrib/sphinx/extensions/base.py,sha256=sWCxnTwZv8XJJeeOIRmEZFAP34Pc6UQAc5JnVVaLSuU,1562
16
+ code_annotations/contrib/sphinx/extensions/featuretoggles.py,sha256=iXzilGIJUG7_iCe1EFTN5Sm7-wB-h60F6r-xLenO0tU,4774
17
+ code_annotations/contrib/sphinx/extensions/openedx_events.py,sha256=hAj1FcMCfb4wq3V2sr2gjpcJiBM1BIKTzMGzBtTFblE,6579
18
+ code_annotations/contrib/sphinx/extensions/settings.py,sha256=4gUmCqxwOeDJVYP9uFTOGD5hE7zDtLH-B4s8kyoiuas,4764
19
+ code_annotations/extensions/__init__.py,sha256=EVmxV7dIeD-pzIylI267X-ZoyePHskRyEvxI0aNz0Ts,60
20
+ code_annotations/extensions/base.py,sha256=Upd71QuT19IDRo_2BL4KygGivBbi2LArj93FyQT_lcA,6629
21
+ code_annotations/extensions/javascript.py,sha256=UTamL-EIpqL3dSZ70whOY4Vc6mfXDmDKzvSfRHNLA8M,495
22
+ code_annotations/extensions/python.py,sha256=BGKXWwWXb4Y45vnOUysCzj2_JuSzL3ZkifUw5SdGDWA,480
23
+ code_annotations/report_templates/html/annotation.tpl,sha256=gKlfaNaamZ6-BbQ9ruMyfxpcltOGikpBH46zBWZucjs,1122
24
+ code_annotations/report_templates/html/annotation_data.tpl,sha256=JGP25K4GtNKUPOCNwEku0S2VeZh0jahEPoNBkkmoEiA,291
25
+ code_annotations/report_templates/html/annotation_list.tpl,sha256=c2ZmioLn-OPwa9moFUCaIzV4fzALJPD9WUf-1YP7Sx0,807
26
+ code_annotations/report_templates/html/base.tpl,sha256=D7Vtdal1F7VaAJxlGE6EnvqbQ-YensPbvnO80h75x_w,1992
27
+ code_annotations/report_templates/rst/annotation.tpl,sha256=va-zD8zfE7IprsmOvF87V_yKgAMUBYm2IR_nfgUyYgw,1006
28
+ code_annotations/report_templates/rst/annotation_data.tpl,sha256=TMczehwIqsNgyNavCDqmBcZNV73klCKJ9t5UBmncA34,265
29
+ code_annotations/report_templates/rst/annotation_group.tpl,sha256=wzX8bTvC9qeRUh4ivZ6EY5SsrcXF3bgZp_yPil5flF4,178
30
+ code_annotations/report_templates/rst/annotation_list.tpl,sha256=ybv4Rc4Fh9Cs2gtYkXAzdHBLXvgJ-K5xgu8lD5L6V_k,823
31
+ code_annotations/report_templates/rst/base.tpl,sha256=wiASiQzId0ncfC9Bepo-fEt-SKxxmNCdANR3t1i6bIM,834
32
+ code_annotations-2.3.2.dist-info/licenses/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
33
+ code_annotations-2.3.2.dist-info/licenses/NOTICE.txt,sha256=-XAPwl96IlATsvyACaZ3_DvTGE57HY5I32Zqz0dGTnc,545
34
+ code_annotations-2.3.2.dist-info/METADATA,sha256=xpiyop6utWr5ya1Fo0n0pL_oY_bZqrrWodbYyovJRX0,8742
35
+ code_annotations-2.3.2.dist-info/WHEEL,sha256=uC7DnXjtoKy23CNUXRq6ohLsm8FbS2C_ECfYYzqZHVY,109
36
+ code_annotations-2.3.2.dist-info/entry_points.txt,sha256=pdI65Ll9o_ySSdwi817OWs9zvrtFDBmTWoQPjx6_d58,253
37
+ code_annotations-2.3.2.dist-info/top_level.txt,sha256=IN-c3H7bbdC5XWsfJJglDUCR7EXhxqZcKefmOAolIBI,17
38
+ code_annotations-2.3.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (82.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any
@@ -1,29 +0,0 @@
1
- code_annotations/__init__.py,sha256=kgkDu19-8Us0avdqujrTlqi9vLj0r14EHzh9c0-ST_I,86
2
- code_annotations/annotation_errors.py,sha256=v3xFxAU_vuISeksMAE-OflcV4NQ2yMn-i81nWYRQRjA,2313
3
- code_annotations/base.py,sha256=Wt2FefOcjbEKfwU1BTV-PfLpdSzpb9xIJ0bTCOrJRnI,23607
4
- code_annotations/cli.py,sha256=-0uDq0ktYAYpY7kfqQK5FyjJSU4R2T2tQPb72LyL_8M,8417
5
- code_annotations/exceptions.py,sha256=zNjJ0yibWesstKY4k-bp6cq9HEWwwrUYT0V9Exrcta4,173
6
- code_annotations/find_django.py,sha256=baD-TO36cf-KnISElFxOADWB1ltSKFJj9hiH7SlPjEs,17827
7
- code_annotations/find_static.py,sha256=RLK_5ewmX2BWXxRiC7LSBe-Xmfz6zMAUdxvalAywQl8,3689
8
- code_annotations/generate_docs.py,sha256=iH00dTJTX7ArMdS_KXkbvOsqD703JbCFH7F9rB3Wxfg,5538
9
- code_annotations/helpers.py,sha256=0FHAAZ9KHMwwfjj9i-qToOEECwteCgCq2XQ8MBYPhtk,5687
10
- code_annotations/contrib/config/__init__.py,sha256=5zthEHAhALT0-1lUfGvxA-x3urzYi7T7f17wsCeUrZM,616
11
- code_annotations/contrib/config/feature_toggle_annotations.yaml,sha256=MGN6wxTUv-Mvfw-OhvAIbxCTOYx5Z1TVI5Qc3ECioQs,1053
12
- code_annotations/contrib/config/openedx_events_annotations.yaml,sha256=Pnmb3Iqy8ut0XtHEsINbzQXKtTpLzgFqqheV1wp22Nc,614
13
- code_annotations/contrib/config/setting_annotations.yaml,sha256=gRftQVBd9YE0RjBXYLwqMmAl4vCX4cNqOlC7nGquYts,279
14
- code_annotations/contrib/sphinx/extensions/__init__.py,sha256=47ufX1v15HMstSWMXY8_DD3cfnxMeq9h-moQlfVgAlU,93
15
- code_annotations/contrib/sphinx/extensions/base.py,sha256=sWCxnTwZv8XJJeeOIRmEZFAP34Pc6UQAc5JnVVaLSuU,1562
16
- code_annotations/contrib/sphinx/extensions/featuretoggles.py,sha256=iXzilGIJUG7_iCe1EFTN5Sm7-wB-h60F6r-xLenO0tU,4774
17
- code_annotations/contrib/sphinx/extensions/openedx_events.py,sha256=hAj1FcMCfb4wq3V2sr2gjpcJiBM1BIKTzMGzBtTFblE,6579
18
- code_annotations/contrib/sphinx/extensions/settings.py,sha256=4gUmCqxwOeDJVYP9uFTOGD5hE7zDtLH-B4s8kyoiuas,4764
19
- code_annotations/extensions/__init__.py,sha256=EVmxV7dIeD-pzIylI267X-ZoyePHskRyEvxI0aNz0Ts,60
20
- code_annotations/extensions/base.py,sha256=Upd71QuT19IDRo_2BL4KygGivBbi2LArj93FyQT_lcA,6629
21
- code_annotations/extensions/javascript.py,sha256=UTamL-EIpqL3dSZ70whOY4Vc6mfXDmDKzvSfRHNLA8M,495
22
- code_annotations/extensions/python.py,sha256=BGKXWwWXb4Y45vnOUysCzj2_JuSzL3ZkifUw5SdGDWA,480
23
- code_annotations-2.2.0.dist-info/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
24
- code_annotations-2.2.0.dist-info/METADATA,sha256=Y0c6nDMqjV3dgO-VjFsPiIl_128J3iZfa-hWvNXtfxE,9761
25
- code_annotations-2.2.0.dist-info/NOTICE.txt,sha256=-XAPwl96IlATsvyACaZ3_DvTGE57HY5I32Zqz0dGTnc,545
26
- code_annotations-2.2.0.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
27
- code_annotations-2.2.0.dist-info/entry_points.txt,sha256=pdI65Ll9o_ySSdwi817OWs9zvrtFDBmTWoQPjx6_d58,253
28
- code_annotations-2.2.0.dist-info/top_level.txt,sha256=IN-c3H7bbdC5XWsfJJglDUCR7EXhxqZcKefmOAolIBI,17
29
- code_annotations-2.2.0.dist-info/RECORD,,