@@ -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
179192class 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
185199def _convert (obj : Any , converters : typing .List [Converter ]) -> Any :
@@ -296,6 +310,13 @@ def convertIterable(obj: collections.abc.Iterable):
296310
297311
298312def 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