Skip to content

Commit ba939da

Browse files
committed
reorder imports/lint
1 parent bf57bdc commit ba939da

File tree

3 files changed

+51
-28
lines changed

3 files changed

+51
-28
lines changed

reddit_decider/__init__.py

+24-12
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,6 @@
1212
from typing import Optional
1313
from typing import Union
1414

15-
import rust_decider # type: ignore
16-
from rust_decider import Decider as RustDecider
17-
from rust_decider import DeciderFeatureNotFoundException
18-
from rust_decider import DeciderInitException
19-
from rust_decider import DeciderException
20-
2115
from baseplate import RequestContext
2216
from baseplate import Span
2317
from baseplate.clients import ContextFactory
@@ -28,6 +22,11 @@
2822
from baseplate.lib.file_watcher import T
2923
from baseplate.lib.file_watcher import WatchedFileNotAvailableError
3024
from reddit_edgecontext import ValidatedAuthenticationToken
25+
from rust_decider import Decider as RustDecider
26+
from rust_decider import DeciderException
27+
from rust_decider import DeciderFeatureNotFoundException
28+
from rust_decider import DeciderInitException
29+
from rust_decider import make_ctx
3130
from typing_extensions import Literal
3231

3332

@@ -189,15 +188,15 @@ def _get_decider(self) -> Optional[T]:
189188

190189
def _get_ctx(self) -> Any:
191190
context_fields = self._decider_context.to_dict()
192-
return rust_decider.make_ctx(context_fields)
191+
return make_ctx(context_fields)
193192

194193
def _get_ctx_with_set_identifier(
195194
self, identifier: str, identifier_type: Literal["user_id", "device_id", "canonical_url"]
196195
) -> Dict[str, Any]:
197196
context_fields = self._decider_context.to_dict()
198197
context_fields[identifier_type] = identifier
199198

200-
return rust_decider.make_ctx(context_fields)
199+
return make_ctx(context_fields)
201200

202201
def _format_decision(self, decision_dict: Dict[str, str]) -> Dict[str, Any]:
203202
out = {}
@@ -1005,7 +1004,11 @@ def _prune_extracted_dict(extracted_dict: dict) -> dict:
10051004
return parsed_extracted_fields
10061005

10071006
def _minimal_decider(
1008-
self, rs_decider: Optional[RustDecider], name: str, span: Span, parsed_extracted_fields: Optional[Dict] = None
1007+
self,
1008+
rs_decider: Optional[RustDecider],
1009+
name: str,
1010+
span: Span,
1011+
parsed_extracted_fields: Optional[Dict] = None,
10091012
) -> Decider:
10101013
return Decider(
10111014
decider_context=DeciderContext(extracted_fields=parsed_extracted_fields),
@@ -1049,21 +1052,30 @@ def make_object_for_context(self, name: str, span: Span) -> Decider:
10491052
# if `edge_context` is inaccessible, bail early
10501053
if request is None:
10511054
return self._minimal_decider(
1052-
rs_decider=rs_decider, name=name, span=span, parsed_extracted_fields=parsed_extracted_fields
1055+
rs_decider=rs_decider,
1056+
name=name,
1057+
span=span,
1058+
parsed_extracted_fields=parsed_extracted_fields,
10531059
)
10541060

10551061
ec = request.edge_context
10561062

10571063
if ec is None:
10581064
return self._minimal_decider(
1059-
rs_decider=rs_decider, name=name, span=span, parsed_extracted_fields=parsed_extracted_fields
1065+
rs_decider=rs_decider,
1066+
name=name,
1067+
span=span,
1068+
parsed_extracted_fields=parsed_extracted_fields,
10601069
)
10611070
except Exception as exc:
10621071
logger.info(
10631072
f"Unable to access `request.edge_context` in `make_object_for_context()`. details: {exc}"
10641073
)
10651074
return self._minimal_decider(
1066-
rs_decider=rs_decider, name=name, span=span, parsed_extracted_fields=parsed_extracted_fields
1075+
rs_decider=rs_decider,
1076+
name=name,
1077+
span=span,
1078+
parsed_extracted_fields=parsed_extracted_fields,
10671079
)
10681080

10691081
# All fields below are derived from `edge_context`

setup.cfg

+5
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,8 @@ warn_unused_ignores = True
2424
warn_return_any = False
2525
no_implicit_reexport = True
2626
strict_equality = True
27+
28+
[mypy-rust_decider]
29+
# TODO: add stubs to reddit-decider
30+
# see https://pyo3.rs/v0.16.2/python_typing_hints.html
31+
ignore_missing_imports = True

tests/decider_tests.py

+22-16
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def decider_field_extractor(_request: RequestContext):
5858
"canonical_url": CANONICAL_URL,
5959
}
6060

61+
6162
def setup_decider(file_name, decider_context, mock_span, event_logger):
6263
try:
6364
rs_decider = init_decider_parser(file_name)
@@ -73,6 +74,7 @@ def setup_decider(file_name, decider_context, mock_span, event_logger):
7374
event_logger=event_logger,
7475
)
7576

77+
7678
def first_occurrence_of_key_in(array, dict_key, name):
7779
return next((v for v in array if v[dict_key] == name), None)
7880

@@ -485,7 +487,9 @@ def test_none_returned_on_variant_call_with_bad_id(self):
485487
}
486488
with create_temp_config_file(config) as f:
487489
with self.assertLogs() as captured:
488-
decider = setup_decider(f, self.minimal_decider_context, self.mock_span, self.event_logger)
490+
decider = setup_decider(
491+
f, self.minimal_decider_context, self.mock_span, self.event_logger
492+
)
489493
variant = decider.get_variant("test")
490494

491495
self.assertEqual(variant, None)
@@ -510,15 +514,19 @@ def test_none_returned_on_get_variant_call_with_no_experiment_data(self):
510514
}
511515
}
512516
with create_temp_config_file(config) as f:
513-
decider = setup_decider(f, self.minimal_decider_context, self.mock_span, self.event_logger)
517+
decider = setup_decider(
518+
f, self.minimal_decider_context, self.mock_span, self.event_logger
519+
)
514520

515521
self.assertEqual(self.event_logger.log.call_count, 0)
516522
variant = decider.get_variant("test")
517523
self.assertEqual(variant, None)
518524

519525
def test_none_returned_on_get_variant_call_with_experiment_not_found(self):
520526
with create_temp_config_file({}) as f:
521-
decider = setup_decider(f, self.minimal_decider_context, self.mock_span, self.event_logger)
527+
decider = setup_decider(
528+
f, self.minimal_decider_context, self.mock_span, self.event_logger
529+
)
522530

523531
self.assertEqual(self.event_logger.log.call_count, 0)
524532
with warnings.catch_warnings(record=True) as captured:
@@ -527,11 +535,7 @@ def test_none_returned_on_get_variant_call_with_experiment_not_found(self):
527535
# can't test warning log only shows up only once if `decider.get_variant("anything")`
528536
# is called again due to bug in `catch_warnings` contextmanager
529537
# see https://github.com/python/cpython/issues/73858
530-
assert any(
531-
'Feature "anything" not found.'
532-
in str(x.message)
533-
for x in captured
534-
)
538+
assert any('Feature "anything" not found.' in str(x.message) for x in captured)
535539
self.assertEqual(variant, None)
536540

537541
# no exposures should be triggered
@@ -571,7 +575,9 @@ def test_get_variant_without_expose_for_holdout_exposure(self):
571575

572576
def test_none_returned_on_get_variant_without_expose_call_with_experiment_not_found(self):
573577
with create_temp_config_file({}) as f:
574-
decider = setup_decider(f, self.minimal_decider_context, self.mock_span, self.event_logger)
578+
decider = setup_decider(
579+
f, self.minimal_decider_context, self.mock_span, self.event_logger
580+
)
575581

576582
self.assertEqual(self.event_logger.log.call_count, 0)
577583
with warnings.catch_warnings(record=True) as captured:
@@ -580,11 +586,7 @@ def test_none_returned_on_get_variant_without_expose_call_with_experiment_not_fo
580586
# can't test warning log only shows up only once if `decider.get_variant("anything")`
581587
# is called again due to bug in `catch_warnings` contextmanager
582588
# see https://github.com/python/cpython/issues/73858
583-
assert any(
584-
'Feature "anything" not found.'
585-
in str(x.message)
586-
for x in captured
587-
)
589+
assert any('Feature "anything" not found.' in str(x.message) for x in captured)
588590
self.assertEqual(variant, None)
589591

590592
# no exposures should be triggered
@@ -703,7 +705,9 @@ def test_get_variant_for_identifier_bogus_identifier_type(self):
703705
identifier_type = "blah"
704706

705707
with create_temp_config_file(self.exp_base_config) as f:
706-
decider = setup_decider(f, self.minimal_decider_context, self.mock_span, self.event_logger)
708+
decider = setup_decider(
709+
f, self.minimal_decider_context, self.mock_span, self.event_logger
710+
)
707711

708712
self.assertEqual(self.event_logger.log.call_count, 0)
709713
with self.assertLogs() as captured:
@@ -977,7 +981,9 @@ def test_get_all_variants_for_identifier_without_expose_user_id_wrong_bucket(sel
977981
self.exp_base_config["exp_1"]["experiment"].update({"bucket_val": "device_id"})
978982

979983
with create_temp_config_file(self.exp_base_config) as f:
980-
decider = setup_decider(f, self.minimal_decider_context, self.mock_span, self.event_logger)
984+
decider = setup_decider(
985+
f, self.minimal_decider_context, self.mock_span, self.event_logger
986+
)
981987

982988
self.assertEqual(self.event_logger.log.call_count, 0)
983989

0 commit comments

Comments
 (0)