avrotize 2.19.0__py3-none-any.whl → 2.20.0__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.
avrotize/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '2.19.0'
32
- __version_tuple__ = version_tuple = (2, 19, 0)
31
+ __version__ = version = '2.20.0'
32
+ __version_tuple__ = version_tuple = (2, 20, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -123,4 +123,16 @@ export class {{ class_name }} {
123
123
  }
124
124
  {%- endif %}
125
125
  {%- endif %}
126
+
127
+ /**
128
+ * Creates an instance of {{ class_name }} with sample data for testing.
129
+ * @returns A new {{ class_name }} instance with sample values.
130
+ */
131
+ public static createInstance(): {{ class_name }} {
132
+ return new {{ class_name }}(
133
+ {%- for field in fields %}
134
+ {{ field.test_value }}{% if not loop.last %},{% endif %} // {{ field.name }}
135
+ {%- endfor %}
136
+ );
137
+ }
126
138
  }
@@ -0,0 +1,77 @@
1
+ /** Test file for {{ class_name }} */
2
+ import { {{ class_name }} } from './{{ class_name }}.js';
3
+ {%- for import_type, import_path in imports.items() %}
4
+ import { {{ import_type }} } from '{{ import_path }}';
5
+ {%- endfor %}
6
+
7
+ describe('{{ class_name }}', () => {
8
+ let instance: {{ class_name }};
9
+
10
+ beforeEach(() => {
11
+ instance = {{ class_name }}.createInstance();
12
+ });
13
+
14
+ describe('createInstance', () => {
15
+ it('should create a valid instance', () => {
16
+ expect(instance).toBeInstanceOf({{ class_name }});
17
+ });
18
+
19
+ it('should create instances with consistent values', () => {
20
+ const instance1 = {{ class_name }}.createInstance();
21
+ const instance2 = {{ class_name }}.createInstance();
22
+ {%- for field in fields %}
23
+ expect(instance1.{{ field.name }}).toEqual(instance2.{{ field.name }});
24
+ {%- endfor %}
25
+ });
26
+ });
27
+
28
+ {%- for field in fields %}
29
+
30
+ describe('{{ field.name }} property', () => {
31
+ it('should have a valid {{ field.name }} value', () => {
32
+ expect(instance.{{ field.name }}).toBeDefined();
33
+ });
34
+
35
+ it('should accept assigned values', () => {
36
+ const testValue = {{ field.test_value }};
37
+ instance.{{ field.name }} = testValue;
38
+ expect(instance.{{ field.name }}).toEqual(testValue);
39
+ });
40
+ });
41
+ {%- endfor %}
42
+
43
+ {%- if typed_json_annotation %}
44
+
45
+ describe('JSON serialization', () => {
46
+ it('should serialize to JSON and deserialize back', () => {
47
+ const bytes = instance.toByteArray('application/json');
48
+ const restored = {{ class_name }}.fromData(bytes, 'application/json');
49
+ {%- for field in fields %}
50
+ expect(restored.{{ field.name }}).toEqual(instance.{{ field.name }});
51
+ {%- endfor %}
52
+ });
53
+
54
+ it('should match JSON structure', () => {
55
+ const jsonObj = {
56
+ {%- for field in fields %}
57
+ {{ field.original_name }}: instance.{{ field.name }}{% if not loop.last %},{% endif %}
58
+ {%- endfor %}
59
+ };
60
+ expect({{ class_name }}.isJsonMatch(jsonObj)).toBe(true);
61
+ });
62
+ });
63
+ {%- endif %}
64
+
65
+ {%- if avro_annotation %}
66
+
67
+ describe('Avro serialization', () => {
68
+ it('should serialize to Avro and deserialize back', () => {
69
+ const bytes = instance.toByteArray('application/vnd.apache.avro+avro');
70
+ const restored = {{ class_name }}.fromData(bytes, 'application/vnd.apache.avro+avro');
71
+ {%- for field in fields %}
72
+ expect(restored.{{ field.name }}).toEqual(instance.{{ field.name }});
73
+ {%- endfor %}
74
+ });
75
+ });
76
+ {%- endif %}
77
+ });
avrotize/avrotots.py CHANGED
@@ -31,6 +31,7 @@ class AvroToTypeScript:
31
31
  self.output_dir = os.getcwd()
32
32
  self.src_dir = os.path.join(self.output_dir, "src")
33
33
  self.generated_types: Dict[str, str] = {}
34
+ self.generated_type_fields: Dict[str, List[Dict]] = {} # Store fields for test generation
34
35
  self.main_schema = None
35
36
  self.type_dict = None
36
37
  self.INDENT = ' ' * 4
@@ -160,6 +161,7 @@ class AvroToTypeScript:
160
161
  'is_array': field['definition']['is_array'],
161
162
  'is_union': field['definition']['is_union'],
162
163
  'docstring': field['docstring'],
164
+ 'test_value': self.generate_test_value(field['definition']['type'], field['definition']['is_enum']),
163
165
  } for field in fields]
164
166
 
165
167
  imports_with_paths: Dict[str, str] = {}
@@ -201,6 +203,7 @@ class AvroToTypeScript:
201
203
  if write_file:
202
204
  self.write_to_file(namespace, class_name, class_definition)
203
205
  self.generated_types[ts_qualified_name] = 'class'
206
+ self.generated_type_fields[ts_qualified_name] = fields # Store fields for test generation
204
207
  return ts_qualified_name
205
208
 
206
209
  def generate_enum(self, avro_schema: Dict, parent_namespace: str, write_file: bool = True) -> str:
@@ -242,6 +245,47 @@ class AvroToTypeScript:
242
245
  'is_enum': self.generated_types.get(import_name, '') == 'enum',
243
246
  }
244
247
 
248
+ def generate_test_value(self, field_type: str, is_enum: bool = False) -> str:
249
+ """Generate a test value for a TypeScript field type."""
250
+ # Strip nullable marker
251
+ is_nullable = field_type.endswith('?')
252
+ field_type = self.strip_nullable(field_type)
253
+
254
+ # Handle arrays
255
+ if field_type.endswith('[]'):
256
+ inner_type = field_type[:-2]
257
+ inner_value = self.generate_test_value(inner_type, is_enum)
258
+ return f'[{inner_value}]'
259
+
260
+ # Handle map/dict types
261
+ if field_type.startswith('{ [key: string]:'):
262
+ return "{ 'key': 'value' }"
263
+
264
+ # Handle union types (pipe-separated)
265
+ if '|' in field_type:
266
+ first_type = field_type.split('|')[0].strip()
267
+ return self.generate_test_value(first_type, is_enum)
268
+
269
+ # Handle enums - use first value (will be set via template)
270
+ if is_enum:
271
+ return f'{field_type}.values()[0]'
272
+
273
+ # Handle primitive types
274
+ primitive_values = {
275
+ 'string': "'sample-string'",
276
+ 'number': '42',
277
+ 'boolean': 'true',
278
+ 'null': 'null',
279
+ 'Date': "new Date('2024-01-01T00:00:00Z')",
280
+ 'any': "{ test: 'data' }",
281
+ }
282
+
283
+ if field_type in primitive_values:
284
+ return primitive_values[field_type]
285
+
286
+ # For complex types (classes), call their createInstance method
287
+ return f'{field_type}.createInstance()'
288
+
245
289
  def get_is_json_match_clause(self, field_name: str, field_type: str, field_is_enum: bool) -> str:
246
290
  """Generates the isJsonMatch clause for a field."""
247
291
  field_name_js = field_name.rstrip('_')
@@ -556,6 +600,57 @@ class AvroToTypeScript:
556
600
  with open(types_file_path, 'w', encoding='utf-8') as file:
557
601
  file.write(avro_js_types)
558
602
 
603
+ def generate_tests(self, output_dir: str):
604
+ """Generate Jest test files for all generated TypeScript classes."""
605
+ test_directory_path = os.path.join(output_dir, "test")
606
+ if not os.path.exists(test_directory_path):
607
+ os.makedirs(test_directory_path, exist_ok=True)
608
+
609
+ for qualified_name, type_kind in self.generated_types.items():
610
+ if type_kind == 'class':
611
+ self.generate_test_class(qualified_name, test_directory_path)
612
+
613
+ def generate_test_class(self, qualified_name: str, test_directory_path: str):
614
+ """Generate a Jest test file for a TypeScript class."""
615
+ parts = qualified_name.split('.')
616
+ class_name = parts[-1]
617
+ namespace = '.'.join(parts[:-1])
618
+ test_class_name = f"{class_name}.test"
619
+
620
+ fields = self.generated_type_fields.get(qualified_name, [])
621
+
622
+ # Build imports for nested types
623
+ imports_with_paths: Dict[str, str] = {}
624
+ for field in fields:
625
+ field_type = field.get('type_no_null', '')
626
+ if not self.is_typescript_primitive(field_type.replace('[]', '')):
627
+ # It's a reference type, need to import it
628
+ type_name = field_type.replace('[]', '').replace('?', '')
629
+ if type_name and type_name not in ['null', 'any', 'Date']:
630
+ # Build relative path from test dir to src dir
631
+ src_path = '/'.join(parts)
632
+ imports_with_paths[type_name] = f'../src/{src_path.rsplit("/", 1)[0]}/{type_name}.js' if '/' in src_path else f'../src/{parts[0]}/{type_name}.js'
633
+
634
+ # Calculate relative path from test directory to class file
635
+ class_path_parts = namespace.split('.') if namespace else []
636
+ relative_path = '../src/' + '/'.join(class_path_parts + [class_name]) + '.js'
637
+
638
+ test_definition = process_template(
639
+ "avrotots/class_test.ts.jinja",
640
+ class_name=class_name,
641
+ fields=fields,
642
+ imports=imports_with_paths,
643
+ typed_json_annotation=self.typed_json_annotation,
644
+ avro_annotation=self.avro_annotation,
645
+ )
646
+
647
+ # Update the import path in the generated test
648
+ test_definition = test_definition.replace(f"from './{class_name}.js'", f"from '{relative_path}'")
649
+
650
+ test_file_path = os.path.join(test_directory_path, f"{test_class_name}.ts")
651
+ with open(test_file_path, 'w', encoding='utf-8') as file:
652
+ file.write(test_definition)
653
+
559
654
  def convert_schema(self, schema: Union[List[Dict], Dict], output_dir: str, write_file: bool = True):
560
655
  """Convert Avro schema to TypeScript classes with namespace support."""
561
656
  self.output_dir = output_dir
@@ -571,6 +666,7 @@ class AvroToTypeScript:
571
666
  self.generate_enum(avro_schema, '', write_file)
572
667
  self.generate_index_file()
573
668
  self.generate_project_files(output_dir)
669
+ self.generate_tests(output_dir)
574
670
 
575
671
  def convert(self, avro_schema_path: str, output_dir: str):
576
672
  """Convert Avro schema to TypeScript classes."""
@@ -13,15 +13,15 @@
13
13
  <!-- Serialization -->
14
14
  <ItemGroup>
15
15
  <PackageReference Include="Apache.Avro" Version="1.12.0" />
16
- <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
16
+ <PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
17
17
  <PackageReference Include="System.Text.Json" Version="9.0.3" />
18
18
  <PackageReference Include="System.Memory.Data" Version="9.0.3" />
19
19
  </ItemGroup>
20
20
 
21
21
  <!-- Testing -->
22
22
  <ItemGroup>
23
- <PackageReference Include="NUnit" Version="4.3.2" />
24
- <PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
25
- <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
23
+ <PackageReference Include="NUnit" Version="4.4.0" />
24
+ <PackageReference Include="NUnit3TestAdapter" Version="5.2.0" />
25
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
26
26
  </ItemGroup>
27
27
  </Project>
@@ -4,9 +4,3 @@
4
4
  module avrotize_dependencies
5
5
 
6
6
  go 1.21
7
-
8
- require (
9
- github.com/linkedin/goavro/v2 v2.13.0
10
- github.com/confluentinc/confluent-kafka-go/v2 v2.6.1
11
- github.com/stretchr/testify v1.9.0
12
- )
@@ -29,14 +29,14 @@
29
29
  <dependency>
30
30
  <groupId>org.apache.avro</groupId>
31
31
  <artifactId>avro</artifactId>
32
- <version>1.12.0</version>
32
+ <version>1.12.1</version>
33
33
  </dependency>
34
34
 
35
35
  <!-- Jackson BOM for version consistency -->
36
36
  <dependency>
37
37
  <groupId>com.fasterxml.jackson</groupId>
38
38
  <artifactId>jackson-bom</artifactId>
39
- <version>2.18.2</version>
39
+ <version>2.20.1</version>
40
40
  <type>pom</type>
41
41
  <scope>import</scope>
42
42
  </dependency>
@@ -48,7 +48,7 @@
48
48
  <dependency>
49
49
  <groupId>com.fasterxml.jackson.core</groupId>
50
50
  <artifactId>jackson-databind</artifactId>
51
- <version>2.18.2</version>
51
+ <version>2.20.1</version>
52
52
  </dependency>
53
53
  <dependency>
54
54
  <groupId>com.fasterxml.jackson.core</groupId>
@@ -60,19 +60,19 @@
60
60
  <dependency>
61
61
  <groupId>org.junit.jupiter</groupId>
62
62
  <artifactId>junit-jupiter</artifactId>
63
- <version>5.11.4</version>
63
+ <version>6.0.1</version>
64
64
  <scope>test</scope>
65
65
  </dependency>
66
66
  <dependency>
67
67
  <groupId>org.junit.jupiter</groupId>
68
68
  <artifactId>junit-jupiter-api</artifactId>
69
- <version>5.11.4</version>
69
+ <version>6.0.1</version>
70
70
  <scope>test</scope>
71
71
  </dependency>
72
72
  <dependency>
73
73
  <groupId>org.junit.jupiter</groupId>
74
74
  <artifactId>junit-jupiter-engine</artifactId>
75
- <version>5.11.4</version>
75
+ <version>6.0.1</version>
76
76
  <scope>test</scope>
77
77
  </dependency>
78
78
 
@@ -80,12 +80,12 @@
80
80
  <dependency>
81
81
  <groupId>org.apache.maven.plugins</groupId>
82
82
  <artifactId>maven-surefire-plugin</artifactId>
83
- <version>3.5.2</version>
83
+ <version>3.5.4</version>
84
84
  </dependency>
85
85
  <dependency>
86
86
  <groupId>org.apache.maven.plugins</groupId>
87
87
  <artifactId>maven-compiler-plugin</artifactId>
88
- <version>3.13.0</version>
88
+ <version>3.14.1</version>
89
89
  </dependency>
90
90
  </dependencies>
91
91
  </project>
@@ -8,7 +8,7 @@ edition = "2021"
8
8
  publish = false
9
9
 
10
10
  [dependencies]
11
- apache-avro = "0.17.0"
11
+ apache-avro = "0.21.0"
12
12
  serde = { version = "1.0.215", features = ["derive"] }
13
13
  serde_json = "1.0.133"
14
14
  chrono = { version = "0.4.38", features = ["serde"] }
@@ -8,9 +8,9 @@
8
8
  "kafkajs": "^2.2.4"
9
9
  },
10
10
  "devDependencies": {
11
- "@types/node": "^22.10.0",
11
+ "@types/node": "^24.10.1",
12
12
  "typescript": "^5.7.2",
13
- "jest": "^29.7.0",
14
- "@types/jest": "^29.5.14"
13
+ "jest": "^30.2.0",
14
+ "@types/jest": "^30.0.0"
15
15
  }
16
16
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: avrotize
3
- Version: 2.19.0
3
+ Version: 2.20.0
4
4
  Summary: Tools to convert from and to Avro Schema from various other schema languages.
5
5
  Author-email: Clemens Vasters <clemensv@microsoft.com>
6
6
  Requires-Python: >=3.10
@@ -1,6 +1,6 @@
1
1
  avrotize/__init__.py,sha256=JjPSX7c686TV00J_x0Py9JwXS0aJl8vpLn81Y0ondkw,3606
2
2
  avrotize/__main__.py,sha256=5pY8dYAURcOnFRvgb6fgaOIa_SOzPLIWbU8-ZTQ0jG4,88
3
- avrotize/_version.py,sha256=qMko39rXn6muHGFJMYJGPVd81d_aGmdcCvOEsyMY7h0,706
3
+ avrotize/_version.py,sha256=lINSLhOT4N0riU7Dl_hviY26AewaFD4umVigR9oN4aw,706
4
4
  avrotize/asn1toavro.py,sha256=QDNwfBfXMxSH-k487CA3CaGCGDzOLs4PpVbbENm5uF0,8386
5
5
  avrotize/avrotize.py,sha256=VHFpBltMVBpyt0ju3ZWW725BKjQ4Fk-nrAy8udW-X44,5713
6
6
  avrotize/avrotocpp.py,sha256=hRZV247_TDD7Sm6_8sFx-UH5SueLLx2Wg6TvAVUX0iE,25693
@@ -22,7 +22,7 @@ avrotize/avrotoparquet.py,sha256=qm5hfia5elW1Yn4KACG8bbudLAqQSwGk3fIkTvdT5Rg,908
22
22
  avrotize/avrotoproto.py,sha256=STqbdGjVrgKrlKXt-6dZlekW_Oq0W0StRx80St1XqIc,22486
23
23
  avrotize/avrotopython.py,sha256=sPsSLseSq-toKHnsFsYRRtGePGYospRz2mwGLep-POw,31147
24
24
  avrotize/avrotorust.py,sha256=QMIBNkFpDlH44kuQo24k5D-f0lmdhoA5b7hEbhKsnMw,22214
25
- avrotize/avrotots.py,sha256=EalaA9feiHMyw7lfD8rifs24LsUVigmuPOu7nPh-wUc,29002
25
+ avrotize/avrotots.py,sha256=81k-6ZiIeRJENPXuUzPZchBGxr9Oper4Ra4GdFypWnA,33418
26
26
  avrotize/avrotoxsd.py,sha256=iGQq_8kC0kfKsqvqS6s_mO-kJ8N5G8vXOwqRI_DZUxc,17744
27
27
  avrotize/cddltostructure.py,sha256=MA2c-P3CIEAxEaBX-FF299gR55xcLEV3FrfTr2QfayM,74491
28
28
  avrotize/commands.json,sha256=afZ36gTItJdtM8z-qOTOw0MazKz1WKZMztY86JUHcgU,88538
@@ -88,19 +88,20 @@ avrotize/avrotopython/test_enum.jinja,sha256=PeVxzC-gV5bizVnRs58RPoUDbXGI696B-VO
88
88
  avrotize/avrotorust/dataclass_enum.rs.jinja,sha256=-1-73XnG1k1eONMq7_aENVpoHOsMnj55CyjU3PT8M7U,2232
89
89
  avrotize/avrotorust/dataclass_struct.rs.jinja,sha256=AXFqCCW8fVdJXnSYTfpwKQeGG9JH8Goc3g1ILKEU-mE,7853
90
90
  avrotize/avrotorust/dataclass_union.rs.jinja,sha256=HuDKlM03hOkVx9Lm5p93IzQfUCokHz8wOu9iyEkwkUk,3801
91
- avrotize/avrotots/class_core.ts.jinja,sha256=wUMNd5cbbfnG0QBVrEmioOx698gU3td7tCbkXxr8Now,4613
91
+ avrotize/avrotots/class_core.ts.jinja,sha256=YwhQLSnUqlmGUGk9zamEx758nKstXf_IKBNvOaPLrEk,5039
92
+ avrotize/avrotots/class_test.ts.jinja,sha256=zm3wXaSJ225y7knLj6I9zjrkPTEROLHYmBr8eDo7pCo,2752
92
93
  avrotize/avrotots/enum_core.ts.jinja,sha256=6NN_nF2y9us2saM7Wag8IN73BdIF0vxhPxq83NQEnm8,1522
93
94
  avrotize/avrotots/gitignore.jinja,sha256=iYEkEO7BDDeNPTG8RSGJruh0Ol7HdYG4otQHhYLvC1c,376
94
95
  avrotize/avrotots/index.ts.jinja,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
96
  avrotize/avrotots/package.json.jinja,sha256=3ZqMVLP1ALkyXcVVA5j8Kyi5obNLJBv7dlgwKzYZfa8,555
96
97
  avrotize/avrotots/tsconfig.json.jinja,sha256=Job00bmIiHEWQjA-Ze2-OdoTzT-GjVbL36fYuqtXLNs,537
97
98
  avrotize/dependencies/cpp/vcpkg/vcpkg.json,sha256=se5qnUVQ1Q6wN_DqgIioqKg_y7ouh9oly2iBAJJXkgw,414
98
- avrotize/dependencies/cs/net90/dependencies.csproj,sha256=6v_C4cLLZulQQbV30Lo0soX0Wqdb6SvGS__KzLjLouA,1034
99
- avrotize/dependencies/go/go121/go.mod,sha256=wNfSMPb0FJC2eDGG-HxuPWATl1uAwhPpfva-VX14mSg,345
100
- avrotize/dependencies/java/jdk21/pom.xml,sha256=vWb_t6-onk4XZS9OpXbtvXbuSBoncSjYRoMpsPemFbE,3182
99
+ avrotize/dependencies/cs/net90/dependencies.csproj,sha256=zkgAfzGfJ9v8SzdoYDkBXs0ZJoQ7k1qK8mCH2GOT1jw,1033
100
+ avrotize/dependencies/go/go121/go.mod,sha256=ZHjoQNugEIJdkfwwLupG5x6KpUyDp8HxyVnJfHG3wuE,203
101
+ avrotize/dependencies/java/jdk21/pom.xml,sha256=Hi4RjYJsRLqF0v-2YJOFYdzV0nqWaOmFEEgpOmWxO1k,3179
101
102
  avrotize/dependencies/python/py312/requirements.txt,sha256=zMr7YjvCg75g66b-HURTr-n_vjxSv0J7A97aydoyYLA,336
102
- avrotize/dependencies/rust/stable/Cargo.toml,sha256=NE8fzUxg00AA09LirpyEcQoT9dqy8SUfOTJl_kiZA7E,506
103
- avrotize/dependencies/typescript/node22/package.json,sha256=qAJ_dHE0YefuIRqkuN5tsXsHWSL8u6qZGRbYwVB_zq0,388
103
+ avrotize/dependencies/rust/stable/Cargo.toml,sha256=p2s1Q-dzyV7QUkJUkUW3mr4yDAdnLQc3C9f6E_iZZB0,506
104
+ avrotize/dependencies/typescript/node22/package.json,sha256=oAW_2X-b715kV7aajwuONZEMkyQUJGviG3GwnoUa7hU,387
104
105
  avrotize/generic/generic.avsc,sha256=GwLLCGBdu6H3fwInIfrvGdebDWrbXEFgnsnFJNrCT4E,1272
105
106
  avrotize/prototypes/any.avsc,sha256=8bNmD-5j43YSoNTOQ4VIFjuH93a46-LOApf-L-ha1P8,3390
106
107
  avrotize/prototypes/api.avsc,sha256=5sFP8jEqDAUbcfZup-YurhKAwR6U3dee09CeFPAhexM,6521
@@ -152,8 +153,8 @@ avrotize/structuretots/index.ts.jinja,sha256=-R4R_En1N4W_BEN3z3bLts9Xi4KnBTDLrYM
152
153
  avrotize/structuretots/package.json.jinja,sha256=fYC2mguywpYf1-poALreCK4kH_OGWMUF6-7KWBzTprk,751
153
154
  avrotize/structuretots/test_class.ts.jinja,sha256=GHNzFdv3V-gYnk-rAnGS74JZD_3hSdiWzp3i_pPyGsQ,1059
154
155
  avrotize/structuretots/tsconfig.json.jinja,sha256=8Pl65JW8uOMEexxkteobo0ZEqsJBO31HegNRUrf8XGQ,515
155
- avrotize-2.19.0.dist-info/entry_points.txt,sha256=m8J2TWiqbZh7SBQezc1CNrM_GVPWf01zOFcAKhzCC0U,51
156
- avrotize-2.19.0.dist-info/licenses/LICENSE,sha256=xGtQGygTETTtDQJafZCUbpsed3GxO6grmqig-jGEuSk,11348
157
- avrotize-2.19.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
158
- avrotize-2.19.0.dist-info/METADATA,sha256=u85OAjAPwhrByOvX5Hq-anusTvTYbFGAHuj9JLSTZz8,76788
159
- avrotize-2.19.0.dist-info/RECORD,,
156
+ avrotize-2.20.0.dist-info/entry_points.txt,sha256=m8J2TWiqbZh7SBQezc1CNrM_GVPWf01zOFcAKhzCC0U,51
157
+ avrotize-2.20.0.dist-info/licenses/LICENSE,sha256=xGtQGygTETTtDQJafZCUbpsed3GxO6grmqig-jGEuSk,11348
158
+ avrotize-2.20.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
159
+ avrotize-2.20.0.dist-info/METADATA,sha256=p2hLPJ-w2DtlBn2MEQ3zUsG4MKOLVWaMPqRGm1hPVY0,76788
160
+ avrotize-2.20.0.dist-info/RECORD,,