Exemple #1
0
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
Exemple #2
0
    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)