history.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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, mapset='', mtype='',
  35. creator='', src1='', src2='', keyword='',
  36. date='', title=''):
  37. self.c_hist = ctypes.pointer(libraster.History())
  38. # 'Tue Nov 7 01:11:23 2006'
  39. self.date_fmt = '%a %b %d %H:%M:%S %Y'
  40. self.name = name
  41. self.mapset = mapset
  42. self.mtype = mtype
  43. self.creator = creator
  44. self.src1 = src1
  45. self.src2 = src2
  46. self.keyword = keyword
  47. self.date = date
  48. self.title = title
  49. def __repr__(self):
  50. attrs = ['name', 'mapset', 'mtype', 'creator', 'src1', 'src2',
  51. 'keyword', 'date', 'title']
  52. return "History(%s)" % ', '.join(["%s=%r" % (attr, getattr(self, attr))
  53. for attr in attrs])
  54. def __del__(self):
  55. """Rast_free_history"""
  56. pass
  57. #----------------------------------------------------------------------
  58. #libraster.HIST_CREATOR
  59. def _get_creator(self):
  60. return libraster.Rast_get_history(self.c_hist,
  61. libraster.HIST_CREATOR)
  62. def _set_creator(self, creator):
  63. return libraster.Rast_set_history(self.c_hist,
  64. libraster.HIST_CREATOR,
  65. ctypes.c_char_p(creator))
  66. creator = property(fget=_get_creator, fset=_set_creator)
  67. #----------------------------------------------------------------------
  68. #libraster.HIST_DATSRC_1
  69. def _get_src1(self):
  70. return libraster.Rast_get_history(self.c_hist,
  71. libraster.HIST_DATSRC_1)
  72. def _set_src1(self, src1):
  73. return libraster.Rast_set_history(self.c_hist,
  74. libraster.HIST_DATSRC_1,
  75. ctypes.c_char_p(src1))
  76. src1 = property(fget=_get_src1, fset=_set_src1)
  77. #----------------------------------------------------------------------
  78. #libraster.HIST_DATSRC_2
  79. def _get_src2(self):
  80. return libraster.Rast_get_history(self.c_hist,
  81. libraster.HIST_DATSRC_2)
  82. def _set_src2(self, src2):
  83. return libraster.Rast_set_history(self.c_hist,
  84. libraster.HIST_DATSRC_2,
  85. ctypes.c_char_p(src2))
  86. src2 = property(fget=_get_src2, fset=_set_src2)
  87. #----------------------------------------------------------------------
  88. #libraster.HIST_KEYWORD
  89. def _get_keyword(self):
  90. return libraster.Rast_get_history(self.c_hist,
  91. libraster.HIST_KEYWRD)
  92. def _set_keyword(self, keyword):
  93. return libraster.Rast_set_history(self.c_hist,
  94. libraster.HIST_KEYWRD,
  95. ctypes.c_char_p(keyword))
  96. keyword = property(fget=_get_keyword, fset=_set_keyword)
  97. #----------------------------------------------------------------------
  98. #libraster.HIST_MAPID
  99. def _get_date(self):
  100. date_str = libraster.Rast_get_history(self.c_hist,
  101. libraster.HIST_MAPID)
  102. if date_str:
  103. return datetime.datetime.strptime(date_str, self.date_fmt)
  104. def _set_date(self, datetimeobj):
  105. if datetimeobj:
  106. date_str = datetimeobj.strftime(self.date_fmt)
  107. return libraster.Rast_set_history(self.c_hist,
  108. libraster.HIST_MAPID,
  109. ctypes.c_char_p(date_str))
  110. date = property(fget=_get_date, fset=_set_date)
  111. #----------------------------------------------------------------------
  112. #libraster.HIST_MAPSET
  113. def _get_mapset(self):
  114. return libraster.Rast_get_history(self.c_hist,
  115. libraster.HIST_MAPSET)
  116. def _set_mapset(self, mapset):
  117. return libraster.Rast_set_history(self.c_hist,
  118. libraster.HIST_MAPSET,
  119. ctypes.c_char_p(mapset))
  120. mapset = property(fget=_get_mapset, fset=_set_mapset)
  121. #----------------------------------------------------------------------
  122. #libraster.HIST_MAPTYPE
  123. def _get_maptype(self):
  124. return libraster.Rast_get_history(self.c_hist,
  125. libraster.HIST_MAPTYPE)
  126. def _set_maptype(self, maptype):
  127. return libraster.Rast_set_history(self.c_hist,
  128. libraster.HIST_MAPTYPE,
  129. ctypes.c_char_p(maptype))
  130. maptype = property(fget=_get_maptype, fset=_set_maptype)
  131. #----------------------------------------------------------------------
  132. #libraster.HIST_NUM_FIELDS
  133. #
  134. # Never used in any raster modules
  135. #
  136. # def _get_num_fields(self):
  137. # return libraster.Rast_get_history(self.c_hist,
  138. # libraster.HIST_NUM_FIELDS)
  139. #
  140. # def _set_num_fields(self, num_fields):
  141. # return libraster.Rast_set_history(self.c_hist,
  142. # libraster.HIST_NUM_FIELDS,
  143. # ctypes.c_char_p(num_fields))
  144. #
  145. # num_fields = property(fget = _get_num_fields, fset = _set_num_fields)
  146. #----------------------------------------------------------------------
  147. #libraster.HIST_TITLE
  148. def _get_title(self):
  149. return libraster.Rast_get_history(self.c_hist,
  150. libraster.HIST_TITLE)
  151. def _set_title(self, title):
  152. return libraster.Rast_set_history(self.c_hist,
  153. libraster.HIST_TITLE,
  154. ctypes.c_char_p(title))
  155. title = property(fget=_get_title, fset=_set_title)
  156. def append(self, obj):
  157. """Rast_append_history"""
  158. libraster.Rast_append_history(self.c_hist,
  159. ctypes.c_char_p(str(obj)))
  160. def append_fmt(self, fmt, *args):
  161. """Rast_append_format_history"""
  162. libraster.Rast_append_format_history(self.c_hist,
  163. ctypes.c_char_p(fmt),
  164. *args)
  165. def clear(self):
  166. """Rast_clear_history"""
  167. libraster.Rast_clear_history(self.c_hist)
  168. def command(self):
  169. """Rast_command_history"""
  170. libraster.Rast_command_history(self.c_hist)
  171. def format(self, field, fmt, *args):
  172. """Rast_format_history"""
  173. libraster.Rast_format_history(self.c_hist,
  174. ctypes.c_int(field),
  175. ctypes.c_char_p(fmt),
  176. *args)
  177. def length(self):
  178. """Rast_history_length"""
  179. libraster.Rast_history_length(self.c_hist)
  180. def line(self, line):
  181. """Rast_history_line"""
  182. libraster.Rast_history_line(self.c_hist,
  183. ctypes.c_int(line))
  184. def read(self):
  185. """Rast_read_history. ::
  186. >>> import grass.lib.gis as libgis
  187. >>> libgis.G_gisinit('')
  188. >>> import ctypes
  189. >>> import grass.lib.raster as libraster
  190. >>> hist = libraster.History()
  191. >>> libraster.Rast_read_history(ctypes.c_char_p('elevation'),
  192. ... ctypes.c_char_p(''),
  193. ... ctypes.byref(hist))
  194. 0
  195. >>> libraster.Rast_get_history(ctypes.byref(hist),
  196. ... libraster.HIST_MAPID)
  197. 'Tue Nov 7 01:09:51 2006'
  198. ..
  199. """
  200. libraster.Rast_read_history(self.name, self.mapset, self.c_hist)
  201. def write(self):
  202. """Rast_write_history"""
  203. libraster.Rast_write_history(self.name,
  204. self.c_hist)
  205. def short(self):
  206. """Rast_short_history"""
  207. libraster.Rast_short_history(self.name,
  208. 'raster',
  209. self.c_hist)