Hi,


I’m stuck. Have looked at all documentation/discussion groups I think, but 
the following just doesn’t write records to an archive file

I’ve been struggling with this for a while now, so help would be VERY 
appreciated. 


The environment is MacOS 10.12.5,, Python 2.7, Web2py 2.14.6, MySQL  5.7


Thanks



the intent here is to enable record versioning, update a record, and 
archive the previous record version in an archive file


With the following code snippets, the form, if invoked after a record in a 
table has been selected, updates the record

   - successful in the update i.e. the mediatitles record is correctly 
updated

   - fails in the archive i.e. the old record is NOT written to the 
mediatitles_archive table


#

# define database

#

standard db.py except for:


   - auth.define_tables(username=False, signature=True)

   - db._common_fields.append(auth.signature)


… lots of tables defined


auth.enable_record_versioning(db,

                                              archive_db=None,

                                              
archive_names='%(tablename)s_archive',

                                              
current_record='current_record')


 #

 # ----- build form -----

 #

in the controller,


titles_form = SQLFORM.factory(

   Field('name'         , 'string'     , label=T('Unique Full Name'),  requires 
=IS_NOT_EMPTY()),

   Field('akaname'    , 'string'     , label=T('Display Name'), default = 
None),

   Field('used_in'      , 'list:string', label=T('Used In'), requires= 
IS_IN_SET( [ ('cur' ,'Curriculum'),  ('sup' ,'Supplemental Media'), ('tng' 
,'Training Media'), ('adm' ,'Administrative Media'),  ('dev' ,'Development')
 ], multiple=True)),

   Field('videos'        ,'list:string', label=T('Video(s)'), requires = 
IS_IN_DB(db, 'videos.id', '%(name)s', multiple=True)),

   Field('audios'        ,'list:string', label=T('Audio(s)'), requires = 
IS_IN_DB(db, 'audios.id', '%(name)s', multiple=True)),

   Field('scores'        ,'list:string', label=T('Score(s)'), requires = 
IS_IN_DB(db, 'scores.id', '%(name)s', multiple=True)),

   Field('tags'           ,'list:string', label=T('Tag(s)')   ,  requires = 
IS_IN_DB(db, 'tags.id’   , '%(name)s', multiple=True)),

   table_name='titles_form_table')

titles_form.add_button('Cancel', URL('list_rows'))


#

# if record update request

#

record_id = int(request.vars.record_id)

the_record = db(db.mediatitles.id == record_id).select().first()


…


#

# ----- process form -----

#

if titles_form.process(onsuccess=auth.archive).accepted:

    the_record.update_record(name=titles_form.vars.name, 

                                               
akaname=titles_form.vars.akaname, 

                                               
used_in=titles_form.vars.used_in)


# fix link tables for the many-to-many relationships

#  old-new could be an overlapping list of values 

# e.g. videos

del_list = list(Set(save_video_vals) - Set(titles_form.vars.videos))

add_list = list(Set(titles_form.vars.videos) - Set(save_video_vals))


for next in add_list:

    db.videos_mediatitles.insert(mediatitle_id=record_id, video_id=next)

for next in del_list:

    db((db.videos_mediatitles.mediatitle_id==record_id) & 
(db.videos_mediatitles.video_id==next)).delete()

...


redirect(URL('default', 'list_all_rows'))



-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to