Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion dftimewolf/lib/containers/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,8 @@ def StoreContainer(self,
module.storage[container.CONTAINER_TYPE] = []

# If the container to add exists already in the state, don't add it again
if container in [c for c, _ in module.storage[container.CONTAINER_TYPE]]:
if any(c is container for c, _ in module.storage[container.CONTAINER_TYPE]):
self._logger.debug('Duplicate container not added to storage: %s', str(container))
continue
Comment thread
ramo-j marked this conversation as resolved.
module.storage[container.CONTAINER_TYPE].append((container, source_module))

Expand Down
65 changes: 8 additions & 57 deletions tests/lib/containers/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import unittest
from unittest import mock

import pandas as pd

from dftimewolf.lib.containers import containers
from dftimewolf.lib.containers import interface
from dftimewolf.lib.containers import manager
Expand Down Expand Up @@ -548,67 +546,20 @@ def test_StoreDuplicateContainers(self):
"""Tests that attempts to store duplicate containers are disregarded."""
self._container_manager.ParseRecipe(_TEST_RECIPE)

self._container_manager.StoreContainer(
source_module='Preflight1', container=_TestContainer1('param1'))
self._container_manager.StoreContainer(
source_module='Preflight1', container=_TestContainer1('param1'))
self._container_manager.StoreContainer(
source_module='Preflight1', container=_TestContainer2('param1'))
self._container_manager.StoreContainer(
source_module='Preflight1', container=_TestContainer2('param1'))
self._container_manager.StoreContainer(
source_module='Preflight1', container=_TestContainer2('param2'))
container_1 = _TestContainer1('param1')
container_2 = _TestContainer2('param1')
container_3 = _TestContainer2('param2')

# Metadata is not considered in duplicate comparison
c5 = _TestContainer3('param1')
c6 = _TestContainer3('param1')
c5.SetMetadata('key', 'foo')
c6.SetMetadata('key', 'bar')
self._container_manager.StoreContainer(
source_module='Preflight1', container=c5)
source_module='Preflight1', container=container_1)
self._container_manager.StoreContainer(
source_module='Preflight1', container=c6)

# Dataframe members of containers have special handling; check that too
df1 = pd.DataFrame(columns=['a', 'b'], data=[[1, 2], [3, 4]])
df2 = pd.DataFrame(columns=['a', 'b'], data=[[1, 2], [3, 4]])
df3 = pd.DataFrame(columns=['c', 'd'], data=[[5, 6], [7, 8]])
source_module='Preflight1', container=container_1)
self._container_manager.StoreContainer(
source_module='Preflight1',
container=containers.DataFrame(
data_frame=df1, description='Description', name='name'))
source_module='Preflight1', container=container_2)
self._container_manager.StoreContainer(
source_module='Preflight1',
container=containers.DataFrame(
data_frame=df2, description='Description', name='name'))
source_module='Preflight1', container=container_2)
self._container_manager.StoreContainer(
source_module='Preflight1',
container=containers.DataFrame(
data_frame=df3, description='Description', name='name'))

actual = self._container_manager.GetContainers(
requesting_module='ModuleA', container_class=_TestContainer1)
self.assertEqual(len(actual), 1)
self.assertIn(_TestContainer1('param1'), actual)

actual = self._container_manager.GetContainers(
requesting_module='ModuleA', container_class=_TestContainer2)
self.assertEqual(len(actual), 2)
self.assertIn(_TestContainer2('param1'), actual)
self.assertIn(_TestContainer2('param2'), actual)

actual = self._container_manager.GetContainers(
requesting_module='ModuleA', container_class=_TestContainer3)
self.assertEqual(len(actual), 1)
self.assertIn(_TestContainer3('param1'), actual)

actual = self._container_manager.GetContainers(
requesting_module='ModuleA', container_class=containers.DataFrame)
self.assertEqual(len(actual), 2)
self.assertIn(containers.DataFrame(
data_frame=df1, description='Description', name='name'), actual)
self.assertIn(containers.DataFrame(
data_frame=df3, description='Description', name='name'), actual)
source_module='Preflight1', container=container_3)

def test_ContainerStreaming(self):
"""Tests that container streaming operates as expected."""
Expand Down
Loading