76a0f6f70afb7af83fe6f8a23e37fae15943e71c
[mygpo.git] / mygpo / db / couchdb / common.py
blob76a0f6f70afb7af83fe6f8a23e37fae15943e71c
1 from mygpo.core.models import SanitizingRule
2 from mygpo.cache import cache_result
3 from mygpo.db.couchdb import get_main_database
4 from mygpo.db import QueryParameterMissing
5 from mygpo.db.couchdb.utils import multi_request_view
8 class SanitizingRuleStub(object):
9 pass
12 @cache_result(timeout=60*60)
13 def sanitizingrules_by_obj_type(obj_type):
15 if not obj_type:
16 raise QueryParameterMissing('obj_type')
18 r = SanitizingRule.view('sanitizing_rules/by_target',
19 include_docs = True,
20 startkey = [obj_type, None],
21 endkey = [obj_type, {}],
24 return map(_wrap_rule, r)
26 def _wrap_rule(rule):
27 obj = SanitizingRuleStub()
28 obj.slug = rule.slug
29 obj.applies_to = list(rule.applies_to)
30 obj.search = rule.search
31 obj.replace = rule.replace
32 obj.priority = rule.priority
33 obj.description = rule.description
34 return obj
37 @cache_result(timeout=60*60)
38 def sanitizingrule_for_slug(slug):
40 if not slug:
41 raise QueryParameterMissing('slug')
43 r = SanitizingRule.view('sanitizing_rules/by_slug',
44 include_docs=True,
45 key=slug,
48 return r.one() if r else None
51 def missing_slug_count(doc_type, start, end):
53 if not doc_type:
54 raise QueryParameterMissing('doc_type')
56 if not start:
57 raise QueryParameterMissing('start')
59 if not end:
60 raise QueryParameterMissing('end')
63 db = get_main_database()
64 res = db.view('slugs/missing',
65 startkey = [doc_type] + end,
66 endkey = [doc_type] + start,
67 descending = True,
68 reduce = True,
69 group = True,
70 group_level = 1,
72 return res.first()['value'] if res else 0
75 def missing_slugs(doc_type, start, end, wrapper, **kwargs):
77 if not doc_type:
78 raise QueryParameterMissing('doc_type')
80 if not start:
81 raise QueryParameterMissing('start')
83 if not end:
84 raise QueryParameterMissing('end')
87 db = get_main_database()
88 return multi_request_view(db, 'slugs/missing',
89 startkey = [doc_type] + end,
90 endkey = [doc_type] + start,
91 descending = True,
92 include_docs = True,
93 reduce = False,
94 wrapper = wrapper,
95 auto_advance = False,
96 **kwargs