2727# ManifestStoreReader = c2pa.ManifestStoreReader
2828class Reader (c2pa .Reader ):
2929 def __init__ (self , format , stream ):
30- self .format = format
31- self .stream = C2paStream (stream )
3230 super ().__init__ ()
31+ self .read (format , C2paStream (stream ))
3332
34- def from_file (path : str , format = None ):
33+ @classmethod
34+ def from_file (cls , path : str , format = None ):
3535 file = open (path , "rb" )
3636 if format is None :
3737 # determine the format from the file extension
3838 format = os .path .splitext (path )[1 ][1 :]
39- reader = Reader (format , file )
40- return reader
41-
42- def read (self ):
43- return super ().read (self .format , self .stream )
39+ return cls (format , file )
4440
4541 def resource (self , uri , stream ) -> None :
46- super ().resource (uri , C2paStream (stream ))
42+ return super ().resource (uri , C2paStream (stream ))
4743
4844 def resource_file (self , uri , path ) -> None :
4945 file = open (path , "wb" )
50- self .resource (uri , file )
46+ return self .resource (uri , file )
5147
5248
5349class Builder (c2pa .Builder ):
@@ -60,24 +56,34 @@ def __init__(self, signer, manifest = None):
6056 def set_manifest (self , manifest ):
6157 if not isinstance (manifest , str ):
6258 manifest = json .dumps (manifest )
63- self .with_json (manifest )
59+ super () .with_json (manifest )
6460 return self
6561
6662 def add_resource (self , uri , stream ):
67- return super ().add_resource (uri , stream )
63+ return super ().add_resource (uri , C2paStream ( stream ) )
6864
6965 def add_resource_file (self , uri , path ):
70- stream = C2paStream .open_file (path , "rb" )
71- return self .add_resource (uri , stream )
66+ file = open (path , "rb" )
67+ return self .add_resource (uri , file )
68+
69+ def add_ingredient (self , ingredient , format , stream ):
70+ if not isinstance (ingredient , str ):
71+ ingredient = json .dumps (ingredient )
72+ return super ().add_ingredient (ingredient , format , C2paStream (stream ))
73+
74+ def add_ingredient_file (self , ingredient , path ):
75+ format = os .path .splitext (path )[1 ][1 :]
76+ file = open (path , "rb" )
77+ return self .add_ingredient (ingredient , format , file )
7278
73- def sign_stream (self , format , input , output = None ):
74- return self .sign (format , input , output , self .signer )
79+ def sign (self , format , input , output = None ):
80+ return super () .sign (format , C2paStream ( input ), C2paStream ( output ) , self .signer )
7581
7682 def sign_file (self , sourcePath , outputPath ):
77- format = "image/jpeg" #sourcePath.extension [1:]
78- input = C2paStream . open_file (sourcePath , "rb" )
79- output = C2paStream . open_file (outputPath , "wb" )
80- return self .sign_stream (format , input , output )
83+ format = os . path . splitext ( outputPath )[ 1 ] [1 :]
84+ input = open (sourcePath , "rb" )
85+ output = open (outputPath , "wb" )
86+ return self .sign (format , input , output )
8187
8288
8389# Implements a C2paStream given a stream handle
0 commit comments