2 from datetime
import datetime
4 from urlparse
import urlparse
6 from couchdbkit
import Database
7 from restkit
import BasicAuth
8 from django
.core
.management
.base
import BaseCommand
9 from django
.conf
import settings
11 from mygpo
.decorators
import repeat_on_conflict
12 from mygpo
.core
.models
import SanitizingRule
13 from mygpo
.utils
import progress
17 class Command(BaseCommand
):
18 """ Queries a view in each design document to keep the view-files hot """
20 def handle(self
, *args
, **options
):
21 db_urls
= set(db
[1] for db
in settings
.COUCHDB_DATABASES
)
25 couchdb_admins
= getattr(settings
, 'COUCHDB_ADMINS', ())
27 username
, passwd
= couchdb_admins
[0]
28 filters
.append(BasicAuth(username
, passwd
))
30 for db_url
in db_urls
:
31 db
= Database(db_url
, filters
=filters
)
33 for sig
, ddoc_name
in self
.get_design_docs(db
):
34 ddoc
= db
['_design/' + ddoc_name
]
35 if not ddoc
.get('views', {}):
38 view_name
= ddoc
['views'].keys()[0]
39 print 'touching %s %s/%s' % (sig
[:5], ddoc_name
, view_name
),
40 self
.touch_view(db
, ddoc_name
, view_name
)
46 def get_all_design_docs(db
):
47 """ Returns all design documents in the database """
50 prefix_len
= len(prefix
)
51 return (ddoc
['key'][prefix_len
:] for ddoc
in db
.view('_all_docs', startkey
='_design/', endkey
='_design0'))
54 def get_design_docs(self
, db
):
56 Return one design doc for each index file
59 for ddoc
in self
.get_all_design_docs(db
):
60 sig
= db
.res
.get('/_design/%s/_info' % ddoc
).json_body
['view_index']['signature']
66 def touch_view(self
, db
, ddoc
, view
):
67 r
= list(db
.view('%s/%s' % (ddoc
, view
), limit
=0, stale
='update_after'))