flow.record 3.19.dev1__tar.gz → 3.19.dev3__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 (84) hide show
  1. {flow_record-3.19.dev1/flow.record.egg-info → flow_record-3.19.dev3}/PKG-INFO +1 -1
  2. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/elastic.py +2 -0
  3. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/fieldtypes/__init__.py +16 -9
  4. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/version.py +2 -2
  5. {flow_record-3.19.dev1 → flow_record-3.19.dev3/flow.record.egg-info}/PKG-INFO +1 -1
  6. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_fieldtypes.py +10 -2
  7. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/COPYRIGHT +0 -0
  8. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/LICENSE +0 -0
  9. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/MANIFEST.in +0 -0
  10. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/README.md +0 -0
  11. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/examples/filesystem.py +0 -0
  12. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/examples/passivedns.py +0 -0
  13. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/examples/records.json +0 -0
  14. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/examples/tcpconn.py +0 -0
  15. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/__init__.py +0 -0
  16. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/__init__.py +0 -0
  17. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/archive.py +0 -0
  18. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/avro.py +0 -0
  19. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/broker.py +0 -0
  20. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/csvfile.py +0 -0
  21. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/duckdb.py +0 -0
  22. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/jsonfile.py +0 -0
  23. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/line.py +0 -0
  24. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/mongo.py +0 -0
  25. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/split.py +0 -0
  26. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/splunk.py +0 -0
  27. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/sqlite.py +0 -0
  28. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/stream.py +0 -0
  29. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/text.py +0 -0
  30. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/adapter/xlsx.py +0 -0
  31. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/base.py +0 -0
  32. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/exceptions.py +0 -0
  33. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/fieldtypes/credential.py +0 -0
  34. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/fieldtypes/net/__init__.py +0 -0
  35. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/fieldtypes/net/ip.py +0 -0
  36. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/fieldtypes/net/ipv4.py +0 -0
  37. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/fieldtypes/net/tcp.py +0 -0
  38. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/fieldtypes/net/udp.py +0 -0
  39. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/jsonpacker.py +0 -0
  40. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/packer.py +0 -0
  41. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/selector.py +0 -0
  42. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/stream.py +0 -0
  43. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/tools/__init__.py +0 -0
  44. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/tools/geoip.py +0 -0
  45. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/tools/rdump.py +0 -0
  46. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/utils.py +0 -0
  47. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow/record/whitelist.py +0 -0
  48. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow.record.egg-info/SOURCES.txt +0 -0
  49. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow.record.egg-info/dependency_links.txt +0 -0
  50. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow.record.egg-info/entry_points.txt +0 -0
  51. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow.record.egg-info/requires.txt +0 -0
  52. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/flow.record.egg-info/top_level.txt +0 -0
  53. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/pyproject.toml +0 -0
  54. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/setup.cfg +0 -0
  55. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/__init__.py +0 -0
  56. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/_utils.py +0 -0
  57. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/docs/Makefile +0 -0
  58. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/docs/conf.py +0 -0
  59. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/docs/index.rst +0 -0
  60. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/selector_explain_example.py +0 -0
  61. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/standalone_test.py +0 -0
  62. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_adapter_line.py +0 -0
  63. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_adapter_text.py +0 -0
  64. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_avro.py +0 -0
  65. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_avro_adapter.py +0 -0
  66. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_compiled_selector.py +0 -0
  67. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_csv_adapter.py +0 -0
  68. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_deprecations.py +0 -0
  69. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_elastic_adapter.py +0 -0
  70. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_fieldtype_ip.py +0 -0
  71. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_json_packer.py +0 -0
  72. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_json_record_adapter.py +0 -0
  73. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_multi_timestamp.py +0 -0
  74. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_packer.py +0 -0
  75. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_rdump.py +0 -0
  76. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_record.py +0 -0
  77. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_record_adapter.py +0 -0
  78. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_record_descriptor.py +0 -0
  79. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_regression.py +0 -0
  80. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_selector.py +0 -0
  81. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_splunk_adapter.py +0 -0
  82. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_sqlite_duckdb_adapter.py +0 -0
  83. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tests/test_xlsx_adapter.py +0 -0
  84. {flow_record-3.19.dev1 → flow_record-3.19.dev3}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flow.record
3
- Version: 3.19.dev1
3
+ Version: 3.19.dev3
4
4
  Summary: A library for defining and creating structured data (called records) that can be streamed to disk or piped to other tools that use flow.record
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License: Affero General Public License v3
@@ -128,6 +128,8 @@ class ElasticWriter(AbstractWriter):
128
128
  record = self.queue.get()
129
129
  if record is StopIteration:
130
130
  break
131
+ if not record:
132
+ continue
131
133
  yield self.record_to_document(record, index=self.index)
132
134
 
133
135
  def streaming_bulk_thread(self) -> None:
@@ -33,6 +33,7 @@ UTC = timezone.utc
33
33
 
34
34
  PY_311_OR_HIGHER = sys.version_info >= (3, 11, 0)
35
35
  PY_312_OR_HIGHER = sys.version_info >= (3, 12, 0)
36
+ PY_313_OR_HIGHER = sys.version_info >= (3, 13, 0)
36
37
 
37
38
  TYPE_POSIX = 0
38
39
  TYPE_WINDOWS = 1
@@ -600,12 +601,18 @@ class record(FieldType):
600
601
  return data
601
602
 
602
603
 
603
- def _is_posixlike_path(path: Any):
604
- return isinstance(path, pathlib.PurePath) and "\\" not in (path._flavour.sep, path._flavour.altsep)
604
+ def _is_posixlike_path(path: Any) -> bool:
605
+ if isinstance(path, pathlib.PurePath):
606
+ obj = getattr(path, "parser", None) or path._flavour
607
+ return "\\" not in (obj.sep, obj.altsep)
608
+ return False
605
609
 
606
610
 
607
- def _is_windowslike_path(path: Any):
608
- return isinstance(path, pathlib.PurePath) and "\\" in (path._flavour.sep, path._flavour.altsep)
611
+ def _is_windowslike_path(path: Any) -> bool:
612
+ if isinstance(path, pathlib.PurePath):
613
+ obj = getattr(path, "parser", None) or path._flavour
614
+ return "\\" in (obj.sep, obj.altsep)
615
+ return False
609
616
 
610
617
 
611
618
  class path(pathlib.PurePath, FieldType):
@@ -684,17 +691,17 @@ class path(pathlib.PurePath, FieldType):
684
691
  return repr(str(self))
685
692
 
686
693
  @property
687
- def parent(self):
694
+ def parent(self) -> path:
688
695
  if self._empty_path:
689
696
  return self
690
697
  return super().parent
691
698
 
692
- def _pack(self):
699
+ def _pack(self) -> tuple[str, int]:
693
700
  path_type = TYPE_WINDOWS if isinstance(self, windows_path) else TYPE_POSIX
694
701
  return (str(self), path_type)
695
702
 
696
703
  @classmethod
697
- def _unpack(cls, data: tuple[str, str]):
704
+ def _unpack(cls, data: tuple[str, str]) -> posix_path | windows_path:
698
705
  path_, path_type = data
699
706
  if path_type == TYPE_POSIX:
700
707
  return posix_path(path_)
@@ -705,12 +712,12 @@ class path(pathlib.PurePath, FieldType):
705
712
  return posix_path(path_)
706
713
 
707
714
  @classmethod
708
- def from_posix(cls, path_: str):
715
+ def from_posix(cls, path_: str) -> posix_path:
709
716
  """Initialize a path instance from a posix path string using / as a separator."""
710
717
  return posix_path(path_)
711
718
 
712
719
  @classmethod
713
- def from_windows(cls, path_: str):
720
+ def from_windows(cls, path_: str) -> windows_path:
714
721
  """Initialize a path instance from a windows path string using \\ or / as a separator."""
715
722
  return windows_path(path_)
716
723
 
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '3.19.dev1'
16
- __version_tuple__ = version_tuple = (3, 19, 'dev1')
15
+ __version__ = version = '3.19.dev3'
16
+ __version_tuple__ = version_tuple = (3, 19, 'dev3')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flow.record
3
- Version: 3.19.dev1
3
+ Version: 3.19.dev3
4
4
  Summary: A library for defining and creating structured data (called records) that can be streamed to disk or piped to other tools that use flow.record
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License: Affero General Public License v3
@@ -15,6 +15,7 @@ import flow.record.fieldtypes
15
15
  from flow.record import RecordDescriptor, RecordReader, RecordWriter, fieldtypes
16
16
  from flow.record.fieldtypes import (
17
17
  PY_312_OR_HIGHER,
18
+ PY_313_OR_HIGHER,
18
19
  TYPE_POSIX,
19
20
  TYPE_WINDOWS,
20
21
  _is_posixlike_path,
@@ -557,8 +558,15 @@ def custom_pure_path(sep: str, altsep: str) -> pathlib.PurePath:
557
558
  instance.altsep = altsep
558
559
  return instance
559
560
 
560
- class PureCustomPath(pathlib.PurePath):
561
- _flavour = CustomFlavour()
561
+ if PY_313_OR_HIGHER:
562
+
563
+ class PureCustomPath(pathlib.PurePath):
564
+ parser = CustomFlavour()
565
+
566
+ else:
567
+
568
+ class PureCustomPath(pathlib.PurePath):
569
+ _flavour = CustomFlavour()
562
570
 
563
571
  return PureCustomPath
564
572
 
File without changes
File without changes