1

ドキュメントを調べて、Googleを広範囲に検索しましたが、問題の解決策が見つかりませんでした。
これは私のreadRSS関数です(「get」はKenneth Reitzのリクエストモジュールのメソッドであることに注意してください)。

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クラスの1つです。

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)

ご覧のとおりreadRSS、クラスの関数内で関数を呼び出さなければならなかったので、フィールドとselfに依存しているため、を渡すことができました。 これを行う別の方法があるかどうかを知りたいので、戻り値をドキュメントのフィールドに保存できます。関数の戻り値を関数内の変数に割り当てようとしましたが、どちらも機能しませんでした。 feednamelocation
readRSSFeedreadRSS__dict__

アプリで機能を使用していますが、結果をドキュメントに保存して、サーバー(RSSフィードを取得しているサーバー)の負荷を軽減したいと考えています。

私がやろうとしていることをする方法はありますか、それとも私はこれについてすべて間違っていますか?

4

1 に答える 1

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'])

とにかく、みんなありがとう。

于 2013-01-28T06:21:06.377 に答える