datos_archivo.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. '''
  2. This file is part of Botadero
  3. '''
  4. import os, sys, datetime, hashlib
  5. class DatosDeArchivo:
  6. Nombre = ''
  7. Tam = 0
  8. FechaYHoraDeSubida = datetime.datetime.now()
  9. Extension = ''
  10. NumDescargas = 0
  11. sha1sum = ''
  12. categoria = ''
  13. DiasRestantes = 100
  14. def __init__(self):
  15. self.Nombre = ''
  16. self.Tam = 0
  17. self.FechaYHoraDeSubida = datetime.datetime.now()
  18. self.Extension = ''
  19. self.NumDescargas = 0
  20. self.sha1sum = ''
  21. self.categoria = ''
  22. self.DiasRestantes = 100
  23. def auto_init(self, Nombre_con_ruta, sha1sum=None):
  24. ''' Se guarda el nombre del archivo y su categoria si tiene:
  25. ej: almacen/entrevista.ogg
  26. Nombre=entrevista.ogg
  27. categoria=''
  28. ej: almacen/videos/inaguracion1_2015.ogv
  29. Nombre=inaguracion1_2015.ogv
  30. categoria=videos
  31. '''
  32. ## determinacion de atributos
  33. #self.Nombre = Nombre_con_ruta
  34. self.Nombre = nombre_archivo(Nombre_con_ruta)
  35. self.categoria = categoria_archivo(Nombre_con_ruta)
  36. # tamanyo
  37. self.Tam = os.stat(Nombre_con_ruta).st_size
  38. # Extension
  39. self.Extension = ''
  40. if len(Nombre_con_ruta.rsplit('.', 1)) > 1:
  41. self.Extension = Nombre_con_ruta.rsplit('.', 1 )[1]
  42. # NumDescargas
  43. self.NumDescargas = 0
  44. # sha1sum
  45. if sha1sum is None:
  46. with open(Nombre_con_ruta, 'r') as fil:
  47. self.sha1sum = self.arch_sha1sum(fil)
  48. else:
  49. self.sha1sum = sha1sum
  50. # Fecha y hora simula creacion del archivo ahora.
  51. self.FechaYHoraDeSubida = datetime.datetime.now()
  52. # DiasRestantes
  53. self.DiasRestantes = 100 # dummy
  54. def arch_sha1sum(self, archivo):
  55. '''Recibe un objeto archivo y devulve el sha1sum
  56. Nota: No se restaura el puntero ni se cierra el archivo.'''
  57. archivo.seek(0) # puntero en 0
  58. t_ant = -1
  59. t_act = archivo.tell()
  60. pedazo_tam = 125*1024
  61. h = hashlib.sha1()
  62. # obtiene el sha1sum del archivo por pedazos de 125 MB a lo maximo
  63. # esto lo hace en caso de ser un archivo con tamanyo mas grande que 2GB
  64. # por ser su contenido mayor que el maximo de una cadena (2^32)
  65. print "[REG] - Getting sha1sum, wait please ..."
  66. while t_ant != t_act:
  67. cad = archivo.read(pedazo_tam)
  68. h.update(cad)
  69. t_ant = t_act
  70. t_act = archivo.tell()
  71. return h.hexdigest()
  72. # Nota acerca del nombre del archivo
  73. # espcificar el archivo con la ruta completa
  74. # ejemplo para obtener ruta segura:
  75. # ruta = almacen , nombre = tatoo.png
  76. # se puede crear de forma segura con:
  77. # DatosArchivo = DatosDeArchivo(os.path.join(ruta, nombre))
  78. def edad(self):
  79. return (datetime.datetime.now() - self.FechaYHoraDeSubida).days
  80. #return (datetime.datetime.now() - self.FechaYHoraDeSubida).seconds
  81. def nombre_archivo(Nombre_con_ruta=None):
  82. tupla = Nombre_con_ruta.split(os.sep)
  83. return tupla[-1]
  84. def categoria_archivo(Nombre_con_ruta=None):
  85. tupla = Nombre_con_ruta.split(os.sep)
  86. if len(tupla)>2:
  87. return tupla[-2]
  88. return ''
  89. '''
  90. Notas:
  91. sha1sum
  92. >>> import hashlib
  93. >>> hashlib.sha1("123").hexdigest
  94. 40bd001563085fc35165329ea1ff5c5ecbdbbeef
  95. datetime
  96. Para obtener la diferencia de dias entre un datetime guardado antes y
  97. el datetime acutal
  98. >>> d1 = datetime.datetime.now()
  99. >>> d1
  100. datetime.datetime(2016, 3, 21, 16, 45, 33, 676366)
  101. Para los dias
  102. >>> (datetime.datetime.now() - d1).days
  103. 0
  104. Segundos
  105. >>> (datetime.datetime.now() - d1).seconds
  106. 70
  107. >>> datetime.datetime.now()
  108. datetime.datetime(2016, 3, 21, 16, 25, 19, 192717)
  109. >>> d = datetime.datetime.now()
  110. >>> d.hour
  111. 16
  112. >>> d.second
  113. 47
  114. >>> d.minute
  115. 25
  116. ...
  117. tamanyo
  118. >>> import os
  119. >>> os.stat("libreboot").st_size
  120. 12788L
  121. '''