2026-08-08 01:29:43 +02:00
|
|
|
{
|
|
|
|
|
"version": "7.2",
|
|
|
|
|
"module": "ir",
|
|
|
|
|
"files": [
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "action.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "ActionActWindowView",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 962,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "not_null_action",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_action_act_window_view"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 968,
|
|
|
|
|
"args": [
|
|
|
|
|
"'sequence'",
|
|
|
|
|
"'remove'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table.not_null_action('sequence', 'remove')",
|
|
|
|
|
"phase": "after_super"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "action.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "ActionActWindowDomain",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 1011,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "not_null_action",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_action_act_window_domain"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 1017,
|
|
|
|
|
"args": [
|
|
|
|
|
"'sequence'",
|
|
|
|
|
"'remove'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table.not_null_action('sequence', 'remove')",
|
|
|
|
|
"phase": "after_super"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "cron.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "Cron",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 92,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "not_null_action",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_cron"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 103,
|
|
|
|
|
"args": [
|
|
|
|
|
"'next_call'",
|
|
|
|
|
"'remove'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.not_null_action('next_call', 'remove')",
|
|
|
|
|
"phase": "after_super"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "export.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "Export",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 56,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "cursor",
|
|
|
|
|
"operation": "execute",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_export"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 67,
|
|
|
|
|
"args": [
|
|
|
|
|
"*table.update([table.user], [table.create_uid])"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "(Transaction().connection.cursor()).execute(*table.update([table.user], [table.create_uid]))",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "not user_exists"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "update",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_export"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 67,
|
|
|
|
|
"args": [
|
|
|
|
|
"[table.user]",
|
|
|
|
|
"[table.create_uid]"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table.update([table.user], [table.create_uid])",
|
|
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "not user_exists"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "model.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "ModelField",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 297,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "column_rename",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 309,
|
|
|
|
|
"args": [
|
|
|
|
|
"'model'",
|
|
|
|
|
"'_temp_model'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.column_rename('model', '_temp_model')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "add_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 310,
|
|
|
|
|
"args": [
|
|
|
|
|
"'model'",
|
|
|
|
|
"'VARCHAR'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.add_column('model', 'VARCHAR')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "cursor",
|
|
|
|
|
"operation": "execute",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 311,
|
|
|
|
|
"args": [
|
|
|
|
|
"*table.update([table.model], [model.model], from_=[model], where=table._temp_model == model.id)"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "(transaction.connection.cursor()).execute(*table.update(\n [table.model], [model.model],\n from_=[model],\n where=table._temp_model == model.id))",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "update",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 311,
|
|
|
|
|
"args": [
|
|
|
|
|
"[table.model]",
|
|
|
|
|
"[model.model]"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {
|
|
|
|
|
"from_": "[model]",
|
|
|
|
|
"where": "table._temp_model == model.id"
|
|
|
|
|
},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "table.update(\n [table.model], [model.model],\n from_=[model],\n where=table._temp_model == model.id)",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "drop_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 315,
|
|
|
|
|
"args": [
|
|
|
|
|
"'_temp_model'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.drop_column('_temp_model')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "model.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "ModelAccess",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 531,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "column_rename",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 543,
|
|
|
|
|
"args": [
|
|
|
|
|
"'model'",
|
|
|
|
|
"'_temp_model'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.column_rename('model', '_temp_model')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "add_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 544,
|
|
|
|
|
"args": [
|
|
|
|
|
"'model'",
|
|
|
|
|
"'VARCHAR'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.add_column('model', 'VARCHAR')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "cursor",
|
|
|
|
|
"operation": "execute",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 545,
|
|
|
|
|
"args": [
|
|
|
|
|
"*table.update([table.model], [model.model], from_=[model], where=table._temp_model == model.id)"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "(transaction.connection.cursor()).execute(*table.update(\n [table.model], [model.model],\n from_=[model],\n where=table._temp_model == model.id))",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "update",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 545,
|
|
|
|
|
"args": [
|
|
|
|
|
"[table.model]",
|
|
|
|
|
"[model.model]"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {
|
|
|
|
|
"from_": "[model]",
|
|
|
|
|
"where": "table._temp_model == model.id"
|
|
|
|
|
},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "table.update(\n [table.model], [model.model],\n from_=[model],\n where=table._temp_model == model.id)",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "drop_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 549,
|
|
|
|
|
"args": [
|
|
|
|
|
"'_temp_model'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.drop_column('_temp_model')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "model.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "ModelFieldAccess",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 786,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "column_rename",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 798,
|
|
|
|
|
"args": [
|
|
|
|
|
"'field'",
|
|
|
|
|
"'_temp_field'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.column_rename('field', '_temp_field')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('field') and table_h.column_is_type('field', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "add_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 799,
|
|
|
|
|
"args": [
|
|
|
|
|
"'model'",
|
|
|
|
|
"'VARCHAR'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.add_column('model', 'VARCHAR')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('field') and table_h.column_is_type('field', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "add_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 800,
|
|
|
|
|
"args": [
|
|
|
|
|
"'field'",
|
|
|
|
|
"'VARCHAR'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.add_column('field', 'VARCHAR')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('field') and table_h.column_is_type('field', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "cursor",
|
|
|
|
|
"operation": "execute",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 801,
|
|
|
|
|
"args": [
|
|
|
|
|
"*table.update([table.model, table.field], [field.model, field.name], from_=[field], where=table._temp_field == field.id)"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "(transaction.connection.cursor()).execute(*table.update(\n [table.model, table.field],\n [field.model, field.name],\n from_=[field],\n where=table._temp_field == field.id))",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('field') and table_h.column_is_type('field', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "update",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 801,
|
|
|
|
|
"args": [
|
|
|
|
|
"[table.model, table.field]",
|
|
|
|
|
"[field.model, field.name]"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {
|
|
|
|
|
"from_": "[field]",
|
|
|
|
|
"where": "table._temp_field == field.id"
|
|
|
|
|
},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "table.update(\n [table.model, table.field],\n [field.model, field.name],\n from_=[field],\n where=table._temp_field == field.id)",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('field') and table_h.column_is_type('field', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "drop_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_field_access"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 806,
|
|
|
|
|
"args": [
|
|
|
|
|
"'_temp_field'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.drop_column('_temp_field')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('field') and table_h.column_is_type('field', 'INTEGER')"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "model.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "ModelButton",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 985,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "column_rename",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_button"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 997,
|
|
|
|
|
"args": [
|
|
|
|
|
"'model'",
|
|
|
|
|
"'_temp_model'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.column_rename('model', '_temp_model')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "add_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_button"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 998,
|
|
|
|
|
"args": [
|
|
|
|
|
"'model'",
|
|
|
|
|
"'VARCHAR'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.add_column('model', 'VARCHAR')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "cursor",
|
|
|
|
|
"operation": "execute",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_button"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 999,
|
|
|
|
|
"args": [
|
|
|
|
|
"*table.update([table.model], [model.model], from_=[model], where=table._temp_model == model.id)"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "(transaction.connection.cursor()).execute(*table.update(\n [table.model], [model.model],\n from_=[model],\n where=table._temp_model == model.id))",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "update",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_button"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 999,
|
|
|
|
|
"args": [
|
|
|
|
|
"[table.model]",
|
|
|
|
|
"[model.model]"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {
|
|
|
|
|
"from_": "[model]",
|
|
|
|
|
"where": "table._temp_model == model.id"
|
|
|
|
|
},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "table.update(\n [table.model], [model.model],\n from_=[model],\n where=table._temp_model == model.id)",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "drop_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_button"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 1003,
|
|
|
|
|
"args": [
|
|
|
|
|
"'_temp_model'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.drop_column('_temp_model')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "drop_constraint",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_button"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 1008,
|
|
|
|
|
"args": [
|
|
|
|
|
"'name_model_uniq'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.drop_constraint('name_model_uniq')",
|
|
|
|
|
"phase": "after_super"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "model.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "ModelData",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 1340,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "not_null_action",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model_data"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 1346,
|
|
|
|
|
"args": [
|
|
|
|
|
"'db_id'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {
|
|
|
|
|
"action": "'remove'"
|
|
|
|
|
},
|
|
|
|
|
"code": "table_h.not_null_action('db_id', action='remove')",
|
|
|
|
|
"phase": "after_super"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "module.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "ModuleConfigWizardItem",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 323,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "not_null_action",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_module_config_wizard_item"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 329,
|
|
|
|
|
"args": [
|
|
|
|
|
"'sequence'",
|
|
|
|
|
"'remove'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table.not_null_action('sequence', 'remove')",
|
|
|
|
|
"phase": "after_super"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "rule.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "RuleGroup",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 84,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "column_rename",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_rule_group"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 96,
|
|
|
|
|
"args": [
|
|
|
|
|
"'model'",
|
|
|
|
|
"'_temp_model'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.column_rename('model', '_temp_model')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "add_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_rule_group"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 97,
|
|
|
|
|
"args": [
|
|
|
|
|
"'model'",
|
|
|
|
|
"'VARCHAR'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.add_column('model', 'VARCHAR')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "cursor",
|
|
|
|
|
"operation": "execute",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_rule_group"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 98,
|
|
|
|
|
"args": [
|
|
|
|
|
"*table.update([table.model], [model.model], from_=[model], where=table._temp_model == model.id)"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "(transaction.connection.cursor()).execute(*table.update(\n [table.model], [model.model],\n from_=[model],\n where=table._temp_model == model.id))",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "update",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_rule_group"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 98,
|
|
|
|
|
"args": [
|
|
|
|
|
"[table.model]",
|
|
|
|
|
"[model.model]"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {
|
|
|
|
|
"from_": "[model]",
|
|
|
|
|
"where": "table._temp_model == model.id"
|
|
|
|
|
},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "table.update(\n [table.model], [model.model],\n from_=[model],\n where=table._temp_model == model.id)",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "drop_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_rule_group"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 102,
|
|
|
|
|
"args": [
|
|
|
|
|
"'_temp_model'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.drop_column('_temp_model')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table_h.column_exist('model') and table_h.column_is_type('model', 'INTEGER')"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "sequence.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "SequenceType",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 41,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "not_null_action",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_sequence_type"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 47,
|
|
|
|
|
"args": [
|
|
|
|
|
"'code'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {
|
|
|
|
|
"action": "'remove'"
|
|
|
|
|
},
|
|
|
|
|
"code": "table_h.not_null_action('code', action='remove')",
|
|
|
|
|
"phase": "after_super"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "sequence.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "Sequence",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 122,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "cursor",
|
|
|
|
|
"operation": "execute",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_sequence",
|
|
|
|
|
"ir_sequence_type"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 135,
|
|
|
|
|
"args": [
|
|
|
|
|
"*table.update([table.sequence_type], sequence_type.select(sequence_type.id, where=sequence_type.code == table.code))"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "(Transaction().connection.cursor()).execute(*table.update(\n [table.sequence_type],\n sequence_type.select(\n sequence_type.id,\n where=sequence_type.code == table.code)))",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "table_h.column_exist('code')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "update",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_sequence",
|
|
|
|
|
"ir_sequence_type"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 135,
|
|
|
|
|
"args": [
|
|
|
|
|
"[table.sequence_type]",
|
|
|
|
|
"sequence_type.select(sequence_type.id, where=sequence_type.code == table.code)"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "table.update(\n [table.sequence_type],\n sequence_type.select(\n sequence_type.id,\n where=sequence_type.code == table.code))",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "table_h.column_exist('code')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "sequence_type",
|
|
|
|
|
"operation": "select",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_sequence_type"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 137,
|
|
|
|
|
"args": [
|
|
|
|
|
"sequence_type.id"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {
|
|
|
|
|
"where": "sequence_type.code == table.code"
|
|
|
|
|
},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "sequence_type.select(\n sequence_type.id,\n where=sequence_type.code == table.code)",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "table_h.column_exist('code')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "drop_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_sequence"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 140,
|
|
|
|
|
"args": [
|
|
|
|
|
"'code'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.drop_column('code')",
|
|
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "table_h.column_exist('code')"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "translation.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "Translation",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 122,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "drop_constraint",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_translation"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 127,
|
|
|
|
|
"args": [
|
|
|
|
|
"'translation_md5_uniq'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table.drop_constraint('translation_md5_uniq')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table.column_exist('src_md5')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "drop_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_translation"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 128,
|
|
|
|
|
"args": [
|
|
|
|
|
"'src_md5'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table.drop_column('src_md5')",
|
|
|
|
|
"phase": "before_super",
|
|
|
|
|
"condition": "table.column_exist('src_md5')"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "trigger.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "Trigger",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 79,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "model",
|
|
|
|
|
"operation": "select",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_model"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 92,
|
|
|
|
|
"args": [
|
|
|
|
|
"model.model"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {
|
|
|
|
|
"where": "model.id == sql_table.action_model"
|
|
|
|
|
},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "model.select(\n model.model, where=model.id == sql_table.(model.select(\n model.model, where=model.id == sql_table.action_model)))",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "table_h.column_exist('action_model') and table_h.column_exist('action_function')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "cursor",
|
|
|
|
|
"operation": "execute",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_trigger"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 94,
|
|
|
|
|
"args": [
|
|
|
|
|
"*sql_table.update([sql_table.action], [Concat(action_model, Concat('|', sql_table.action_function))])"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "(Transaction().connection.cursor()).execute(*sql_table.update(\n [sql_table.action],\n [Concat((model.select(\n model.model, where=model.id == sql_table.action_model)), Concat(\n '|', sql_table.action_function))]))",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "table_h.column_exist('action_model') and table_h.column_exist('action_function')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "sql_table",
|
|
|
|
|
"operation": "update",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_trigger"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 94,
|
|
|
|
|
"args": [
|
|
|
|
|
"[sql_table.action]",
|
|
|
|
|
"[Concat(action_model, Concat('|', sql_table.action_function))]"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "sql_table.update(\n [sql_table.action],\n [Concat((model.select(\n model.model, where=model.id == sql_table.action_model)), Concat(\n '|', sql_table.action_function))])",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "table_h.column_exist('action_model') and table_h.column_exist('action_function')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "drop_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_trigger"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 98,
|
|
|
|
|
"args": [
|
|
|
|
|
"'action_model'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
2026-08-09 00:47:23 +02:00
|
|
|
"code": "table_h.drop_column('(model.select(\n model.model, where=model.id == sql_table.action_model))')",
|
2026-08-08 01:29:43 +02:00
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "table_h.column_exist('action_model') and table_h.column_exist('action_function')"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "drop_column",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_trigger"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 99,
|
|
|
|
|
"args": [
|
|
|
|
|
"'action_function'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.drop_column('action_function')",
|
|
|
|
|
"phase": "after_super",
|
|
|
|
|
"condition": "table_h.column_exist('action_model') and table_h.column_exist('action_function')"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "ui/icon.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "Icon",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 35,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table",
|
|
|
|
|
"operation": "not_null_action",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_ui_icon"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 41,
|
|
|
|
|
"args": [
|
|
|
|
|
"'sequence'",
|
|
|
|
|
"'remove'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table.not_null_action('sequence', 'remove')",
|
|
|
|
|
"phase": "after_super"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
2026-08-09 02:04:04 +02:00
|
|
|
"module": "ir",
|
|
|
|
|
"file": "ui/view.py",
|
2026-08-08 01:29:43 +02:00
|
|
|
"class": "ViewSearch",
|
|
|
|
|
"method": "__register__",
|
|
|
|
|
"line": 708,
|
|
|
|
|
"operations": [
|
|
|
|
|
{
|
|
|
|
|
"object": "table_h",
|
|
|
|
|
"operation": "not_null_action",
|
2026-08-08 22:32:31 +02:00
|
|
|
"tables": [
|
|
|
|
|
"ir_ui_view_search"
|
|
|
|
|
],
|
2026-08-08 01:29:43 +02:00
|
|
|
"line": 713,
|
|
|
|
|
"args": [
|
|
|
|
|
"'user'",
|
|
|
|
|
"'remove'"
|
|
|
|
|
],
|
|
|
|
|
"kwargs": {},
|
|
|
|
|
"code": "table_h.not_null_action('user', 'remove')",
|
|
|
|
|
"phase": "after_super"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|