def test( url4webpy =url4webpy, url_doco =url_doco, **kargs): from svd_util.attr import subclasses for fc in subclasses( FaceDeclaration): print '=================', fc print '---dump' for what in fc.methods_walk(): print ' ', prn( what) for what in fc.methods_walk(): print ' ', doc( what) print '---url_patterns' for x in url4webpy( fc): print ' ', x print '---url_doco' for x in url_doco( fc, **kargs): print ' ', x
def sync_many( me, db, views, remove_missing =False, remove_missing_docs =False, callback =None): #XXX defect! h*ck! sort it stupid! #return design.ViewDefinition.sync_many( db, sorted( views, key= attrgetter('design')), **ka) views.sort( key= attrgetter('design')) #rework of couchdb.ViewDefinition.sync_many kinds = [ k() for k in [ DesignDefinition.kind4sync ] + subclasses( DesignDefinition.kind4sync) ] ddocs = dict( (o.id, o.doc) for o in me.all_designdocs( db)) docs = [] for design, views in groupby(views, key=attrgetter('design')): doc_id = '_design/%s' % design doc = ddocs.pop( doc_id, {'_id': doc_id}) orig_doc = deepcopy(doc) languages = set() for kind in kinds: kind._get( doc) for view in views: if not view._prepared: view.prepare() view._prepared = True for kind in kinds: value = kind._take( view) if value: break else: raise ValueError( 'unknown design-kind '+ str(view) ) kind._set( doc, view.name, value) languages.add( view.language) for kind in kinds: if not kind.missing: continue if remove_missing or kind.remove_missing: if me.do_print: print( 'remove from design-doc', db, doc['_id'], kind.section, ':', kind.missing) kind._del( doc) if 'language' in doc: languages.add( doc['language']) if len(languages) > 1: raise ValueError('Found different languages in one design document (%r)', list(languages)) doc['language'] = list(languages)[0] if doc != orig_doc: if me.do_print: print( 'updating design-doc', db, doc['_id']) if callback is not None: callback(doc) docs.append(doc) if docs: if 'DEBUG': for d in docs: db.save(d) else: db.update( docs) if remove_missing_docs and ddocs: for d in ddocs.values(): if me.do_print: print( 'remove design-doc', db, d['_id'] ) db.delete( d)