2017-09-04 12 views
0

응용 프로그램 설정에 MongoDB를 사용하고 있습니다. Python 코드에서 pymongo의 고급 래퍼 인 mongoengine을 사용하여 db에서 설정 문서를 읽습니다. 내가 설정 문서를 만들 수있는 방법에 관심이 있어요,속성에 액세스 할 때 pymongo 또는 mongoengine에서 MongoDB 문서를 자동으로 다시로드하는 방법은 무엇입니까?

import time 
import mongoengine 

class Setting(mongoengine.Document): 
    log_level = mongoengine.StringField(default='info') 

setting = Setting.objects[0] 
while True: 
    time.sleep(1) 
    setting.reload() 
    print(setting.log_level) 

그러나 : 나는 (MongoDB의에서 수집 설정에서 문서가 있다고 가정)과 같이 그 속성에 액세스하는 문서 매번 다시로드 할 수 있어요 log_level 속성에 액세스 할 때마다 자동으로 다시로드됩니다. mongoengine에서 이것을 할 수있는 깨끗한 방법이 있습니까? 난 항상 DB와 동기화 될이 내 설정과 같은 코드를 선호 : 좋은 방법을 찾기 위해

... 
while True: 
    time.sleep(1) 
    print(setting.log_level) 

내가 읽은 mongoengine의 문서 좀 더 내가 no_cache() 할 수 있습니다 방법을 발견했습니다 Setting 클래스가 강제로 캐싱하지 않는 쿼리 세트를 반환하는 데 사용됩니다. 이걸로 조금 더 가깝습니다 :

def get_setting(): 
    return Setting.objects.no_cache()[0] 

while True: 
    time.sleep(1) 
    print(get_setting().log_level) 

어떤 생각?

고맙습니다.

답변

0

이렇게하는 사용자 지정 방법을 쓸 수 있습니다. 의사 코드 :

def get_reloaded_attr(obj,attr): 
    obj.reload() 
    return getattr(obj,attr) 
+0

제안 해 주셔서 감사합니다. 하지만 나는이 설정 문서를 어디서나 내 코드에서 사용해야하고 get_reloaded_attr ('log_level'설정)과 같은 함수를 장황하고 간접적으로 호출해야하기 때문에 더 깨끗한 방법을 찾고있다. –