Skip to content

Commit 1989253

Browse files
committed
Add Priority constants
It'd be cool if we could just use org.scijava.priority.Priority, but we can't do that without pulling in all of SJC. We could get some good use out of SciJava3 having a SciJava Priority module :)
1 parent 6240199 commit 1989253

1 file changed

Lines changed: 62 additions & 41 deletions

File tree

scyjava/__init__.py

Lines changed: 62 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,25 @@ def compare_version(version, java_class_version):
175175

176176
# -- Type Conversion Utilities --
177177

178+
# TODO: It would be cool to just use org.scijava.priority.Priority.
179+
# Unfortunately, we cannot do that without bringing in all of SJC.
180+
# Once SciJava 3 is mainstream, we could use a SciJava Priority module :)
181+
class Priority:
182+
FIRST = 1E300
183+
EXTREMELY_HIGH = 1E6
184+
VERY_HIGH = 1E4
185+
HIGH = 1E2
186+
NORMAL = 0
187+
LOW = -1E2
188+
VERY_LOW = -1E4
189+
EXTREMELY_LOW = -1E6
190+
LAST = -1E300
178191

179192
class Converter(NamedTuple):
180193
predicate: Callable[[Any], bool]
181194
converter: Callable[[Any], Any]
182-
priority: float
195+
# Corresponds with Priority.NORMAL
196+
priority: float = 0
183197

184198

185199
def _convert(obj: Any, converters: typing.List[Converter]) -> Any:
@@ -296,6 +310,13 @@ def convertIterable(obj: collections.abc.Iterable):
296310

297311

298312
def add_java_converter(predicate: Callable[[Any], bool], converter: Callable[[Any], Any], priority: float):
313+
"""
314+
Adds a converter to the list used by to_java
315+
:param predicate: A Callable identifying suitable data types for this converter
316+
:param converter: A Callable able to convert a set of types
317+
:priority:
318+
319+
"""
299320
c = Converter(predicate, converter, priority)
300321
_add_converter(c, java_converters)
301322

@@ -325,91 +346,91 @@ def _stock_java_converters() -> typing.List[Converter]:
325346
Converter(
326347
predicate=lambda obj: True,
327348
converter=_raise_type_exception,
328-
priority=-10001
349+
priority=Priority.EXTREMELY_LOW - 1
329350
),
330351
# NoneType converter
331352
Converter(
332353
predicate=lambda obj: obj is None,
333354
converter=lambda obj: None,
334-
priority=10001
355+
priority=Priority.EXTREMELY_HIGH + 1
335356
),
336357
# Java identity converter
337358
Converter(
338359
predicate=isjava,
339360
converter=lambda obj: obj,
340-
priority=10000
361+
priority=Priority.EXTREMELY_HIGH
341362
),
342363
# String converter
343364
Converter(
344365
predicate=lambda obj: isinstance(obj, str),
345366
converter=lambda obj: String(obj.encode('utf-8'), 'utf-8'),
346-
priority=0
367+
priority=Priority.NORMAL
347368
),
348369
# Boolean converter
349370
Converter(
350371
predicate=lambda obj: isinstance(obj, bool),
351372
converter=Boolean,
352-
priority=0
373+
priority=Priority.NORMAL
353374
),
354375
# Integer converter
355376
Converter(
356377
predicate=lambda obj: isinstance(obj, int) and obj <= Integer.MAX_VALUE and obj >= Integer.MIN_VALUE,
357378
converter= Integer,
358-
priority=0
379+
priority=Priority.NORMAL
359380
),
360381
# Long converter
361382
Converter(
362383
predicate=lambda obj: isinstance(obj, int) and obj <= Long.MAX_VALUE,
363384
converter=Long,
364-
priority=-1
385+
priority=Priority.NORMAL - 1
365386
),
366387
# BigInteger converter
367388
Converter(
368389
predicate=lambda obj: isinstance(obj, int),
369390
converter=lambda obj: BigInteger(str(obj)),
370-
priority=-2
391+
priority=Priority.NORMAL - 2
371392
),
372393
# Float converter
373394
Converter(
374395
predicate=lambda obj: isinstance(obj, float) and obj <= Float.MAX_VALUE and obj >= Float.MIN_VALUE,
375396
converter= Float,
376-
priority=0
397+
priority=Priority.NORMAL
377398
),
378399
# Double converter
379400
Converter(
380401
predicate=lambda obj: isinstance(obj, float) and obj <= Double.MAX_VALUE and obj >= Float.MIN_VALUE,
381402
converter=Double,
382-
priority=-1
403+
priority=Priority.NORMAL - 1
383404
),
384405
# BigDecimal converter
385406
Converter(
386407
predicate=lambda obj: isinstance(obj, float),
387408
converter=lambda obj: BigDecimal(str(obj)),
388-
priority=-2
409+
priority=Priority.NORMAL - 2
389410
),
390411
# Pandas table converter
391412
Converter(
392413
predicate=lambda obj: type(obj).__name__ == 'DataFrame',
393414
converter=_pandas_to_table,
394-
priority=1
415+
priority=Priority.NORMAL + 1
395416
),
396417
# Mapping converter
397418
Converter(
398419
predicate=lambda obj: isinstance(obj, collections.abc.Mapping),
399420
converter=convertMap,
400-
priority=0
421+
priority=Priority.NORMAL
401422
),
402423
# Set converter
403424
Converter(
404425
predicate=lambda obj: isinstance(obj, collections.abc.Set),
405426
converter=convertSet,
406-
priority=0
427+
priority=Priority.NORMAL
407428
),
408429
# Iterable converter
409430
Converter(
410431
predicate=lambda obj: isinstance(obj, collections.abc.Iterable),
411432
converter=convertIterable,
412-
priority=-1
433+
priority=Priority.NORMAL -1
413434
),
414435
]
415436

@@ -623,151 +644,151 @@ def _stock_py_converters() -> typing.List:
623644
Converter(
624645
predicate=lambda obj: True,
625646
converter=_raise_type_exception,
626-
priority=-10001
647+
priority=Priority.EXTREMELY_LOW - 1
627648
),
628649
# Java identity converter
629650
Converter(
630651
predicate=lambda obj: not isjava(obj),
631652
converter=lambda obj: obj,
632-
priority=10000
653+
priority=Priority.EXTREMELY_HIGH
633654
),
634655
# JBoolean converter
635656
Converter(
636657
predicate=lambda obj: isinstance(obj, JBoolean),
637658
converter=bool,
638-
priority=1
659+
priority=Priority.NORMAL + 1
639660
),
640661
# JInt/JLong/JShort converter
641662
Converter(
642663
predicate=lambda obj: isinstance(obj, (JInt, JLong, JShort)),
643664
converter=int,
644-
priority=1
665+
priority=Priority.NORMAL + 1
645666
),
646667
# JDouble/JFloat converter
647668
Converter(
648669
predicate=lambda obj: isinstance(obj, (JDouble, JFloat)),
649670
converter=float,
650-
priority=1
671+
priority=Priority.NORMAL + 1
651672
),
652673
# JChar converter
653674
Converter(
654675
predicate=lambda obj: isinstance(obj, JChar),
655676
converter=str,
656-
priority=1
677+
priority=Priority.NORMAL + 1
657678
),
658679
# Boolean converter
659680
Converter(
660681
predicate=lambda obj: isinstance(obj, Boolean),
661682
converter=lambda obj: obj.booleanValue(),
662-
priority=0
683+
priority=Priority.NORMAL
663684
),
664685
# Byte converter
665686
Converter(
666687
predicate=lambda obj: isinstance(obj, Byte),
667688
converter=lambda obj: obj.byteValue(),
668-
priority=0
689+
priority=Priority.NORMAL
669690
),
670691
# Char converter
671692
Converter(
672693
predicate=lambda obj: isinstance(obj, Character),
673694
converter=lambda obj: obj.toString(),
674-
priority=0
695+
priority=Priority.NORMAL
675696
),
676697
# Double converter
677698
Converter(
678699
predicate=lambda obj: isinstance(obj, Double),
679700
converter=lambda obj: obj.doubleValue(),
680-
priority=0
701+
priority=Priority.NORMAL
681702
),
682703
# Float converter
683704
Converter(
684705
predicate=lambda obj: isinstance(obj, Float),
685706
converter=lambda obj: obj.floatValue(),
686-
priority=0
707+
priority=Priority.NORMAL
687708
),
688709
# Integer converter
689710
Converter(
690711
predicate=lambda obj: isinstance(obj, Integer),
691712
converter=lambda obj: obj.intValue(),
692-
priority=0
713+
priority=Priority.NORMAL
693714
),
694715
# Long converter
695716
Converter(
696717
predicate=lambda obj: isinstance(obj, Long),
697718
converter=lambda obj: obj.longValue(),
698-
priority=0
719+
priority=Priority.NORMAL
699720
),
700721
# Short converter
701722
Converter(
702723
predicate=lambda obj: isinstance(obj, Short),
703724
converter=lambda obj: obj.shortValue(),
704-
priority=0
725+
priority=Priority.NORMAL
705726
),
706727
# Void converter
707728
Converter(
708729
predicate=lambda obj: isinstance(obj, Void),
709730
converter=lambda obj: None,
710-
priority=0
731+
priority=Priority.NORMAL
711732
),
712733
# String converter
713734
Converter(
714735
predicate=lambda obj: isinstance(obj, String),
715736
converter=lambda obj: str(obj),
716-
priority=0
737+
priority=Priority.NORMAL
717738
),
718739
# BigInteger converter
719740
Converter(
720741
predicate=lambda obj: isinstance(obj, BigInteger),
721742
converter=lambda obj: int(str(obj.toString())),
722-
priority=0
743+
priority=Priority.NORMAL
723744
),
724745
# BigDecimal converter
725746
Converter(
726747
predicate=lambda obj: isinstance(obj, BigDecimal),
727748
converter=lambda obj: float(obj.toString),
728-
priority=0
749+
priority=Priority.NORMAL
729750
),
730751
# SciJava Table converter
731752
Converter(
732753
predicate=_is_table,
733754
converter=_convert_table,
734-
priority=0
755+
priority=Priority.NORMAL
735756
),
736757
# List converter
737758
Converter(
738759
predicate=lambda obj: isinstance(obj, List),
739760
converter=JavaList,
740-
priority=0
761+
priority=Priority.NORMAL
741762
),
742763
# Map converter
743764
Converter(
744765
predicate=lambda obj: isinstance(obj, Map),
745766
converter=JavaMap,
746-
priority=0
767+
priority=Priority.NORMAL
747768
),
748769
# Set converter
749770
Converter(
750771
predicate=lambda obj: isinstance(obj, Set),
751772
converter=JavaSet,
752-
priority=0
773+
priority=Priority.NORMAL
753774
),
754775
# Collection converter
755776
Converter(
756777
predicate=lambda obj: isinstance(obj, Collection),
757778
converter=JavaCollection,
758-
priority=-1
779+
priority=Priority.NORMAL -1
759780
),
760781
# Iterable converter
761782
Converter(
762783
predicate=lambda obj: isinstance(obj, Iterable),
763784
converter=JavaIterable,
764-
priority=-1
785+
priority=Priority.NORMAL -1
765786
),
766787
# Iterator converter
767788
Converter(
768789
predicate=lambda obj: isinstance(obj, Iterator),
769790
converter=JavaIterator,
770-
priority=-1
791+
priority=Priority.NORMAL - 1
771792
),
772793
]
773794

0 commit comments

Comments
 (0)