flow.record 3.15.dev12__tar.gz → 3.15.dev13__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.
- {flow.record-3.15.dev12/flow.record.egg-info → flow.record-3.15.dev13}/PKG-INFO +1 -1
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/base.py +21 -1
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/version.py +2 -2
- {flow.record-3.15.dev12 → flow.record-3.15.dev13/flow.record.egg-info}/PKG-INFO +1 -1
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_record.py +13 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/COPYRIGHT +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/LICENSE +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/MANIFEST.in +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/README.md +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/examples/filesystem.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/examples/passivedns.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/examples/records.json +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/examples/tcpconn.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/__init__.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/__init__.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/archive.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/avro.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/broker.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/csvfile.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/duckdb.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/elastic.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/jsonfile.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/line.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/mongo.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/split.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/splunk.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/sqlite.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/stream.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/text.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/adapter/xlsx.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/exceptions.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/fieldtypes/__init__.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/fieldtypes/credential.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/fieldtypes/net/__init__.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/fieldtypes/net/ip.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/fieldtypes/net/ipv4.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/fieldtypes/net/tcp.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/fieldtypes/net/udp.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/jsonpacker.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/packer.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/selector.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/stream.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/tools/__init__.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/tools/geoip.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/tools/rdump.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/utils.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow/record/whitelist.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow.record.egg-info/SOURCES.txt +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow.record.egg-info/dependency_links.txt +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow.record.egg-info/entry_points.txt +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow.record.egg-info/requires.txt +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/flow.record.egg-info/top_level.txt +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/pyproject.toml +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/setup.cfg +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/__init__.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/_utils.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/docs/Makefile +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/docs/conf.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/docs/index.rst +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/selector_explain_example.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/standalone_test.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_avro.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_avro_adapter.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_compiled_selector.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_csv_adapter.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_deprecations.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_fieldtype_ip.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_fieldtypes.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_json_packer.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_json_record_adapter.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_multi_timestamp.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_packer.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_rdump.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_record_adapter.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_record_descriptor.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_regression.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_selector.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_splunk_adapter.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/test_sqlite_duckdb_adapter.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tests/utils_inspect.py +0 -0
- {flow.record-3.15.dev12 → flow.record-3.15.dev13}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flow.record
|
|
3
|
-
Version: 3.15.
|
|
3
|
+
Version: 3.15.dev13
|
|
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
|
|
@@ -201,7 +201,27 @@ class Record:
|
|
|
201
201
|
return result
|
|
202
202
|
|
|
203
203
|
def __hash__(self) -> int:
|
|
204
|
-
|
|
204
|
+
desc_identifier, values = self._pack(excluded_fields=IGNORE_FIELDS_FOR_COMPARISON)
|
|
205
|
+
if not any((isinstance(value, list) for value in values)):
|
|
206
|
+
return hash((desc_identifier, values))
|
|
207
|
+
|
|
208
|
+
# Lists have to be converted to tuples to be able to hash them
|
|
209
|
+
record_values = []
|
|
210
|
+
for value in values:
|
|
211
|
+
if not isinstance(value, list):
|
|
212
|
+
record_values.append(value)
|
|
213
|
+
continue
|
|
214
|
+
list_values = []
|
|
215
|
+
for list_value in value:
|
|
216
|
+
if isinstance(list_value, dict):
|
|
217
|
+
# List values that are dicts must be converted to tuples
|
|
218
|
+
dict_as_tuple = tuple(list_value.items())
|
|
219
|
+
list_values.append(dict_as_tuple)
|
|
220
|
+
else:
|
|
221
|
+
list_values.append(list_value)
|
|
222
|
+
record_values.append(tuple(list_values))
|
|
223
|
+
|
|
224
|
+
return hash((desc_identifier, tuple(record_values)))
|
|
205
225
|
|
|
206
226
|
def __repr__(self):
|
|
207
227
|
return "<{} {}>".format(
|
|
@@ -12,5 +12,5 @@ __version__: str
|
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
|
13
13
|
version_tuple: VERSION_TUPLE
|
|
14
14
|
|
|
15
|
-
__version__ = version = '3.15.
|
|
16
|
-
__version_tuple__ = version_tuple = (3, 15, '
|
|
15
|
+
__version__ = version = '3.15.dev13'
|
|
16
|
+
__version_tuple__ = version_tuple = (3, 15, 'dev13')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flow.record
|
|
3
|
-
Version: 3.15.
|
|
3
|
+
Version: 3.15.dev13
|
|
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
|
|
@@ -922,3 +922,16 @@ def test_ignore_fields_for_comparision_contextmanager():
|
|
|
922
922
|
# test reset again
|
|
923
923
|
assert len(set(records)) == len(records)
|
|
924
924
|
assert records[0] != records[1]
|
|
925
|
+
|
|
926
|
+
|
|
927
|
+
def test_list_field_type_hashing():
|
|
928
|
+
TestRecord = RecordDescriptor(
|
|
929
|
+
"test/record",
|
|
930
|
+
[
|
|
931
|
+
("string[]", "stringlist"),
|
|
932
|
+
("dictlist", "dictlist"),
|
|
933
|
+
],
|
|
934
|
+
)
|
|
935
|
+
|
|
936
|
+
test_record = TestRecord(stringlist=["a", "b", "c", "d"], dictlist=[{"a": "b", "c": "d"}, {"foo": "bar"}])
|
|
937
|
+
assert isinstance(hash(test_record), int)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|