Dear Kenji,

Apologies for the late reply.  I was away for a few days.

Do you use virtual fields for computing the article_eq and ltitle?
>
>
No.

Here is my model:


akb_signature_uuid = db.Table(db, 'akb_signature_uuid',
                     Field('uuid', length = 64, default =
lambda:str(uuid.uuid4()),
                           notnull = True, writable = False, readable =
False,
                           unique = True, ondelete = 'CASCADE'),
                     Field('created_on', 'datetime', default = request.now,
                           readable = False, writable = False),
                     Field('created_by', db.auth_user, default =
auth.user_id,
                           readable = False, writable = False),
                     Field('updated_on', 'datetime', default = request.now,
                           readable = False, writable = False),
                     Field('updated_by', db.auth_user, update =
auth.user_id,
                           readable = False, writable = False)

## The following two functions are used to calculate article_eq:

def au_cleanup(au):
    au1 = re.sub(',', '', au.strip())
    au2 = re.sub('[ ]+', ' ', au1)
    return au2.upper()

def art_ekw(art):
    skrywers = set ([])
    if art.primaryauthor:
        skrywers.add (au_cleanup(art.primaryauthor))
    if art.authors:
        for au in art.authors.split(';'):
            skrywers.add(au_cleanup(au))
    if len(skrywers):
        ekw = 1.0 / len(skrywers)
    else:
        ekw = 0
    return ekw

db.define_table('akb_articles',
                Field('title'),
                Field('primaryauthor'),
                Field('authors', 'text'),
                Field('rp_author', length = 64,
                       requires = IS_EMPTY_OR(IS_IN_DB(db,
'akb_reprint.uuid', '%(rp_author)s'))),
                Field('journal',
                      requires = IS_IN_DB(db, 'akb_journal.uuid',
'%(title)s')),
                Field('bib_id'),
                Field('bib_pages'),
                Field('doctype'),
                Field('language'),
                Field('abstract', 'text'),
                Field('bib_vol'),
                Field('bib_date'),
                Field('url'),
                Field('pubyear', compute = lambda x: x['bib_date'][-4:]),
                Field('ut', # isi-unieke rekordnommer
                      requires = IS_EMPTY_OR(IS_NOT_IN_DB(db,
'akb_articles.ut'))),
                Field('scopus_id', requires = IS_EMPTY_OR(IS_NOT_IN_DB(db,
'akb_articles.scopus_id'))),
                Field('sabinet_id', requires = IS_EMPTY_OR(IS_NOT_IN_DB(db,
'akb_articles.sabinet_id'))),
                Field('isap_id', requires = IS_EMPTY_OR(IS_NOT_IN_DB(db,
'akb_articles.isap_id'))),
                Field('ltitle', compute = lambda x:
re.sub('<[iI]>|<[/][iI]>|<[sS][uU][pbBP]>|</[sS][uU][pPbB]>|\W',
                                                           '',
x['title'].lower())),
                Field('article_eq', 'double' , compute = lambda x:
art_ekw(x)),
                akb_signature_uuid,
                format = '%(title)s'
                )



If it didn't work, please let me know more details.
>

As I am not using virtualfields, I did not try your suggestion.

Thanks for your attention.

Regards
Johann

-- 
Because experiencing your loyal love is better than life itself,
my lips will praise you.  (Psalm 63:3)

Reply via email to