99import time
1010from .lib import dynamically_load_library
1111import mimetypes
12- import logging
13-
14- # Force output to stderr immediately
15- sys .stderr .write ("## c2pa module loading - logging setup starting\n " )
16- sys .stderr .flush ()
17-
18- # Configure logging for the c2pa module
19- logging .basicConfig (
20- level = logging .DEBUG ,
21- format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ,
22- force = True # Force reconfiguration even if already configured
23- )
24-
25- # Get the logger for this module
26- logger = logging .getLogger (__name__ )
27- logger .setLevel (logging .DEBUG )
28-
29- # Ensure the logger has a handler
30- if not logger .handlers :
31- handler = logging .StreamHandler (sys .stderr ) # Force to stderr
32- handler .setLevel (logging .DEBUG )
33- formatter = logging .Formatter ('%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
34- handler .setFormatter (formatter )
35- logger .addHandler (handler )
36-
37- sys .stderr .write ("## c2pa module loading - logging setup complete\n " )
38- sys .stderr .flush ()
3912
4013# Define required function names
4114_REQUIRED_FUNCTIONS = [
@@ -1335,13 +1308,6 @@ def from_callback(
13351308 C2paError: If there was an error creating the signer
13361309 C2paError.Encoding: If the certificate data or TSA URL contains invalid UTF-8 characters
13371310 """
1338- import logging
1339- logger = logging .getLogger (__name__ )
1340-
1341- sys .stderr .write ("## Signer.from_callback called\n " )
1342- sys .stderr .flush ()
1343- logger .info ("Signer.from_callback called" )
1344-
13451311 # Validate inputs before creating
13461312 if not certs :
13471313 raise C2paError (
@@ -1351,73 +1317,35 @@ def from_callback(
13511317 raise C2paError (
13521318 cls ._error_messages ['invalid_tsa' ].format ("Invalid TSA URL format" ))
13531319
1354- sys .stderr .write ("## Creating wrapped_callback\n " )
1355- sys .stderr .flush ()
1356- logger .info ("Creating wrapped_callback" )
1357-
13581320 # Create a wrapper callback that handles errors and memory management
13591321 def wrapped_callback (context , data_ptr , data_len , signed_bytes_ptr , signed_len ):
1360- logger = logging .getLogger (__name__ )
1361-
1362- sys .stderr .write (f"## create_signer wrapped_callback: context: { context } , data_ptr: { data_ptr } , data_len: { data_len } , signed_bytes_ptr: { signed_bytes_ptr } , signed_len: { signed_len } \n " )
1363- sys .stderr .flush ()
1364- logger .debug (f"create_signer wrapped_callback called: context={ context } , data_len={ data_len } , signed_len={ signed_len } " )
1365-
13661322 try :
13671323 if not data_ptr or data_len <= 0 :
1368- error_msg = f"Invalid input: data_ptr={ data_ptr } , data_len={ data_len } "
1369- sys .stderr .write (f"## ERROR: { error_msg } \n " )
1370- sys .stderr .flush ()
1371- logger .error (error_msg )
13721324 return 0 # Error: invalid input
13731325
13741326 # Convert C pointer to Python bytes
13751327 data = bytes (data_ptr [:data_len ])
1376- sys .stderr .write (f"## Converted data: { len (data )} bytes\n " )
1377- sys .stderr .flush ()
1378- logger .debug (f"Converted data: { len (data )} bytes" )
13791328
13801329 if not data :
1381- error_msg = "Empty data after conversion"
1382- sys .stderr .write (f"## ERROR: { error_msg } \n " )
1383- sys .stderr .flush ()
1384- logger .error (error_msg )
13851330 return 0 # Error: empty data
13861331
13871332 # Call the user's callback
1388- sys .stderr .write ("## Calling user callback...\n " )
1389- sys .stderr .flush ()
1390- logger .debug ("Calling user callback..." )
13911333 signature = callback (data )
1392- sys .stderr .write (f"## User callback returned: { len (signature ) if signature else 0 } bytes\n " )
1393- sys .stderr .flush ()
1394- logger .debug (f"User callback returned: { len (signature ) if signature else 0 } bytes" )
13951334
13961335 if not signature :
1397- error_msg = "User callback returned empty signature"
1398- sys .stderr .write (f"## ERROR: { error_msg } \n " )
1399- sys .stderr .flush ()
1400- logger .error (error_msg )
14011336 return 0 # Error: empty signature
14021337
14031338 # Copy the signature back to the C buffer
14041339 actual_len = min (len (signature ), signed_len )
1405- sys .stderr .write (f"## Copying { actual_len } bytes to buffer (signature_len={ len (signature )} , signed_len={ signed_len } )\n " )
1406- sys .stderr .flush ()
1407- logger .debug (f"Copying { actual_len } bytes to buffer" )
1408-
1340+
14091341 for i in range (actual_len ):
14101342 signed_bytes_ptr [i ] = signature [i ]
14111343
1412- sys .stderr .write (f"## Successfully copied signature, returning { actual_len } \n " )
1413- sys .stderr .flush ()
1414- logger .debug (f"Successfully copied signature, returning { actual_len } " )
14151344 return actual_len # Return the number of bytes written
14161345 except Exception as e :
1417- error_msg = f"Exception in wrapped_callback: { e } "
1418- sys .stderr .write (f"## ERROR: { error_msg } \n " )
1419- sys .stderr .flush ()
1420- logger .error (error_msg )
1346+ print (
1347+ cls ._error_messages ['callback_error' ].format (
1348+ str (e )), file = sys .stderr )
14211349 return 0 # Return 0 to indicate error
14221350
14231351 # Encode strings with error handling
@@ -1433,11 +1361,7 @@ def wrapped_callback(context, data_ptr, data_len, signed_bytes_ptr, signed_len):
14331361 # Store the callback as an instance attribute to keep it alive
14341362 signer_instance = cls .__new__ (cls )
14351363 signer_instance ._callback_cb = SignerCallback (wrapped_callback )
1436-
1437- sys .stderr .write ("## About to call c2pa_signer_create from create_signer\n " )
1438- sys .stderr .flush ()
1439- logger .info ("About to call c2pa_signer_create from create_signer" )
1440-
1364+
14411365 signer_ptr = _lib .c2pa_signer_create (
14421366 None , # context
14431367 signer_instance ._callback_cb ,
@@ -1446,10 +1370,6 @@ def wrapped_callback(context, data_ptr, data_len, signed_bytes_ptr, signed_len):
14461370 tsa_url_bytes
14471371 )
14481372
1449- sys .stderr .write (f"## c2pa_signer_create returned: { signer_ptr } \n " )
1450- sys .stderr .flush ()
1451- logger .info (f"c2pa_signer_create returned: { signer_ptr } " )
1452-
14531373 if not signer_ptr :
14541374 error = _parse_operation_result_for_error (_lib .c2pa_error ())
14551375 if error :
@@ -1460,7 +1380,7 @@ def wrapped_callback(context, data_ptr, data_len, signed_bytes_ptr, signed_len):
14601380 signer_instance ._signer = signer_ptr
14611381 signer_instance ._closed = False
14621382 signer_instance ._error_messages = cls ._error_messages
1463-
1383+
14641384 return signer_instance
14651385
14661386 def __enter__ (self ):
@@ -2003,91 +1923,39 @@ def create_signer(
20031923 C2paError: If there was an error creating the signer
20041924 C2paError.Encoding: If the certificate data or TSA URL contains invalid UTF-8 characters
20051925 """
2006- import logging
2007- logger = logging .getLogger (__name__ )
2008-
2009- sys .stderr .write ("## create_signer called\n " )
2010- sys .stderr .flush ()
2011- logger .info ("create_signer called" )
2012-
20131926 try :
20141927 certs_bytes = certs .encode ('utf-8' )
20151928 tsa_url_bytes = tsa_url .encode ('utf-8' ) if tsa_url else None
20161929 except UnicodeError as e :
20171930 raise C2paError .Encoding (
20181931 f"Invalid UTF-8 characters in certificate data or TSA URL: { str (e )} " )
20191932
2020- sys .stderr .write ("## About to call c2pa_signer_create from create_signer\n " )
2021- sys .stderr .flush ()
2022- logger .info ("About to call c2pa_signer_create from create_signer" )
2023-
20241933 # Create a wrapper callback that handles errors and memory management
20251934 def wrapped_callback (context , data_ptr , data_len , signed_bytes_ptr , signed_len ):
2026- logger = logging .getLogger (__name__ )
2027-
2028- sys .stderr .write (f"## create_signer wrapped_callback: context: { context } , data_ptr: { data_ptr } , data_len: { data_len } , signed_bytes_ptr: { signed_bytes_ptr } , signed_len: { signed_len } \n " )
2029- sys .stderr .flush ()
2030- logger .debug (f"create_signer wrapped_callback called: context={ context } , data_len={ data_len } , signed_len={ signed_len } " )
2031-
2032- # Add immediate return for debugging
2033- sys .stderr .write ("## wrapped_callback entered - about to process\n " )
2034- sys .stderr .flush ()
2035-
20361935 try :
20371936 if not data_ptr or data_len <= 0 :
2038- error_msg = f"Invalid input: data_ptr={ data_ptr } , data_len={ data_len } "
2039- sys .stderr .write (f"## ERROR: { error_msg } \n " )
2040- sys .stderr .flush ()
2041- logger .error (error_msg )
20421937 return 0 # Error: invalid input
20431938
20441939 # Convert C pointer to Python bytes
20451940 data = bytes (data_ptr [:data_len ])
2046- sys .stderr .write (f"## Converted data: { len (data )} bytes\n " )
2047- sys .stderr .flush ()
2048- logger .debug (f"Converted data: { len (data )} bytes" )
20491941
20501942 if not data :
2051- error_msg = "Empty data after conversion"
2052- sys .stderr .write (f"## ERROR: { error_msg } \n " )
2053- sys .stderr .flush ()
2054- logger .error (error_msg )
20551943 return 0 # Error: empty data
20561944
20571945 # Call the user's callback
2058- sys .stderr .write ("## Calling user callback...\n " )
2059- sys .stderr .flush ()
2060- logger .debug ("Calling user callback..." )
20611946 signature = callback (data )
2062- sys .stderr .write (f"## User callback returned: { len (signature ) if signature else 0 } bytes\n " )
2063- sys .stderr .flush ()
2064- logger .debug (f"User callback returned: { len (signature ) if signature else 0 } bytes" )
20651947
20661948 if not signature :
2067- error_msg = "User callback returned empty signature"
2068- sys .stderr .write (f"## ERROR: { error_msg } \n " )
2069- sys .stderr .flush ()
2070- logger .error (error_msg )
20711949 return 0 # Error: empty signature
20721950
20731951 # Copy the signature back to the C buffer
20741952 actual_len = min (len (signature ), signed_len )
2075- sys .stderr .write (f"## Copying { actual_len } bytes to buffer (signature_len={ len (signature )} , signed_len={ signed_len } )\n " )
2076- sys .stderr .flush ()
2077- logger .debug (f"Copying { actual_len } bytes to buffer" )
20781953
20791954 for i in range (actual_len ):
20801955 signed_bytes_ptr [i ] = signature [i ]
20811956
2082- sys .stderr .write (f"## Successfully copied signature, returning { actual_len } \n " )
2083- sys .stderr .flush ()
2084- logger .debug (f"Successfully copied signature, returning { actual_len } " )
20851957 return actual_len # Return the number of bytes written
20861958 except Exception as e :
2087- error_msg = f"Exception in wrapped_callback: { e } "
2088- sys .stderr .write (f"## ERROR: { error_msg } \n " )
2089- sys .stderr .flush ()
2090- logger .error (error_msg )
20911959 return 0 # Return 0 to indicate error
20921960
20931961 # Store the callback to keep it alive
@@ -2106,10 +1974,6 @@ def wrapped_callback(context, data_ptr, data_len, signed_bytes_ptr, signed_len):
21061974 tsa_url_bytes
21071975 )
21081976
2109- sys .stderr .write (f"## c2pa_signer_create returned: { signer_ptr } \n " )
2110- sys .stderr .flush ()
2111- logger .info (f"c2pa_signer_create returned: { signer_ptr } " )
2112-
21131977 if not signer_ptr :
21141978 error = _parse_operation_result_for_error (_lib .c2pa_error ())
21151979 if error :
0 commit comments