Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

unresolve attribute reference

+3 votes

J'ai trois fichiers:

Fichier Authenticate

import json
import requests
import Logger_file


class Authenticate:
    """
     API que l'on va utiliser.
    """
    URL_GET_TOKEN = 'https://xxxx/identity/v3/auth/tokens'

    def __init__(self, login, password, project_id=None, headers=None, token=None):
        self.login = login
        self.password = password
        self.project_id = None
        self.headers = {}
        self.token = None

    def request_token(self, project_id):
        if self.project_id != None:
            self.project_id = self.project_id
        else:
            raise ValueError('Project ID is not defined')

    headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
        payload = {
            "auth": {
                "identity": {
                    "methods": [
                        "password"
                    ],
                    "password": {
                        "user": {
                            "domain": {
                                "name": "default"
                            },
                            "name": self.login,
                            "password": self.password
                        }
                    }
                },
                "scope": {
                    "project": {
                        "id": self.project_id
                    }
                }
            }
        }

        r = requests.post(url=self.URL_GET_TOKEN, data=json.dumps(payload), headers=headers)
        if r.status_code != 200:
            Logger_file.logger_file("Authentication failed")
            return None

        self.token = r.headers['X-Subject-Token']
        self.headers = {'X-Auth-Token': self.token,
                        'Accept': 'application/json',
                        'Content-Type': 'application/json'}
        return self.token        

2 Logger_file

import logging
from logging.handlers import RotatingFileHandler
import datetime


class logger_file:

    def __init__(self,message):
        # --- Logging stuff
        # Create logger
        self.message = message
        self.logger = logging.getLogger('log_local.logger_file')
        # Logger level
        self.logger.setLevel(logging.DEBUG)
        # Define our formatter for log lines
        self.formatter = logging.Formatter(
            '[%(asctime)s] [%(process)d] ' + '[%(levelname)s] %(self.message)s')
        # Create a file handler, append mode, five backups, rotate max 1Mo
        self.file_handler = RotatingFileHandler('numergy.log', 'a', 1000000, 5)

        # LOG FILE : Set file handler level, formatter and add it to logger
        self.file_handler.setLevel(logging.DEBUG)
        self.file_handler.setFormatter(self.formatter)
        self.logger.addHandler(self.file_handler)

        # CONSOLE LOG : Set level, and add it to logger
        self.steam_handler = logging.StreamHandler()
        self.steam_handler.setLevel(logging.DEBUG)
        self.logger.addHandler(self.steam_handler)

3 Restore_api

    import requests
    import Authenticate
    import Logger_file
    """
    Api de restoration :
    Restauration en cas de crash d'une VM
    """


    class RestoreApi:
        """
        liste des urls api
        """
        URL_LIST_PROJECTS = 'https://xxxxx/api/projects'
        URL_COMPUTE = 'https://xxxxx/compute/v2/'
        URL_VOLUME = 'https://xxxxx/volume/v2/'
        URL_NETWORK = 'https://xxxxx/network/v2.0/networks'
        URL_IMAGE = 'https://xxxxx/image/v2/images'

        def get_image(self, instance_name):
            try:
                r = requests.get(url=self.URL_IMAGE + '/detail', headers=Authenticate.Authenticate.headers)
            except Exception as e:
                Logger_file.logger_file.logger.error(e)
                raise
            else:
                if r.status_code != 200:
                    error = json.loads(r.content)
                    Logger_file.logger_file.logger.error(
                        "[PROJECTS] Error " + error[error.keys()[0]]['message'])
                    return None
                return json.loads(r.content)

Ce que je ne comprend pas, c'est que Pycharm gueule en disant :

unresolve attribute reference logger sur le fichier RestoreApi.py

sur Logger_file.logger_file.logger.error("....")
pourtant j'ai bien respecté l'appel class.methode de Logger_file

Idem pour

headers=Authenticate.Authenticate.headers

Si quelqu'un peut m'aider ? :-)

demandé 17-Jun-2015 par FredWarning (228 points)
edité 17-Jun-2015 par boblinux

2 Réponses

+3 votes
 
Meilleure réponse

Hello all,

en fait le problème qui se posait avec les imports venait du fait que je n'avais pas instancié mes classes ( #coup de fouet bien mérité )

du coup j'ai fait ceci:

from Authenticate import Authenticate
from Logger_file import LoggerFile
#...[skiped code]...
    """
instantiation de la classe LoggerFile et Auth.
"""
log = LoggerFile()
auth = Authenticate(main.login, main.password)
#...[skiped code]...
def get_list_all_image(self):
    try:
        r = requests.get(url=self.URL_IMAGE + '/detail', headers=self.auth.headers)
    except Exception as e:
        self.log.logger.error(e)
        raise

du coup ça fonctionne mieux.

Merci à tous

Ps: @max je me suis basé sur ton article pour écrire le logger. MERCI

répondu 17-Jun-2015 par FredWarning (228 points)
edité 17-Jun-2015 par FredWarning

Tout est bien qui finit bien ^^

+2 votes

Tu as essayé de modifier ton import en

import Logger_file.logger_file as logger_file

et ensuite appeler ta classe logger_file?

répondu 17-Jun-2015 par furankun (1,434 points)

Le problème est maintenant déporté sur les import ( ci-joint une capture d'écran )
import Authenticate.Authenticate as Authenticate
import Loggerfile.loggerfile as logger_file

et je n'ai plus d'erreur sur : headers=Authenticate.headers ni logger_file.logger.error('..')

    def get_image(self, instance_name):
        try:
            r = requests.get(url=self.URL_IMAGE + '/detail', headers=Authenticate.headers)
        except Exception as e:
            logger_file.logger.error(e)
            raise
        else:
            if r.status_code != 200:
                error = json.loads(r.content)
                logger_file.logger.error(
                    "[PROJECTS] Error " + error[error.keys()[0]]['message'])
                return None
            return json.loads(r.content)

screen shot

J'ai déplacé ta réponse en commentaire de la réponse de furankun.
Tu as mis le lien vers imgur et non vers l'image hébergée par imgur, j'ai corrigé ça.
Pas de merci ni de bonjour, c'est inutile ici :)

Au passage un article qui pourrait t'intéresser.

...