Utiliser un config.py avec un entrypoint pip

pour configurer une commande simple

a marqué ce sujet comme résolu.

Bonjour,

je suis en train de développer pour ma boîte un petit framework qui permet de récupérer des fiches de test testlink pour en tirer le squelette de base des tests.

Pour cela j'ai tout un framework qui permet de wrapper selenium, unittest et l'API testlink. Ce a quoi j'ajoute deux scripts à exécuté en ligne de commande pour générer le squelette ainsi que le rapport de test.

Dans mon setup.py j'ai ainsi cette ligne :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
setup(name='testlink_runner',
      version='1.0.1',
      description='Unittest wrapper to create interactions between testlink and python tests',
      author='Vade Retro technology',
      url='',
      install_requires=[
        "TestLink-API-Python-client",
        "selenium"
      ],
      packages=['testlinktool.wrapper', 'testlinktool.tools', 'testlinktool.main'],
      entry_points={
          'console_scripts': [
              'generate_testlink_test = testlinktool.main.generate_test:main',
              'launch_testlink_test = testlinktool.main.lauchtestlinktests:main',
          ],
      })

ce qui me permet de pouvoir lancer la commande generate_testlink_test directement en ligne de commande avec les paramètres associés.

Mais voilà, j'ai quelques paramètres qui sont assez chiant à rentrer à la main dans des arguments de la cli, du coup, je préfère utiliser un fichier de conf. Au début, je voulais faire comme django le fait avec un config.py où on entre tous les paramètres puis qu'on doit importer. Seul problème, pour importer correctement le fichier je suis obligé de recréer un fichier generate_test.py de lui mettre ce code :

1
2
3
4
from testlinktool.main.generate_test import main
from config import *

main(__import__('config'))

pour que le script de base soit appelé.

D'ailleurs voici le début de la fonction main :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def main(config_module=None):
    TESTLINK_API_KEY = ""
    TESTLINK_SERVER = "http://127.0.0.1/testlink/lib/api/xmlrpc/v1/xmlrpc.php"
    TESTLINK_PROJECT_ID = 1
    TESTLINK_PROJECT_NAME = "TEST"
    UI_TEST_KEYWORD = "UI"
    CUSTOM_FIELD_NAME_LIST = []

    try:

        if config_module is None:
            try:
                config_module = __import__("config")
            except Exception:
                pass
        if config_module is not None:
            TESTLINK_SERVER = getattr(config_module, "TESTLINK_SERVER")
            TESTLINK_PROJECT_ID = getattr(config_module, "TESTLINK_PROJECT_ID")
            TESTLINK_PROJECT_NAME = getattr(config_module, "TESTLINK_PROJECT_NAME")
            TESTLINK_API_KEY = getattr(config_module, "TESTLINK_API_KEY")
            CUSTOM_FIELD_NAME_LIST = getattr(config_module, "CUSTOM_FIELD_NAME_LIST")
            UI_TEST_KEYWORD = getattr(config_module, "UI_TEST_KEYWORD")
    except ImportError:
        print("Warning we are using default parameters")

Comment puis-je faire pour que l'import de la configuration soit réalisé (car là les objets ne sont jamais importés)? Que ça soit en s'inspirant de mon idée de départ ou pas.

J'aimerais juste éviter optparse/argparse car la clef d'API à coller dans la cli c'est chiant et pas sécurisé1.


  1. le fichier de config n'est pas "mieux configuré" en soit, c'est juste que je peux le protéger plus facilement. C'est plutôt la partie "devoir coller la clef à chaque fois" qui soule. 

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte