convert-stream 2.3.5__tar.gz → 2.3.7__tar.gz

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.
Files changed (33) hide show
  1. {convert_stream-2.3.5 → convert_stream-2.3.7}/PKG-INFO +1 -1
  2. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/__init__.py +5 -4
  3. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/pdf/pdf_document.py +40 -29
  4. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/pdf/pdf_page.py +10 -0
  5. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/pdf/pdf_to_image.py +60 -10
  6. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream.egg-info/PKG-INFO +1 -1
  7. {convert_stream-2.3.5 → convert_stream-2.3.7}/pyproject.toml +1 -1
  8. {convert_stream-2.3.5 → convert_stream-2.3.7}/README.md +0 -0
  9. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/__main__.py +0 -0
  10. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/_version.py +0 -0
  11. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/doc_stream.py +0 -0
  12. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/image/__init__.py +0 -0
  13. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/image/img_object.py +0 -0
  14. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/mod_types/__init__.py +0 -0
  15. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/mod_types/enums.py +0 -0
  16. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/mod_types/modules.py +0 -0
  17. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/mod_types/table_types.py +0 -0
  18. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/pdf/__init__.py +0 -0
  19. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/pdf/image_to_pdf.py +0 -0
  20. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/sheets/__init__.py +0 -0
  21. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/sheets/load.py +0 -0
  22. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/sheets/parse.py +0 -0
  23. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/sheets/save.py +0 -0
  24. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/table_files.py +0 -0
  25. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/text/__init__.py +0 -0
  26. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/text/date.py +0 -0
  27. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/text/find_text.py +0 -0
  28. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream/text/terminal.py +0 -0
  29. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream.egg-info/SOURCES.txt +0 -0
  30. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream.egg-info/dependency_links.txt +0 -0
  31. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream.egg-info/requires.txt +0 -0
  32. {convert_stream-2.3.5 → convert_stream-2.3.7}/convert_stream.egg-info/top_level.txt +0 -0
  33. {convert_stream-2.3.5 → convert_stream-2.3.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: convert_stream
3
- Version: 2.3.5
3
+ Version: 2.3.7
4
4
  Summary: Manipulação de documentos PDF e Imagens. Converter, Ler, rotacionar exportar etc.
5
5
  Author: Bruno Chaves
6
6
  Requires-Python: >=3.11
@@ -13,7 +13,7 @@ from .mod_types import (
13
13
  LibImageToPdf, create_dict_map_from_file, create_void_dict_map, RotationAngle
14
14
  )
15
15
  from .image import ImageObject, CollectionImages
16
- from .pdf import DocumentPdf, PageDocumentPdf, CollectionPagePdf
16
+ from .pdf import DocumentPdf, PageDocumentPdf, CollectionPagePdf, ConvertPdfToImages, ConvertImageToPdf
17
17
  from .pdf.pdf_document import SearchableTextPdf
18
18
  from .doc_stream import PdfStream, SplitPdf
19
19
  from .table_files import PdfFinder
@@ -76,9 +76,10 @@ __all__ = [
76
76
  '__modify_date__', '__author__', '__license__', '__module_name__', '__version__',
77
77
  'PdfStream', 'DocumentPdf', 'PageDocumentPdf', 'CollectionPagePdf', 'CollectionImages',
78
78
  'ImageObject', 'File', 'Directory', 'LibraryDocs', 'InputFiles', 'SearchableTextPdf',
79
- 'PdfFinder', 'SplitPdf', 'read_pdf', 'read_files_pdf', 'read_image',
80
- 'MetaDataFile', 'MetaDataItem', 'create_metadata', 'ColumnsTable', 'ListString', 'ArrayString',
79
+ 'PdfFinder', 'SplitPdf', 'LibImageToPdf', 'RotationAngle', 'ConvertImageToPdf', 'ConvertPdfToImages',
80
+ 'MetaDataFile', 'MetaDataItem', 'ColumnsTable', 'ListString', 'ArrayString',
81
81
  'HeadCell', 'HeadValues', 'ColumnBody', 'TextTable', 'LibDate', 'LibPDF', 'LibImage', 'LibPdfToImage',
82
- 'LibImageToPdf', 'create_dict_map_from_file', 'create_void_dict_map', 'RotationAngle'
82
+ 'read_pdf', 'read_files_pdf', 'read_image', 'create_dict_map_from_file', 'create_void_dict_map',
83
+ 'create_metadata',
83
84
  ]
84
85
 
@@ -9,17 +9,19 @@ from io import BytesIO
9
9
  from typing import Union
10
10
  import pandas as pd
11
11
  from soup_files import File, Directory, LibraryDocs, InputFiles, ProgressBarAdapter, JsonConvert
12
- from convert_stream.mod_types import get_hash_from_bytes, create_metadata, MetaDataFile, MetaDataItem
12
+ from convert_stream.mod_types import (
13
+ get_hash_from_bytes, create_metadata, MetaDataFile, MetaDataItem
14
+ )
13
15
  from convert_stream.mod_types.table_types import (
14
- ListItems, ListString, create_dict_map_values, concat_maps, create_void_dict_map, ColumnBody,
16
+ ListItems, create_dict_map_values, concat_maps, create_void_dict_map, ColumnBody,
15
17
  HeadCell, HeadValues, ColumnsTable
16
18
  )
17
19
  from convert_stream.mod_types.enums import LibPDF
18
20
  from convert_stream.mod_types.modules import (
19
- DEFAULT_LIB_PDF, ModDocPdf, PdfWriter, PdfReader, PageObject, fitz,
21
+ DEFAULT_LIB_PDF, ModDocPdf, PdfWriter, PdfReader, fitz, MOD_FITZ, MOD_PYPDF
20
22
  )
21
23
  from convert_stream.pdf.pdf_page import PageDocumentPdf
22
- from convert_stream.text import print_line, show_warning, FindText
24
+ from convert_stream.text import show_warning, FindText
23
25
 
24
26
 
25
27
  class SearchableTextPdf(object):
@@ -212,6 +214,8 @@ class ImplementDocumentFitz(ABCDocument):
212
214
  pg: fitz.Page = self.mod_doc_pdf.load_page(idx) # retorna fitz.Page
213
215
  if pg is not None:
214
216
  _page_pdf = PageDocumentPdf.create_from_page_fitz(pg, pg.number + 1)
217
+ _page_pdf.metadata = self.metadata
218
+ _page_pdf.metadata.md5 = MetaDataItem('nan')
215
219
  return _page_pdf
216
220
 
217
221
  def add_page(self, page: PageDocumentPdf):
@@ -242,13 +246,17 @@ class ImplementDocumentFitz(ABCDocument):
242
246
  pages = []
243
247
  for num, pg in enumerate(self.mod_doc_pdf):
244
248
  page_pdf = PageDocumentPdf.create_from_page_fitz(pg, num + 1)
249
+ page_pdf.metadata = self.metadata
250
+ page_pdf.metadata.md5 = MetaDataItem('nan')
245
251
  pages.append(page_pdf)
246
252
  return pages
247
253
 
248
254
  @classmethod
249
255
  def create_from_bytes(cls, bt: BytesIO) -> ImplementDocumentFitz:
250
256
  # Cria documento a partir de BytesIO
251
- doc: ModDocPdf = fitz.open(stream=bt.getvalue(), filetype="pdf")
257
+ if not MOD_FITZ:
258
+ raise ImportError("Módulo fitz|pymupdf não instalado!\nUse pip install fitz.")
259
+ doc: ModDocPdf = fitz.Document(stream=bt.getvalue(), filetype="pdf")
252
260
  name = get_hash_from_bytes(bt)
253
261
  _obj_doc = cls(doc)
254
262
  _obj_doc.metadata.name = MetaDataItem(name)
@@ -258,6 +266,8 @@ class ImplementDocumentFitz(ABCDocument):
258
266
  @classmethod
259
267
  def create_from_file(cls, file: File) -> ImplementDocumentFitz:
260
268
  # Cria documento a partir de caminho no disco
269
+ if not MOD_FITZ:
270
+ raise ImportError("Módulo fitz|pymupdf não instalado!\nUse pip install fitz.")
261
271
  doc = fitz.open(file.path)
262
272
  _obj_doc = cls(doc)
263
273
  _obj_doc.metadata = create_metadata(file)
@@ -318,7 +328,10 @@ class ImplementDocumentPyPdf(ABCDocument):
318
328
  # Acessa a página pela lista self.mod_doc_pdf.pages
319
329
  pg = self.mod_doc_pdf.pages[idx]
320
330
  # O número da página é idx + 1
321
- return PageDocumentPdf.create_from_page_pypdf(pg, idx + 1)
331
+ page_pdf_doc = PageDocumentPdf.create_from_page_pypdf(pg, idx + 1)
332
+ page_pdf_doc.metadata = self.metadata
333
+ page_pdf_doc.metadata.md5 = MetaDataItem('nan')
334
+ return page_pdf_doc
322
335
  return None
323
336
 
324
337
  def add_page(self, page: PageDocumentPdf):
@@ -342,12 +355,16 @@ class ImplementDocumentPyPdf(ABCDocument):
342
355
  pages_pdf: list[PageDocumentPdf] = []
343
356
  for num, page in enumerate(self.mod_doc_pdf.pages):
344
357
  pg = PageDocumentPdf.create_from_page_pypdf(page, num + 1)
358
+ pg.metadata = self.metadata
359
+ pg.metadata.md5 = MetaDataItem('nan')
345
360
  pages_pdf.append(pg)
346
361
  return pages_pdf
347
362
 
348
363
  @classmethod
349
364
  def create_from_bytes(cls, bt: BytesIO) -> ImplementDocumentPyPdf:
350
365
  # Usa PdfReader diretamente de BytesIO
366
+ if not MOD_PYPDF:
367
+ raise ImportError("Módulo pypdf não instalado!\nUse pip install pypdf.")
351
368
  bt.seek(0)
352
369
  reader = PdfReader(bt)
353
370
  bt.seek(0)
@@ -366,6 +383,8 @@ class ImplementDocumentPyPdf(ABCDocument):
366
383
  @classmethod
367
384
  def create_from_file(cls, file: File) -> ImplementDocumentPyPdf:
368
385
  # Usa PdfReader diretamente de arquivo
386
+ if not MOD_PYPDF:
387
+ raise ImportError("Módulo pypdf não instalado!\nUse pip install pypdf.")
369
388
  reader = PdfReader(file.absolute())
370
389
  pdf_writer = PdfWriter()
371
390
  for p in reader.pages:
@@ -420,8 +439,8 @@ class DocumentPdf(object):
420
439
  if lib_pdf == LibPDF.PYPDF:
421
440
  name = get_hash_from_bytes(_tmp_bytes)
422
441
  self.doc_pdf = ImplementDocumentPyPdf(document)
423
- self.doc_pdf.metadata['name'] = name
424
- self.doc_pdf.metadata['md5'] = name
442
+ self.doc_pdf.metadata.name = MetaDataItem(name)
443
+ self.doc_pdf.metadata.md5 = MetaDataItem(name)
425
444
  del _tmp_bytes
426
445
  elif lib_pdf == LibPDF.FITZ:
427
446
  self.doc_pdf = ImplementDocumentFitz.create_from_bytes(_tmp_bytes)
@@ -433,8 +452,8 @@ class DocumentPdf(object):
433
452
  elif lib_pdf == LibPDF.FITZ:
434
453
  name = get_hash_from_bytes(_tmp_bytes)
435
454
  self.doc_pdf = ImplementDocumentFitz(document)
436
- self.doc_pdf.metadata['name'] = name
437
- self.doc_pdf.metadata['md5'] = name
455
+ self.doc_pdf.metadata.name = MetaDataItem(name)
456
+ self.doc_pdf.metadata.md5 = MetaDataItem(name)
438
457
  del _tmp_bytes
439
458
  elif isinstance(document, BytesIO):
440
459
  if lib_pdf == LibPDF.PYPDF:
@@ -524,7 +543,7 @@ class DocumentPdf(object):
524
543
  else:
525
544
  _values = txt_page.split(separator)
526
545
 
527
- if self.metadata['file_path'] is None:
546
+ if not self.metadata.file_path.is_empty:
528
547
  return create_dict_map_values(
529
548
  _values, page_num=f'{page.number_page}', file_type='.pdf',
530
549
  )
@@ -533,8 +552,8 @@ class DocumentPdf(object):
533
552
  _values,
534
553
  page_num=f'{page.number_page}',
535
554
  file_type='.pdf',
536
- file_path=self.metadata['file_path'],
537
- dir_path=self.metadata['dir_path'],
555
+ file_path=self.metadata.file_path,
556
+ dir_path=self.metadata.dir_path,
538
557
  )
539
558
 
540
559
  def to_dict(self, separator: str = '\n') -> dict[str, ColumnBody]:
@@ -577,19 +596,15 @@ class DocumentPdf(object):
577
596
  except Exception as e:
578
597
  print(f'{__class__.__name__} {e}')
579
598
  else:
580
- file_path = self.metadata['file_path']
581
- file_name = self.metadata['name']
582
- dir_path = self.metadata['dir_path']
583
- file_extension = self.metadata['extension']
584
599
  new_line = {
585
600
  ColumnsTable.KEY.value: f'{idx}',
586
601
  ColumnsTable.NUM_PAGE.value: f'{_page.number_page}',
587
602
  ColumnsTable.NUM_LINE.value: f'{idx+1}',
588
603
  ColumnsTable.TEXT.value: math_text,
589
- ColumnsTable.FILE_NAME.value: file_name if file_name is not None else 'nan',
590
- ColumnsTable.FILETYPE.value: file_extension if file_extension is not None else 'nan',
591
- ColumnsTable.FILE_PATH.value: file_path if file_path is not None else 'nan',
592
- ColumnsTable.DIR.value: dir_path if dir_path is not None else 'nan',
604
+ ColumnsTable.FILE_NAME.value: self.metadata.name,
605
+ ColumnsTable.FILETYPE.value: self.metadata.extension,
606
+ ColumnsTable.FILE_PATH.value: self.metadata.file_path,
607
+ ColumnsTable.DIR.value: self.metadata.dir_path,
593
608
  }
594
609
  _searchable.add_line(new_line)
595
610
  return _searchable
@@ -623,19 +638,15 @@ class DocumentPdf(object):
623
638
  except Exception as e:
624
639
  print(f'{__class__.__name__} {e}')
625
640
  else:
626
- file_path = self.metadata['file_path']
627
- file_name = self.metadata['name']
628
- dir_path = self.metadata['dir_path']
629
- file_extension = self.metadata['extension']
630
641
  new_line = {
631
642
  ColumnsTable.KEY.value: f'{idx}',
632
643
  ColumnsTable.NUM_PAGE.value: f'{_page.number_page}',
633
644
  ColumnsTable.NUM_LINE.value: f'{idx + 1}',
634
645
  ColumnsTable.TEXT.value: math_text,
635
- ColumnsTable.FILE_NAME.value: file_name if file_name is not None else 'nan',
636
- ColumnsTable.FILETYPE.value: file_extension if file_extension is not None else 'nan',
637
- ColumnsTable.FILE_PATH.value: file_path if file_path is not None else 'nan',
638
- ColumnsTable.DIR.value: dir_path if dir_path is not None else 'nan',
646
+ ColumnsTable.FILE_NAME.value: self.metadata.name,
647
+ ColumnsTable.FILETYPE.value: self.metadata.extension,
648
+ ColumnsTable.FILE_PATH.value: self.metadata.file_path,
649
+ ColumnsTable.DIR.value: self.metadata.dir_path,
639
650
  }
640
651
  _searchable.add_line(new_line)
641
652
  return _searchable
@@ -14,6 +14,7 @@ from convert_stream.mod_types.table_types import (
14
14
  from convert_stream.mod_types.modules import (
15
15
  ModPagePdf, PageObject, fitz
16
16
  )
17
+ from convert_stream.mod_types import MetaDataItem, MetaDataFile
17
18
  from convert_stream.text.find_text import FindText, ArrayString
18
19
 
19
20
 
@@ -25,6 +26,7 @@ class ABCPagePdf(ABC):
25
26
  self.mod_page: ModPagePdf = mod_page
26
27
  self.lib_pdf: LibPDF = LibPDF.NOT_IMPLEMENTED
27
28
  self.number_page: int = page_number
29
+ self.metadata: MetaDataFile = MetaDataFile()
28
30
 
29
31
  @abstractmethod
30
32
  def get_width(self) -> float:
@@ -191,6 +193,14 @@ class PageDocumentPdf(object):
191
193
  self.implement_page_pdf: ABCPagePdf = page_pdf
192
194
  self.lib_pdf: LibPDF = page_pdf.lib_pdf
193
195
 
196
+ @property
197
+ def metadata(self) -> MetaDataFile:
198
+ return self.implement_page_pdf.metadata
199
+
200
+ @metadata.setter
201
+ def metadata(self, metadata: MetaDataFile):
202
+ self.implement_page_pdf.metadata = metadata
203
+
194
204
  def __repr__(self) -> str:
195
205
  return self.to_string()
196
206
 
@@ -5,12 +5,15 @@
5
5
  """
6
6
  from __future__ import annotations
7
7
  from abc import ABC, abstractmethod
8
+
9
+ from convert_stream import CollectionImages
8
10
  from soup_files import Directory, ProgressBarAdapter, CreatePbar
9
11
  from convert_stream.mod_types.enums import LibPdfToImage
10
- from convert_stream.mod_types.modules import DEFAULT_LIB_PDF_TO_IMG, DEFAULT_LIB_IMAGE
12
+ from convert_stream.mod_types.modules import DEFAULT_LIB_PDF_TO_IMG, DEFAULT_LIB_IMAGE, LibPDF
11
13
  from convert_stream.image.img_object import ImageObject, LibImage
12
14
  from convert_stream.pdf.pdf_document import DocumentPdf
13
15
 
16
+
14
17
  try:
15
18
  import fitz
16
19
  MOD_FITZ = True
@@ -134,24 +137,33 @@ class ImplementConvertPdfFitz(ABCConvertPdf):
134
137
 
135
138
  class ConvertPdfToImages(object):
136
139
 
137
- def __init__(self, mod_convert_to_image: ABCConvertPdf):
138
- self.mod_convert_to_image: ABCConvertPdf = mod_convert_to_image
140
+ def __init__(self, mod_conv_to_img: ABCConvertPdf | DocumentPdf):
141
+ if isinstance(mod_conv_to_img, ABCConvertPdf):
142
+ self.mod_convert_to_image: ABCConvertPdf = mod_conv_to_img
143
+ elif isinstance(mod_conv_to_img, ImplementConvertPdfFitz):
144
+ self.mod_convert_to_image: ABCConvertPdf = mod_conv_to_img
145
+ elif isinstance(mod_conv_to_img, DocumentPdf):
146
+ self.mod_convert_to_image = ImplementConvertPdfFitz(mod_conv_to_img)
147
+ else:
148
+ raise NotImplementedError()
139
149
 
140
150
  def set_pbar(self, pbar: ProgressBarAdapter):
141
151
  self.mod_convert_to_image.set_pbar(pbar)
142
152
 
143
153
  def to_images(
144
- self, *, dpi: int = 300, lib_image: LibImage = DEFAULT_LIB_IMAGE
154
+ self, *,
155
+ dpi: int = 300,
156
+ lib_image: LibImage = DEFAULT_LIB_IMAGE,
145
157
  ) -> list[ImageObject]:
146
158
  return self.mod_convert_to_image.to_images(dpi=dpi, lib_image=lib_image)
147
159
 
148
160
  def to_files_image(
149
- self,
150
- output_dir: Directory, *,
151
- replace: bool = False,
152
- gaussian_filter: bool = False,
153
- dpi: int = 300,
154
- lib_image: LibImage = DEFAULT_LIB_IMAGE,
161
+ self,
162
+ output_dir: Directory, *,
163
+ replace: bool = False,
164
+ gaussian_filter: bool = False,
165
+ dpi: int = 300,
166
+ lib_image: LibImage = DEFAULT_LIB_IMAGE,
155
167
  ) -> None:
156
168
  self.mod_convert_to_image.to_files_image(
157
169
  dpi=dpi,
@@ -161,6 +173,44 @@ class ConvertPdfToImages(object):
161
173
  gaussian_filter=gaussian_filter
162
174
  )
163
175
 
176
+ def inner_images(self) -> CollectionImages:
177
+ """
178
+ Extrair imagens embutidas nas páginas PDF.
179
+ """
180
+ # doc = Document(stream=page_bytes, filetype="pdf")
181
+ collection_imgs: CollectionImages = CollectionImages([])
182
+ tmp_doc: fitz.Document
183
+ if self.mod_conv_to_img.document.lib_pdf == LibPDF.FITZ:
184
+ tmp_doc: fitz.Document = self.mod_conv_to_img.document.get_real_document()
185
+ elif self.mod_conv_to_img.document.lib_pdf == LibPDF.PYPDF:
186
+ tmp_doc = fitz.Document(
187
+ stream=self.mod_conv_to_img.document.to_bytes().getvalue(), filetype="pdf"
188
+ )
189
+ else:
190
+ raise NotImplementedError()
191
+
192
+ total = len(tmp_doc)
193
+ page: fitz.Page
194
+ for num, page in enumerate(tmp_doc):
195
+ # Extrair imagens embutidas na página
196
+ images_list: list = page.get_images(full=True)
197
+ for img in images_list:
198
+ try:
199
+ # Referência do objeto da imagem
200
+ xref = img[0]
201
+ # Extrair imagem
202
+ base_image = tmp_doc.extract_image(xref)
203
+ # Bytes da imagem
204
+ image_bytes = base_image["image"]
205
+ # Extensão (jpg, png, etc.)
206
+ image_ext = base_image["ext"]
207
+ except Exception as e:
208
+ print(e)
209
+ else:
210
+ img = ImageObject(image_bytes)
211
+ collection_imgs.append(img)
212
+ return collection_imgs
213
+
164
214
  @classmethod
165
215
  def create(cls, doc: DocumentPdf) -> ConvertPdfToImages:
166
216
  _mod = ImplementConvertPdfFitz(doc)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: convert_stream
3
- Version: 2.3.5
3
+ Version: 2.3.7
4
4
  Summary: Manipulação de documentos PDF e Imagens. Converter, Ler, rotacionar exportar etc.
5
5
  Author: Bruno Chaves
6
6
  Requires-Python: >=3.11
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "convert_stream"
7
- version = "2.3.5"
7
+ version = "2.3.7"
8
8
  authors = [
9
9
  { name="Bruno Chaves"},
10
10
  ]
File without changes
File without changes