/src/mconfig.py

https://github.com/jleyva/mooconsole · Python · 125 lines · 96 code · 24 blank · 5 comment · 15 complexity · d10940576c96c9169c49fe2591e51647 MD5 · raw file

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import sqlite3
  4. import sys
  5. import os
  6. import os.path
  7. class MPathHelper(object):
  8. # Thanks to http://us.pycon.org/media/2010/talkdata/PyCon2010/038/paper.html
  9. def platform(self):
  10. if sys.platform.startswith('win'):
  11. return 'windows'
  12. elif sys.platform.startswith('darwin'):
  13. return 'mac'
  14. return 'linux'
  15. def is_package(self): # eg /usr/bin/phatch
  16. return not sys.argv[0].endswith('.py')
  17. def setup(self):
  18. if hasattr(sys, 'frozen'):
  19. return 'frozen'
  20. elif self.is_package():
  21. return 'package'
  22. return 'source'
  23. def __init__(self):
  24. self.path_data = ''
  25. self.path_user_data = ''
  26. context = (self.platform(),self.setup())
  27. #TODO paths
  28. if context == ('mac', 'frozen'):
  29. DATA = os.path.join(APP_ROOT, 'Contents','Resources') # py2app
  30. elif context == ('windows', 'frozen'):
  31. self.path_data = os.path.join(os.getcwd(),'data')
  32. self.path_user_data = os.path.join(os.getcwd(),'user_data')
  33. elif context == ('linux', 'package'):
  34. DATA = os.path.join(sys.prefix, 'share', APP_NAME) # linux
  35. else:
  36. pathname = os.path.dirname(sys.argv[0])
  37. base, src = os.path.split(os.path.abspath(pathname))
  38. self.path_data = os.path.join(base,'data')
  39. self.path_user_data = os.path.join(base,'user_data')
  40. class MConfig(object):
  41. preferences = dict()
  42. master_password = ''
  43. db_path = ''
  44. tmp_path = ''
  45. def __init__(self):
  46. p = MPathHelper()
  47. self.db_path = os.path.join(p.path_user_data,'mooconsole.sqlite')
  48. self.log_path = os.path.join(p.path_user_data,'log.txt')
  49. self.img_path = os.path.join(p.path_data,'img')
  50. self.sound_path = os.path.join(p.path_data,'sound')
  51. self.tmp_path = p.path_user_data
  52. self.ws_path = os.path.join(p.path_data,'webservice')
  53. self.master_password = ''
  54. self.release = '2010060101'
  55. self.version = '0.9 alpha'
  56. self.preferences['user_agent'] = 'Mozilla/4.0 (compatible; MSIE 5.5; WindowsNT)'
  57. self.preferences['max_repo_id'] = '5'
  58. self.preferences['max_log_files'] = '5'
  59. self.preferences['max_log_file_size'] = '1048576'
  60. self.preferences['url_monitor_time'] = '0'
  61. self.preferences['site_gatherer_time'] = '0'
  62. self.preferences['last_monitor_exec'] = '0'
  63. self.preferences['last_gatherer_exec'] = '0'
  64. self.preferences['url_alert_sound'] = '0'
  65. self.preferences['url_alert_sound_path'] = os.path.join(self.sound_path,'alert.wav')
  66. self.preferences['link_documentation'] = 'http://sites.google.com/site/mooconsole/documentation'
  67. self.preferences['link_website'] = 'http://sites.google.com/site/mooconsole/'
  68. self.reload()
  69. def reload(self):
  70. con = sqlite3.connect(self.db_path)
  71. c = con.execute('select * from config')
  72. for row in c:
  73. self.preferences[row[1]] = row[2]
  74. con.close()
  75. def save_pref(self,pref):
  76. if pref in self.preferences:
  77. try:
  78. con = sqlite3.connect(self.db_path)
  79. con.execute('update config set value = ? where name = ?', (self.preferences[pref],pref))
  80. con.commit()
  81. con.close()
  82. except:
  83. pass
  84. def save(self):
  85. con = sqlite3.connect(self.db_path)
  86. c = con.cursor()
  87. for name, value in self.preferences.iteritems():
  88. c.execute('select name from config where name = ?', (name,))
  89. if c.fetchone() is not None:
  90. c.execute('update config set value = ? where name = ?', (value,name))
  91. else:
  92. c.execute('insert into config (name,value) values (?,?)', (name,value))
  93. con.commit()
  94. c.close()
  95. con.close()
  96. if __name__ == "__main__":
  97. #For testing
  98. config = MConfig()
  99. config.preferences[u'test'] = u'my test value'
  100. config.save()
  101. print config.preferences