history.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Thu Jun 28 17:44:45 2012
  4. @author: pietro
  5. """
  6. import ctypes
  7. import grass.lib.raster as libraster
  8. import datetime
  9. class History(object):
  10. """
  11. *Examples*
  12. ::
  13. >>> import grass.lib.gis as libgis
  14. >>> libgis.G_gisinit('')
  15. >>> hist = History('elevation')
  16. >>> hist.creator
  17. 'helena'
  18. >>> hist.src1
  19. ''
  20. >>> hist.src2
  21. ''
  22. >>> hist.keyword
  23. 'generated by r.proj'
  24. >>> hist.date
  25. datetime.datetime(2006, 11, 7, 1, 9, 51)
  26. >>> hist.mapset
  27. 'PERMANENT'
  28. >>> hist.maptype
  29. 'raster'
  30. >>> hist.title
  31. 'elev_ned10m'
  32. ..
  33. """
  34. def __init__(self, name=''):
  35. self.c_hist = ctypes.pointer(libraster.History())
  36. # 'Tue Nov 7 01:11:23 2006'
  37. self.date_fmt = '%a %b %d %H:%M:%S %Y'
  38. if name:
  39. self.read(name)
  40. def __del__(self):
  41. """Rast_free_history"""
  42. pass
  43. #----------------------------------------------------------------------
  44. #libraster.HIST_CREATOR
  45. def _get_creator(self):
  46. return libraster.Rast_get_history(self.c_hist,
  47. libraster.HIST_CREATOR)
  48. def _set_creator(self, creator):
  49. return libraster.Rast_set_history(self.c_hist,
  50. libraster.HIST_CREATOR,
  51. ctypes.c_char_p(creator))
  52. creator = property(fget=_get_creator, fset=_set_creator)
  53. #----------------------------------------------------------------------
  54. #libraster.HIST_DATSRC_1
  55. def _get_src1(self):
  56. return libraster.Rast_get_history(self.c_hist,
  57. libraster.HIST_DATSRC_1)
  58. def _set_src1(self, src1):
  59. return libraster.Rast_set_history(self.c_hist,
  60. libraster.HIST_DATSRC_1,
  61. ctypes.c_char_p(src1))
  62. src1 = property(fget=_get_src1, fset=_set_src1)
  63. #----------------------------------------------------------------------
  64. #libraster.HIST_DATSRC_2
  65. def _get_src2(self):
  66. return libraster.Rast_get_history(self.c_hist,
  67. libraster.HIST_DATSRC_2)
  68. def _set_src2(self, src2):
  69. return libraster.Rast_set_history(self.c_hist,
  70. libraster.HIST_DATSRC_2,
  71. ctypes.c_char_p(src2))
  72. src2 = property(fget=_get_src2, fset=_set_src2)
  73. #----------------------------------------------------------------------
  74. #libraster.HIST_KEYWORD
  75. def _get_keyword(self):
  76. return libraster.Rast_get_history(self.c_hist,
  77. libraster.HIST_KEYWRD)
  78. def _set_keyword(self, keyword):
  79. return libraster.Rast_set_history(self.c_hist,
  80. libraster.HIST_KEYWRD,
  81. ctypes.c_char_p(keyword))
  82. keyword = property(fget=_get_keyword, fset=_set_keyword)
  83. #----------------------------------------------------------------------
  84. #libraster.HIST_MAPID
  85. def _get_date(self):
  86. date_str = libraster.Rast_get_history(self.c_hist,
  87. libraster.HIST_MAPID)
  88. return datetime.datetime.strptime(date_str, self.date_fmt)
  89. def _set_date(self, datetimeobj):
  90. date_str = datetimeobj.strftime(self.date_fmt)
  91. return libraster.Rast_set_history(self.c_hist,
  92. libraster.HIST_MAPID,
  93. ctypes.c_char_p(date_str))
  94. date = property(fget=_get_date, fset=_set_date)
  95. #----------------------------------------------------------------------
  96. #libraster.HIST_MAPSET
  97. def _get_mapset(self):
  98. return libraster.Rast_get_history(self.c_hist,
  99. libraster.HIST_MAPSET)
  100. def _set_mapset(self, mapset):
  101. return libraster.Rast_set_history(self.c_hist,
  102. libraster.HIST_MAPSET,
  103. ctypes.c_char_p(mapset))
  104. mapset = property(fget=_get_mapset, fset=_set_mapset)
  105. #----------------------------------------------------------------------
  106. #libraster.HIST_MAPTYPE
  107. def _get_maptype(self):
  108. return libraster.Rast_get_history(self.c_hist,
  109. libraster.HIST_MAPTYPE)
  110. def _set_maptype(self, maptype):
  111. return libraster.Rast_set_history(self.c_hist,
  112. libraster.HIST_MAPTYPE,
  113. ctypes.c_char_p(maptype))
  114. maptype = property(fget=_get_maptype, fset=_set_maptype)
  115. #----------------------------------------------------------------------
  116. #libraster.HIST_NUM_FIELDS
  117. #
  118. # Never used in any raster modules
  119. #
  120. # def _get_num_fields(self):
  121. # return libraster.Rast_get_history(self.c_hist,
  122. # libraster.HIST_NUM_FIELDS)
  123. #
  124. # def _set_num_fields(self, num_fields):
  125. # return libraster.Rast_set_history(self.c_hist,
  126. # libraster.HIST_NUM_FIELDS,
  127. # ctypes.c_char_p(num_fields))
  128. #
  129. # num_fields = property(fget = _get_num_fields, fset = _set_num_fields)
  130. #----------------------------------------------------------------------
  131. #libraster.HIST_TITLE
  132. def _get_title(self):
  133. return libraster.Rast_get_history(self.c_hist,
  134. libraster.HIST_TITLE)
  135. def _set_title(self, title):
  136. return libraster.Rast_set_history(self.c_hist,
  137. libraster.HIST_TITLE,
  138. ctypes.c_char_p(title))
  139. title = property(fget=_get_title, fset=_set_title)
  140. def append(self, obj):
  141. """Rast_append_history"""
  142. libraster.Rast_append_history(self.c_hist,
  143. ctypes.c_char_p(str(obj)))
  144. def append_fmt(self, fmt, *args):
  145. """Rast_append_format_history"""
  146. libraster.Rast_append_format_history(self.c_hist,
  147. ctypes.c_char_p(fmt),
  148. *args)
  149. def clear(self):
  150. """Rast_clear_history"""
  151. libraster.Rast_clear_history(self.c_hist)
  152. def command(self):
  153. """Rast_command_history"""
  154. libraster.Rast_command_history(self.c_hist)
  155. def format(self, field, fmt, *args):
  156. """Rast_format_history"""
  157. libraster.Rast_format_history(self.c_hist,
  158. ctypes.c_int(field),
  159. ctypes.c_char_p(fmt),
  160. *args)
  161. def length(self):
  162. """Rast_history_length"""
  163. libraster.Rast_history_length(self.c_hist)
  164. def line(self, line):
  165. """Rast_history_line"""
  166. libraster.Rast_history_line(self.c_hist,
  167. ctypes.c_int(line))
  168. def read(self, name):
  169. """Rast_read_history. ::
  170. >>> import grass.lib.gis as libgis
  171. >>> libgis.G_gisinit('')
  172. >>> import ctypes
  173. >>> import grass.lib.raster as libraster
  174. >>> hist = libraster.History()
  175. >>> libraster.Rast_read_history(ctypes.c_char_p('elevation'),
  176. ... ctypes.c_char_p(''),
  177. ... ctypes.byref(hist))
  178. 0
  179. >>> libraster.Rast_get_history(ctypes.byref(hist),
  180. ... libraster.HIST_MAPID)
  181. 'Tue Nov 7 01:09:51 2006'
  182. ..
  183. """
  184. libraster.Rast_read_history(ctypes.c_char_p(name),
  185. ctypes.c_char_p(''),
  186. self.c_hist)
  187. def write(self, name):
  188. """Rast_write_history"""
  189. libraster.Rast_write_history(ctypes.c_char_p(name),
  190. self.c_hist)
  191. def short(self, name, maptype,):
  192. """Rast_short_history"""
  193. libraster.Rast_short_history(ctypes.c_char_p(name),
  194. ctypes.c_char_p(maptype),
  195. self.c_hist)