commun.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. '''
  2. Fonctions communes
  3. '''
  4. import os
  5. from random import randint
  6. import time
  7. from PyQt4.QtCore import SIGNAL, Qt, QString
  8. from PyQt4.QtGui import QDialog, QApplication
  9. import cPickle as pickle
  10. from ui.ecran_confirmation import Ui_cfrm_fenetre
  11. from ui.ecran_saisie import Ui_saisi_fenetre
  12. from ui.ecran_message import Ui_msg_fenetre
  13. ppal = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))
  14. def rep(nature):
  15. """retourne le chemin du repertoire demande, le cree s'il n'existe pas
  16. (!!!) ne retourne que les chemins fixes (ne comprenant pas de part variable)"""
  17. #premier niveau de rep
  18. if nature == "app":
  19. retour = ppal
  20. elif nature == "rsc":
  21. retour = os.path.join(ppal, "rsc\\")
  22. elif nature in ["mat", "jeu"]:
  23. retour = os.path.join(ppal, "mat\\")
  24. elif nature in ["parties", "partie", "mde", "grp", "cbt"]:
  25. retour = os.path.join(ppal, "parties\\")
  26. elif nature in ["profils", "profil", "reception"]:
  27. retour = os.path.join(ppal, "profils\\")
  28. elif nature == "tmp":
  29. retour = os.path.join(ppal, "tmp\\")
  30. if not os.path.isdir(retour): os.mkdir(retour)
  31. #2e niveau
  32. if nature in ["partie", "mde", "grp", "cbt"]:
  33. s = sessionEnCours()
  34. partie = s.partie()
  35. retour = os.path.join(retour, "{}\\".format(partie))
  36. elif nature in ["profil", "reception"]:
  37. s = sessionEnCours()
  38. partie = s.util()
  39. retour = os.path.join(retour, "{}\\".format(partie))
  40. elif nature == "jeu":
  41. s = sessionEnCours()
  42. jeu = s.jeu()
  43. retour = os.path.join(retour, "{}\\".format(jeu))
  44. if not os.path.isdir(retour): os.mkdir(retour)
  45. #3e niveau
  46. if nature in ["reception", "mde", "grp", "cbt"]:
  47. retour = os.path.join(retour, "{}\\".format(nature))
  48. if not os.path.isdir(retour): os.mkdir(retour)
  49. return retour
  50. def uid(prefixe = ""):
  51. """construit un identifiant unique de 10 caracteres"""
  52. #representation de la date (annee/mois/jour/heure/min/seconde)
  53. base = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n", \
  54. "o","p","q","r","s","t","u","v","w","x","y","z", \
  55. "A","B","C","D","E","F","G","H","I","J","K","L", \
  56. "M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z", \
  57. "2","3","4","5","6","7","8","9"]
  58. dat = time.gmtime()
  59. a = dat[0] ; m = dat[1] ; j = dat[2] ; h = dat[3] ; mn = dat[4] ; s = dat[5]
  60. a_, m_, j_, h_, mn_, s_ = base[(int(a)-2000)], base[int(m)], base[int(j)], base[int(h)], base[int(mn)], base[int(s)]
  61. #ajout de 2 caracteres aleatoires
  62. c1 = base[randint(0,59)] ; c2 = base[randint(0,59)]
  63. #concatenation
  64. if len(prefixe) >= 2:
  65. p_ = prefixe[0:2]
  66. else:
  67. while len(prefixe) < 2:
  68. prefixe += "-"
  69. p_ = prefixe
  70. retour = "{}{}{}{}{}{}{}{}{}".format(p_, a_, m_, j_, h_, mn_, s_, c1, c2)
  71. return retour
  72. def enregistrerSous(objet, cible):
  73. """enregistre l'objet dans le fichier cible"""
  74. with open(cible, 'wb') as f:
  75. pickle.dump(objet, f, protocol=pickle.HIGHEST_PROTOCOL)
  76. f.close()
  77. def charger(fichier):
  78. """charge l'objet depuis le fichier demande"""
  79. fichier = "{}".format(fichier)
  80. #on recupere l'objet
  81. # try:
  82. with open(fichier, 'rb') as f:
  83. objet = pickle.load(f)
  84. f.close()
  85. # except IOError:
  86. # objet = None
  87. return objet
  88. def sessionEnCours():
  89. """retourne la donnee demandee de la session idS"""
  90. arg = QApplication.argv()
  91. idS = arg[1]
  92. s = charger(os.path.join(os.path.join(ppal, "tmp\\"), "{}.tmp".format(idS)))
  93. return s
  94. class Session(object):
  95. def __init__(self):
  96. self._idS = uid("se")
  97. self._idU = "defaut" #id utilisateur
  98. self._idP = "defaut" #id partie
  99. self._idJ = "defaut" #id du jeu (materiels)
  100. self.enregistrer()
  101. def idS(self):
  102. return self._idS
  103. def fichier(self):
  104. return os.path.join(os.path.join(ppal, "tmp\\") , "{}.tmp".format(self._idS))
  105. def enregistrer(self):
  106. enregistrerSous(self, self.fichier())
  107. def util(self):
  108. return self._idU
  109. def majUtil(self, idU):
  110. self._idU = idU
  111. self.enregistrer()
  112. def partie(self):
  113. return self._idP
  114. def majPartie(self, idP):
  115. self._idP = idP
  116. self.enregistrer()
  117. def jeu(self):
  118. return self._idJ
  119. def majJeu(self, idJ):
  120. self._idJ = idJ
  121. self.enregistrer()
  122. def fin(self):
  123. try:
  124. os.remove(self.fichier())
  125. except:
  126. pass