id,summary,reporter,owner,description,type,status,priority,component,severity,resolution,keywords,cc,release 10082,TypeError: unexpected keyword argument 'field_type',roskakori,osimons,"When upgrading our existing Trac installation and the related plugins we encountered the following error message when attempting to change the order of custom fields using Admin > Custom Fields and clicking ""Apply Changes"": {{{ TypeError: __init__() got an unexpected keyword argument 'field_type' }}} The related stack trace is: {{{ File ""build/bdist.macosx-10.6-x86_64/egg/customfieldadmin/admin.py"", line 109, in render_admin_panel File ""build/bdist.macosx-10.6-x86_64/egg/customfieldadmin/api.py"", line 161, in update_custom_field File ""build/bdist.macosx-10.6-x86_64/egg/customfieldadmin/api.py"", line 106, in verify_custom_field }}} Version information: Mac OS X 10.6.8, Python 2.6, trac 0.12.2 The relevant parts of the source code in `verify_custom_field` read: {{{ #!python if not cfield['type'] in \ ['text', 'checkbox', 'select', 'radio', 'textarea']: raise TracError(_(""%(field_type)s is not a valid field type""), field_type=cfield['type']) }}} Maybe `field_type` should be wrapped in a dictionary to raise the intended `TracError`: {{{ #!python raise TracError(_(""%(field_type)s is not a valid field type""), {'field_type': cfield['type']}) }}} Even if the proper error message would have been raised the wording could be improved to make it clear what is expected: {{{ #!python _VALID_CFIELD_TYPES = ['text', 'checkbox', 'select', 'radio', 'textarea'] if not cfield['type'] in _VALID_CFIELD_TYPES: raise TracError(_(""type of field %(field_name)s is '%(field_type)s' but must be one of: %(valid_types)s""), {'field_name': cfield['name'], 'field_type': cfield['type'], 'valid_types': _VALID_CFIELD_TYPES}) }}} This should result in something like: {{{ type of fileld some_date is 'date' but must be one of: ['text', 'checkbox', 'select', 'radio', 'textarea'] }}} By the way the actual error was caused during our upgrade by the fact that `DateFieldPlugin` uses a different way to represent date fields now. Formerly it was: {{{ [ticket-custom] some_date: date }}} Now it has to be: {{{ [ticket-custom] some_date: text some_date.date = true }}} As this might be a common case, an additional check for deprecated date fields might be helpful: {{{ #!python _VALID_CFIELD_TYPES = ['text', 'checkbox', 'select', 'radio', 'textarea'] if cfield['type'] == 'date': raise TracError(_(""date field %(field_name)s must be migrated to new syntax in trac.ini, "" + \ ""section [ticket-custom]: '%(field_name)s=text' and '%(field_name)s.date=true'""), {'field_name': cfield['name']}) }}} This would yield: {{{ date field some_date must be migrated to new syntax in trac.ini, section [ticket-custom]: 'some_date=text' and 'some_date.date=true' }}}",defect,closed,normal,CustomFieldAdminPlugin,normal,worksforme,,,0.12