@ -79,23 +79,28 @@ def human_readable_capacity_1000(size, decimal_places=0):
def human_readable_power_on_hours ( hours , decimal_places = 2 ) :
return str ( hours ) + " h or " + str ( int ( hours / 24 ) ) + " d or " + str ( " {:.2f} " . format ( float ( hours / 24 / 365 ) ) ) + " y "
def cut_string ( max_lenght , data ):
def cut_string ( max_lenght , data , direction ):
if ( len ( data ) > max_lenght ) :
return data [ 0 : ( max_lenght - 4 ) ] + " ... "
if ( direction == " end " ) :
return data [ 0 : ( max_lenght - 4 ) ] + " ... "
elif ( direction == " start " ) :
return " ... " + data [ ( len ( data ) - max_lenght + 4 ) : ]
else :
return cut_string ( max_lenght , data , " end " )
else :
return data
def format_to_printable ( drive ) :
return DriveDataPrintable (
cut_string ( 20 , re . sub ( r " [^a-zA-Z0-9. ] " , " " , drive . modelfamiliy ) ), \
cut_string ( 20 , re . sub ( r " [^a-zA-Z0-9. ] " , " " , drive . modelname ) ), \
cut_string ( 20 , human_readable_capacity_1000 ( drive . capacity ) ), \
cut_string ( 16 , re . sub ( r " [^a-zA-Z0-9.-_] " , " " , drive . serialnumber ) ), \
cut_string ( 30 , human_readable_power_on_hours ( drive . power_on_hours ) ), \
cut_string ( 10 , str ( drive . power_cycle ) ), \
cut_string ( 10 , str ( drive . smart_error_count ) ), \
cut_string ( 30 , datetime . datetime . utcfromtimestamp ( drive . shred_timestamp ) . strftime ( ' % Y- % m- %d % H: % M: % S ' ) ), \
cut_string ( 30 , str ( datetime . timedelta ( seconds = drive . shred_duration ) ) ))
cut_string ( 20 , re . sub ( r " [^a-zA-Z0-9. ] " , " " , drive . modelfamiliy ) , " end " ), \
cut_string ( 20 , re . sub ( r " [^a-zA-Z0-9. ] " , " " , drive . modelname ) , " end " ), \
cut_string ( 20 , human_readable_capacity_1000 ( drive . capacity ) , " end " ), \
cut_string ( 16 , re . sub ( r " [^a-zA-Z0-9.-_] " , " " , drive . serialnumber ) , " start " ), \
cut_string ( 30 , human_readable_power_on_hours ( drive . power_on_hours ) , " end " ), \
cut_string ( 10 , str ( drive . power_cycle ) , " end " ), \
cut_string ( 10 , str ( drive . smart_error_count ) , " end " ), \
cut_string ( 30 , datetime . datetime . utcfromtimestamp ( drive . shred_timestamp ) . strftime ( ' % Y- % m- %d % H: % M: % S ' ) , " end " ), \
cut_string ( 30 , str ( datetime . timedelta ( seconds = drive . shred_duration ) ) , " end " ))
def draw_text ( drawable , printable_data , text_x_offset ) :
try :
@ -171,7 +176,7 @@ def generate_image(drive, rehdd_info, output_file):
print ( " unable to format data: " + str ( ex ) )
return
#print(printable_data )
#print(printable_data .serialnumber )
#create black and white (binary) image with white background
output_image = Image . new ( ' 1 ' , ( output_width , output_height ) , " white " )
@ -196,7 +201,7 @@ def main():
modelfamiliy = " Toshiba 2.5 \\ HDD MK..65GSSX " , \
modelname = " TOSHIBA MK3265GSDX " , \
capacity = 343597383680 , \
serialnumber = " YG6742U56UDRL123 " , \
serialnumber = " YG6742U56UDRL123 456789ABCDEFGJKL " , \
power_on_hours = 7074 , \
power_cycle = 4792 , \
smart_error_count = 1 , \