@@ -718,10 +718,38 @@ class PackageData(IdentifiablePackageData):
718
718
repr = True ,
719
719
)
720
720
721
+ @classmethod
722
+ def from_data (cls , package_data , package_only = False ):
723
+ """
724
+ Return PackageData object created out of the package metadata
725
+ present in `package_data` mapping. Also populate license and
726
+ copyright holder fields by computing them from extracted license
727
+ statement and extracted copyright.
721
728
722
- def __attrs_post_init__ (self , * args , ** kwargs ):
723
- self .populate_license_fields ()
724
- self .populate_holder_field ()
729
+ Skip the license/copyright detection step if `package_only` is True.
730
+ """
731
+ package_data = cls (** package_data )
732
+
733
+ if not package_only :
734
+ package_data .populate_license_fields ()
735
+ package_data .populate_holder_field ()
736
+ else :
737
+ package_data .normalize_extracted_license_statement ()
738
+
739
+ return package_data
740
+
741
+ def normalize_extracted_license_statement (self ):
742
+ """
743
+ Normalizes the extracted license statement to a readable
744
+ YAML string if it was a pythonic object.
745
+ """
746
+ if (
747
+ self .extracted_license_statement and
748
+ not isinstance (self .extracted_license_statement , str )
749
+ ):
750
+ self .extracted_license_statement = saneyaml .dump (
751
+ self .extracted_license_statement
752
+ )
725
753
726
754
def populate_holder_field (self ):
727
755
if not self .copyright :
@@ -781,8 +809,7 @@ def populate_license_fields(self):
781
809
f"license_detections: { self .license_detections } "
782
810
)
783
811
784
- if self .extracted_license_statement and not isinstance (self .extracted_license_statement , str ):
785
- self .extracted_license_statement = saneyaml .dump (self .extracted_license_statement )
812
+ self .normalize_extracted_license_statement ()
786
813
787
814
def update_purl_fields (self , package_data , replace = False ):
788
815
@@ -905,17 +932,6 @@ def get_license_detections_and_expression(self):
905
932
)
906
933
907
934
908
- class PackageDataOnly (PackageData ):
909
- """
910
- PackageData class which skips the license/copyright detection during instance
911
- creation.
912
- """
913
-
914
- def __attrs_post_init__ (self ):
915
- if self .extracted_license_statement and not isinstance (self .extracted_license_statement , str ):
916
- self .extracted_license_statement = saneyaml .dump (self .extracted_license_statement )
917
-
918
-
919
935
def get_default_relation_license (datasource_id ):
920
936
from packagedcode import HANDLER_BY_DATASOURCE_ID
921
937
handler = HANDLER_BY_DATASOURCE_ID [datasource_id ]
0 commit comments