まず、私の問題を定義しましょう。あとでやる気を出します。
問題:
def map(doc):
yield doc['type'], 1
# How do I get the textual representation of the function map above,
# as in getting the string "def map(doc):\n yield doc['yield'], 1"?
print repr(map) # Does not work. It prints <function fun at 0x10049c8c0> instead.
動機:
CouchDBビューに精通している方のために、私はPythonスクリプトを作成してCouchDBビューを生成しています。これは、マップを含むJSONであり、関数が埋め込まれています。例えば、
{
"language": "python",
"views": {
"pytest": {
"map": "def fun(doc):\n yield doc['type'], 1",
"reduce": "def fun(key, values, rereduce):\n return sum(values)"
}
}
}
ただし、読みやすくするために、最初にPythonスクリプトでネイティブに関数を記述してmap
からreduce
、この質問への回答を使用して上記のJSONを作成することをお勧めします。
解決:
BrenBarnの応答により、を使用しますinspect.getsource
。
#!/usr/bin/env python
import inspect
def map(doc):
yield doc['type'], 1
def reduce(key, values, rereduce):
return sum(values)
couchdb_views = {
"language": "python",
"views": {
"pytest": {
"map": inspect.getsource(map),
"reduce": inspect.getsource(reduce),
}
}
}
# Yay!
print couchdb_views