Best practice per i file di configurazione in variabili globali (o globalmente necessarie)

0

Un pattern comune che uso sui miei programmi non banali è di avere una classe che analizzi un file di configurazione (di solito YAML) e rende gli elementi nei valori della configurazione disponibili come proprietà sulla classe.

Quindi importerò questa classe altrove nel mio programma ogni volta che devo fare riferimento alla configurazione fornita dall'utente

#config.yml
app_name: 'Awesome Program'
base_url: 'http://example.com/awesome'
#appconfig.py
import yaml   
class AppConfig(object):
    '''Imports the contents of config.yml as property values'''
    def __init__(self):
        with open('config.yml') as cfgfile:
            y = yaml.load(cfgfile)
            for key in y:
                setattr(self, key, y[key])


CONF = AppConfig()
#app.py
from appconfig import CONF
appname = CONF.app_name
base_url = CONF.base_url
# and so forth

Tuttavia, ho notato che questo tende a rendere infelici determinati IDE. PyCharm in particolare tende a pensare che questo tipo di stato globale (anche se è di sola lettura) è strano, contrassegnando in giallo qualsiasi utilizzo della variabile CONF come avviso di "file implicito implicito" di basso grado.

Una conversazione sul bug tracker di PyCharm e un paio di altre conversazioni su Hacker News implicano che questo è qualcosa che non dovrei fare .

È decisamente conveniente, e non mi ha ancora messo nei guai, ma c'è un modo migliore / più idiomatico / più appropriato che dovrei gestire? Si noti che la configurazione è interamente di sola lettura e quindi la sincronizzazione, il blocco e così via sono problemi di cui non sono preoccupato.

    
posta Mikey T.K. 03.04.2017 - 19:20
fonte

0 risposte

Leggi altre domande sui tag