2013-01-17 3 views
1

문서를 살펴본 결과 Google을 광범위하게 검색해 본 결과 내 문제의 해결책을 찾지 못했습니다.
이 내 readRSS 기능 ('얻을 것은'케네스 리츠의 요청 모듈의 방법이다)이다Flask-MongoAlchemy 문서 내 필드 값 가져 오기

def readRSS(name, loc): 
    linkList = [] 
    linkTitles = list(ElementTree.fromstring(get(loc).content).iter('title')) 
    linkLocs = list(ElementTree.fromstring(get(loc).content).iter('link')) 
    for title, loc in zip(linkTitles, linkLocs): 
     linkList.append((title.text, loc.text)) 
    return {name: linkList} 

이 내 MongoAlchemy 클래스 중 하나입니다

class Feed(db.Document): 
    feedname = db.StringField(max_length=80) 
    location = db.StringField(max_length=240) 
    lastupdated = datetime.utcnow() 

    def __dict__(self): 
     return readRSS(self.feedname, self.location) 

당신이 볼 수 있듯이, 필드의 값인 feednamelocation에 의존하기 때문에 readRSS 함수를 클래스의 함수 내에서 호출해야하므로 self을 전달할 수있었습니다.
다른 방법이 있는지 알고 싶습니다. 따라서 readRSS 반환 값을 Feed 문서의 필드에 저장할 수 있습니다. 나는 함수 __dict__ 내의 변수에 함수의 반환 값 readRSS을 할당하려고 시도했는데, 그 중 하나도 작동하지 않았다.

내 응용 프로그램에서 작동하는 기능이 있지만 서버에 부하를 줄이기 위해 결과를 문서에 저장하려고합니다 (RSS 피드를 가져 오는 중).

내가하고자하는 일을하는 방법이 있습니까? 아니면 내가 잘못 생각하고 있습니까?

답변

1

답변을 찾았습니다. computed_field 데코레이터를 사용해야했습니다. 첫 번째 인수는 반환 값의 구조 였고 deps은이 필드가 종속 된 필드를 포함하는 집합이었습니다. 그런 다음 종속 필드를 함수의 인수로 전달하고 거기에 가지고 있습니다.

@fields.computed_field(db.KVField(db.StringField(), db.ListField(db.TupleField(db.StringField()))), deps=[feedname, location]) 
def getFeedContent(a=[feedname, location]): 
    return readRSS(a['feedname'], a['location']) 

어쨌든 모두에게 감사드립니다.