Problème d'organisation et d'accès au données

Problème d'organisation et d'accès au données - Python - Programmation

Marsh Posté le 09-12-2005 à 12:01:21    

Salut,
 
j'ai un problème d'organisation de mon code et d'accès à certaines de mes données. Mon projet est un truc web qui manipule une base de données. Pour l'instant, c'est organisé comme ça (c'est sujet à modifications d'ailleurs, chuis pas fixé la dessus) :


bli/
   __init__.py
   Base.py
   blu.py
   blo.py
   etc.py
   
config.py
tests.py


Le contenu du répertoire /bli/ contient des classes qui vont interagir avec la base de données (en gros, un truc du genre Active Record). Base est la super-classe à partir de laquelle dérive toutes les autres.
 
J'ai commencé à écrire mes tests unitaires (dans /tests.py) pour tester mon truc et config.py contient mes options de configuration (paramètre de connection à la BD, etc.) Ca ressemble à ça :


 def testBluLoad (self):
  """Test le chargement d'une carte déjà existante."""
  b1 = bli.blu()
  b1.name = "Home One"
  b1.id_truc = 1
  b1.machin = 1
  b1.save()
   
  b2 = bli.blu(b1.id)
  self.assertEqual(b1.id, b2.id)
  self.assertEqual(b1.name, b2.name)
  self.assertEqual(b1.id_truc, b2.id_truc)
  self.assertEqual(b1.machin, b2.machin)


Le problème, c'est la connection SQL. J'en ai forcément besoin dans mes classes de /bli/ . Actuellement, elle est ouverte dans tests.py, et à part la passer en paramètre à dans chaque constructeur de chaque classe ( [:pingouino] ), j'vois pas trop :/
Je me sers de pyscopg (interface pour PostgreSQL), je l'ai pas wrappé du tout.
 
Ce que j'aimerais, c'est ouvrir une connection globale à la BD quelque part (à définir [:dawa] ), et pouvoir la récupérer automatiquement dans le constructeur de Base par ex., sans que j'ai à la passer de partout (éventuellement, y'aura d'autres trucs qui fonctionneront de la même manière).
 
Voilà, donc c'est plus un problème d'organisation que j'ai [:dawa]
Tout aides & conseils sont les bienvenues [:romf]

Message cité 1 fois
Message édité par multani le 09-12-2005 à 17:14:58
Reply

Marsh Posté le 09-12-2005 à 12:01:21   

Reply

Marsh Posté le 09-12-2005 à 13:13:20    

multani a écrit :

Le contenu du répertoire /bli/ contient des classes qui vont interagir avec la base de données (en gros, un truc du genre Active Record). Base est la super-classe à partir de laquelle dérive toutes les autres.


On est pas en Java là, ça n'a aucun sens de mettre une classe par fichier [:moule_bite]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 09-12-2005 à 15:53:40    

Certes, mais c'etait plus pour l'exemple là [:dawao]
Puis ça m'aide pas trop pour mon problème aussi [:dawa]

Reply

Marsh Posté le 09-12-2005 à 16:02:41    

Oué mais stu veux vu la clarté de l'exposition du problème...
(nan paske t'es au courant qu'il y a un framework de tests unitaires en python?)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 09-12-2005 à 16:10:38    

masklinn a écrit :

Oué mais stu veux vu la clarté de l'exposition du problème...


En gros : j'ai une hiérarchie de module (comme je l'ai présenté, ou un truc mieux). J'aimerais créer une connection à ma base de données dans un de mes scripts à la racine de mon projet, ou dans un des modules, et faire passer cette connection à mes autres modules. Et je voudrais savoir les solutions que je pourrais utiliser.

masklinn a écrit :

(nan paske t'es au courant qu'il y a un framework de tests unitaires en python?)


Ouais, d'ailleurs, chuis sympa, j'ai mis un exemple de ce que j'en ai fais [:dawa] (si tu parles de unittest)

Reply

Marsh Posté le 09-12-2005 à 16:14:26    

multani a écrit :

En gros : j'ai une hiérarchie de module (comme je l'ai présenté, ou un truc mieux). J'aimerais créer une connection à ma base de données dans un de mes scripts à la racine de mon projet, ou dans un des modules, et faire passer cette connection à mes autres modules. Et je voudrais savoir les solutions que je pourrais utiliser.


???
 
Singleton [:petrus dei]

Citation :

Ouais, d'ailleurs, chuis sympa, j'ai mis un exemple de ce que j'en ai fais [:dawa]


Ca ressemble sûrement pas à un test unitaire ça [:petrus75]
(au fait, t'es au courant que les constructeurs peuvent avoir des arguments?)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 09-12-2005 à 17:05:42    

masklinn a écrit :

???
 
Singleton [:petrus dei]


Ouais, j'veux bien, mais je _vois_ pas comment le référencer :
 - je le fout où ? dans /, dans un module séparé, dans le même module que l'accès à ma base ?
 - si je le fout dans un un module séparé de celui qui accède à ma base, comment je le récupère ? Si j'ai un module /truc, et un module /machin (à priori pas dans le même espace de nom), je référence mon singleton comment ?
 
Ca parait con, sans doutes, mais j'ai du mal à saisir.

masklinn a écrit :


Citation :

Ouais, d'ailleurs, chuis sympa, j'ai mis un exemple de ce que j'en ai fais [:dawa]


Ca ressemble sûrement pas à un test unitaire ça [:petrus75]


D'accord, c'est ptêtre pas le meilleur exemple, je le corrige de suite.

masklinn a écrit :

(au fait, t'es au courant que les constructeurs peuvent avoir des arguments?)


Ouais. D'ailleurs, je pourrais arrêter de me prendre la tête et foutre mon objet sql_connection par là. Mais bon :/ (et oui, je ferais surement un constructeur qui prend un hash d'attributs en paramètre).

Reply

Marsh Posté le 13-12-2005 à 21:56:59    

Bon au fait, j'ai trouvé la super solution [:petrus75]
 
j'avais pas capté que dans le module bli.gni je pouvais faire un import bli.Connection par ex. [:petrus75]
 
Tout de suite, ça aide vachement [:petrus75]
 
Merci masklinn [:petrus75]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed