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
9 changes: 5 additions & 4 deletions tests/endpoints/test_vessel_class_breakdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@

from tests.testcases import TestCaseUsingRealAPI

totalVesselClassBreakdown = 27
MIN_VESSEL_CLASSES = 25
MAX_VESSEL_CLASSES = 35


class TestVesselClassBreakdownReal(TestCaseUsingRealAPI):
Expand All @@ -16,7 +17,7 @@ def test_search_returns_one_day(self):
filter_time_max=date,
)

assert len(result) == totalVesselClassBreakdown
assert MIN_VESSEL_CLASSES <= len(result) <= MAX_VESSEL_CLASSES

def test_search_returns_any_activity(self):
date = datetime(2019, 11, 10)
Expand All @@ -28,7 +29,7 @@ def test_search_returns_any_activity(self):
filter_time_max=date,
)

assert len(result) == totalVesselClassBreakdown
assert MIN_VESSEL_CLASSES <= len(result) <= MAX_VESSEL_CLASSES

def test_search_returns_excluded_params(self):
date = datetime(2019, 11, 10)
Expand All @@ -44,4 +45,4 @@ def test_search_returns_excluded_params(self):
exclude_origins=rotterdam,
)

assert len(result) == totalVesselClassBreakdown
assert MIN_VESSEL_CLASSES <= len(result) <= MAX_VESSEL_CLASSES
65 changes: 65 additions & 0 deletions tests/endpoints/test_vessels.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from unittest.mock import patch

from tests.testcases import TestCaseUsingMockAPI
from vortexasdk.api.shared_types import Tag
from vortexasdk.endpoints.vessels import Vessels


Expand All @@ -13,3 +16,65 @@ def test_search_ids_retreives_names(self):
def test_convert_to_df(self):
df = Vessels().search().to_df()
assert len(df) > 0

@patch("vortexasdk.operations.default_client")
def test_search_with_vessel_tags(self, mock_client):
mock_client.return_value.search_base.return_value = {
"data": [],
"reference": {},
}

Vessels().search(
vessel_tags=[Tag(tag="vessel_fso_tag")],
)

_, kwargs = mock_client.return_value.search_base.call_args
assert kwargs["vessel_tags"] == [{"tag": "vessel_fso_tag"}]

@patch("vortexasdk.operations.default_client")
def test_search_with_vessel_tags_excluded(self, mock_client):
mock_client.return_value.search_base.return_value = {
"data": [],
"reference": {},
}

Vessels().search(
vessel_tags_excluded=[Tag(tag="vessel_fso_tag")],
)

_, kwargs = mock_client.return_value.search_base.call_args
assert kwargs["vessel_tags_excluded"] == [{"tag": "vessel_fso_tag"}]

@patch("vortexasdk.operations.default_client")
def test_search_with_single_vessel_tag(self, mock_client):
mock_client.return_value.search_base.return_value = {
"data": [],
"reference": {},
}

Vessels().search(
vessel_tags=Tag(tag="vessel_decommissioned_tag"),
)

_, kwargs = mock_client.return_value.search_base.call_args
assert kwargs["vessel_tags"] == [{"tag": "vessel_decommissioned_tag"}]

@patch("vortexasdk.operations.default_client")
def test_search_with_multiple_vessel_tags(self, mock_client):
mock_client.return_value.search_base.return_value = {
"data": [],
"reference": {},
}

Vessels().search(
vessel_tags=[
Tag(tag="vessel_fso_tag"),
Tag(tag="vessel_decommissioned_tag"),
],
)

_, kwargs = mock_client.return_value.search_base.call_args
assert kwargs["vessel_tags"] == [
{"tag": "vessel_fso_tag"},
{"tag": "vessel_decommissioned_tag"},
]
17 changes: 17 additions & 0 deletions vortexasdk/endpoints/vessels.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from typing import Any, Dict, List, Optional, Union

from vortexasdk.api import ID
from vortexasdk.api.shared_types import Tag
from vortexasdk.endpoints.endpoints import VESSELS_REFERENCE
from vortexasdk.endpoints.vessels_result import VesselsResult
from vortexasdk.operations import Reference, Search
Expand All @@ -31,6 +32,8 @@ def search(
ids: Optional[Union[str, List[str]]] = None,
vessel_classes: Optional[Union[str, List[str]]] = None,
vessel_scrubbers: str = "disabled",
vessel_tags: Optional[Union[Tag, List[Tag]]] = None,
vessel_tags_excluded: Optional[Union[Tag, List[Tag]]] = None,
exact_term_match: bool = False,
) -> VesselsResult:
"""
Expand All @@ -48,6 +51,12 @@ def search(
To only include vessels with scrubbers, enter 'inc'.
To exclude vessels with scrubbers, enter 'exc'.

vessel_tags: A vessel tag, or list of vessel tags to filter on.
e.g. `Tag(tag="vessel_fso_tag")` to filter for FSO vessels.

vessel_tags_excluded: A vessel tag, or list of vessel tags to exclude.
e.g. `Tag(tag="vessel_fso_tag")` to exclude FSO vessels.

exact_term_match: Search on only exact term matches, or allow similar matches.
e.g. When searching for "Ocean" with `exact_term_match=False`, then the SDK will yield vessels named
['Ocean', 'Ocean Wisdom', ...] etc. When `exact_term_match=True`,
Expand Down Expand Up @@ -92,6 +101,14 @@ def search(
v.lower() for v in convert_to_list(vessel_classes)
],
"vessel_scrubbers": vessel_scrubbers,
"vessel_tags": [
tag.dict(exclude_none=True)
for tag in convert_to_list(vessel_tags)
],
"vessel_tags_excluded": [
tag.dict(exclude_none=True)
for tag in convert_to_list(vessel_tags_excluded)
],
}

response = super().search_with_client(
Expand Down
2 changes: 1 addition & 1 deletion vortexasdk/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "1.0.28"
__version__ = "1.0.29"
Loading