@@ -770,6 +770,31 @@ def base64_string(self) -> str:
770
770
base64_str = base64_bytes .decode ("ascii" )
771
771
return base64_str
772
772
773
+ @classmethod
774
+ def _get_config_from_base64_bytes (cls , bytes_str : bytes ) -> EnhancementsConfig :
775
+ padded_bytes = bytes_str + b"=" * (4 - (len (bytes_str ) % 4 ))
776
+
777
+ try :
778
+ compressed_pickle = base64 .urlsafe_b64decode (padded_bytes )
779
+
780
+ if compressed_pickle .startswith (b"\x28 \xb5 \x2f \xfd " ):
781
+ pickled = zstandard .decompress (compressed_pickle )
782
+ else :
783
+ pickled = zlib .decompress (compressed_pickle )
784
+
785
+ config_structure = msgpack .loads (pickled , raw = False )
786
+ version , bases , rules = config_structure
787
+ if version not in VERSIONS :
788
+ raise InvalidEnhancerConfig (f"Unknown enhancements version: { version } " )
789
+
790
+ rules = [EnhancementRule ._from_config_structure (rule , version ) for rule in rules ]
791
+ rust_enhancements = get_rust_enhancements ("config_structure" , pickled )
792
+
793
+ except (LookupError , AttributeError , TypeError , ValueError ) as e :
794
+ raise ValueError ("invalid stack trace rule config: %s" % e )
795
+
796
+ return EnhancementsConfig (rules , rust_enhancements , version , bases )
797
+
773
798
@classmethod
774
799
def from_base64_string (
775
800
cls , base64_string : str | bytes , referrer : str | None = None
@@ -784,31 +809,17 @@ def from_base64_string(
784
809
if isinstance (base64_string , str )
785
810
else base64_string
786
811
)
787
- padded_bytes = bytes_str + b"=" * (4 - (len (bytes_str ) % 4 ))
788
- try :
789
- compressed_pickle = base64 .urlsafe_b64decode (padded_bytes )
790
812
791
- if compressed_pickle .startswith (b"\x28 \xb5 \x2f \xfd " ):
792
- pickled = zstandard .decompress (compressed_pickle )
793
- else :
794
- pickled = zlib .decompress (compressed_pickle )
813
+ unsplit_config = cls ._get_config_from_base64_bytes (bytes_str )
795
814
796
- config_structure = msgpack .loads (pickled , raw = False )
797
- version , bases , rules = config_structure
798
- if version not in VERSIONS :
799
- raise InvalidEnhancerConfig (f"Unknown enhancements version: { version } " )
815
+ version = unsplit_config .version
816
+ bases = unsplit_config .bases
800
817
801
- metrics_timer_tags .update ({"split" : version == 3 })
802
-
803
- rules = [EnhancementRule ._from_config_structure (rule , version ) for rule in rules ]
804
- rust_enhancements = get_rust_enhancements ("config_structure" , pickled )
805
-
806
- except (LookupError , AttributeError , TypeError , ValueError ) as e :
807
- raise ValueError ("invalid stack trace rule config: %s" % e )
818
+ metrics_timer_tags .update ({"split" : version == 3 })
808
819
809
820
return cls (
810
- rules = rules ,
811
- rust_enhancements = rust_enhancements ,
821
+ rules = unsplit_config . rules ,
822
+ rust_enhancements = unsplit_config . rust_enhancements ,
812
823
version = version ,
813
824
bases = bases ,
814
825
)
0 commit comments