2012-05-10 5 views
1

나는 파이썬으로 unittest를하고 있는데 모두 괜찮 았어.하지만 나는 이상하게 생각한다. 문제는 다음과 같다.가져 오기가 작동하지 않습니까?

내 GlanceApi 객체를 생성하려고한다. 내가했던 또 다른 시험 등의 시험,하지만 난이 오류가있어 :

====================================================================== 
ERROR: setUpClass (__main__.TestGlance) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "glance_tests.py", line 22, in setUpClass 
    self.glnce = glance.GlanceApi("") 
AttributeError: 'module' object has no attribute 'GlanceApi' 

을이 내 코드입니다 :

import unittest 
import json 
import time 
import sys 
sys.path.append("../src") 
import glance 
import novaapiclient 

class TestGlance(unittest.TestCase): 

    @classmethod 
    def setUpClass(self): 
     confFile = file('config.txt', 'r+w') 
     configs = "" 
     for line in confFile: 
      if not (line.startswith('#')) and len(line) != 0: 
       configs = line.split(';') 

     novaAPI = novaapiclient.NovaApiClient(str(configs[0])) 
     novaAPI.make_auth(configs[1], configs[2], configs[3]) 

     self.glnce = glance.GlanceApi() # << HERE ERROR 
     self.glnce.set_auth_obj(novaAPI.get_auth_obj()) 

그것은 내가했던 또 다른 시험처럼 보이지만 아무튼 이 사건에 효과가있다. 미리 감사드립니다.

import pycurl 
import cStringIO 
import os 

class GlanceApi: 

    def __init__(self): 
     self.auth = "" 
     self.http_handler = "" 

    def set_auth_obj(self, authenticate): 
     self.auth = authenticate 


    def list_images(self, is_public=False, with_details=False): 

     if self.auth.is_authed() == False: 
      return False 

     self.http_handler = pycurl.Curl() 
     printer = cStringIO.StringIO() 

     if with_details == False: 
      url_complement = "/images" 
     else: 
      url_complement = "/images/detail" 

     if is_public == False: 
      full_url = str(self.auth.get_image_URL() + url_complement) 
     else: 
      full_url = str(self.auth.get_image_URL()[:30] + url_complement) 

     headers = ["X-Auth-Token:%s" % str(self.auth.get_auth_token())] 

     self.http_handler.setopt(pycurl.URL, full_url) 
     self.http_handler.setopt(pycurl.HTTPGET, 1) 
     self.http_handler.setopt(pycurl.HTTPHEADER, headers) 
     self.http_handler.setopt(pycurl.WRITEFUNCTION, printer.write) 
     self.http_handler.perform() 

     http_code = int(self.http_handler.getinfo(pycurl.HTTP_CODE)) 
     self.http_handler.close() 

     return printer.getvalue() 


    def get_image_metadata(self, id, is_public=False): 

     if self.auth.is_authed() == False: 
      return False 

     self.http_handler = pycurl.Curl() 
     printer = cStringIO.StringIO() 

     url_complement = "/images/%s" % id 

     # Setting the request url according the is_public parameter. 
     if is_public == False: 
      full_url = str(self.auth.get_image_URL() + url_complement) 
     else: 
      full_url = str(self.auth.get_image_URL()[:30] + url_complement) 

     headers = ["X-Auth-Token:%s" % str(self.auth.get_auth_token())] 

     self.http_handler.setopt(pycurl.URL, full_url) 
     self.http_handler.setopt(pycurl.CUSTOMREQUEST, 'HEAD') 
     self.http_handler.setopt(pycurl.HTTPHEADER, headers) 
     self.http_handler.setopt(pycurl.WRITEFUNCTION, printer.write) 
     self.http_handler.perform() 

     http_code = int(self.http_handler.getinfo(pycurl.HTTP_CODE)) 
     self.http_handler.close() 

     return printer.getvalue() 


    def add_image(self, file_path, name, is_public=False): 
     # Verifying if the user is authenticated. 
     if self.auth.is_authed() == False: 
      return False 

     self.http_handler = pycurl.Curl() 
     printer = cStringIO.StringIO() 

     url_complement = "/images" 

     if is_public == False: 
      full_url = str(self.auth.get_image_URL() + url_complement) 
     else: 
      full_url = str(self.auth.get_image_URL()[:30] + url_complement) 

     size = os.path.getsize(file_path) 

     image = [(str(name), (pycurl.FORM_FILE, str(file_path)))] 

     headers = ["X-Auth-Token:%s" % str(self.auth.get_auth_token()), "x-image-meta-name:%s" % name, "x-image-meta-size:%s" % str(size)] 
     if is_public == True: 
      headers.append("x-image-meta-is-public:true") 

     self.http_handler.setopt(pycurl.URL, full_url) 
     self.http_handler.setopt(self.http_handler.HTTPPOST, image) 
     self.http_handler.setopt(pycurl.HTTPHEADER, headers) 
     self.http_handler.setopt(pycurl.WRITEFUNCTION, printer.write) 
     self.http_handler.perform() 

     http_code = int(self.http_handler.getinfo(pycurl.HTTP_CODE)) 
     self.http_handler.close() 

     return printer.getvalue() 

이 디렉토리 구조는 다음과 같습니다 :

이는 눈에 소스입니다

Project 
    + src/ 
     - glance.py 
     - ... 
    + Tests/ 
     - glance_tests.py 
     - ... 

편집 해결, 어떻게? 나도 몰라,하지만 난이 일을했습니다, 나는 glanceapi.py라는 새로운 파일을 만들고 glance.py 파일의 내용을 복사하고 임포트시 이름을 바꾸면 작동합니다. 문제가 무엇인지 전혀 알지 못합니다. , 파이썬 버그 일 수 있습니다. 글쎄, 저를 도우 려던 사람들에게 감사의 말을 전하고 싶습니다.

+0

Glance 및 GlanceApi 코드를 표시 할 수 있습니까? –

+0

"glance"는 파이썬 파일의 이름이고 GlanceApi는 glance 파일 내부의 클래스 이름입니다. – guisantogui

+0

@guisantogui 글쎄, 그렇다면 우리는이 오류를 보지 못할 것이다. 'glance.py'를 게시하고 우리가 보게하십시오, 그렇지 않으면, 우리는 잘못된 것을 당신에게 말할 수 없을 것입니다. –

답변

0

IDLE로 이동하여 PYTHONPATH가 무엇인지 확인하십시오.

import sys 
sys.path 

그리고 눈이 경로에없는 위치한 장소의 경우

, 당신이/삽입 sys.path.append을 사용하여 추가 할 것입니다 가정(). 여기에 매개 변수를 설정하는 방법을 살펴보십시오. http://effbot.org/librarybook/sys.htm

편집 : 작동하지 않는 경우 알려주세요.

관련 문제