From 9fd0f3088ffcfbd99fa71c7b6d0d795e8a10a79f Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Fri, 18 Sep 2020 18:30:22 +0800 Subject: [PATCH] db: IModel: add GetI18N() method --- pkg/cloudcommon/db/db_dispatcher.go | 17 ++++++++++++++--- pkg/cloudcommon/db/interface.go | 1 + pkg/cloudcommon/db/modelbase.go | 4 ++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 807e955418..fe83f02bab 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -350,7 +350,7 @@ func Query2List(manager IModelManager, ctx context.Context, userCred mcclient.To } else { showDetails = true } - items := make([]interface{}, 0) + var items []interface{} extraResults := make([]*jsonutils.JSONDict, 0) rows, err := q.Rows() if err != nil && err != sql.ErrNoRows { @@ -405,7 +405,7 @@ func Query2List(manager IModelManager, ctx context.Context, userCred mcclient.To items = append(items, item) } - results := make([]jsonutils.JSONObject, len(items)) + results := make([]*jsonutils.JSONDict, len(items)) if showDetails || len(exportKeys) > 0 { var sortedListFields stringutils2.SSortedStrings if len(exportKeys) > 0 { @@ -445,7 +445,18 @@ func Query2List(manager IModelManager, ctx context.Context, userCred mcclient.To results[i] = jsonDict } } - return results, nil + for i := range items { + i18nDict := items[i].(IModel).GetI18N(ctx) + if i18nDict != nil { + jsonDict := results[i] + jsonDict.Set("_i18n", i18nDict) + } + } + r := make([]jsonutils.JSONObject, len(items)) + for i := range results { + r[i] = results[i] + } + return r, nil } func fetchContextObjectsIds(manager IModelManager, ctx context.Context, userCred mcclient.TokenCredential, ctxIds []dispatcher.SResourceContext, queryDict *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { diff --git a/pkg/cloudcommon/db/interface.go b/pkg/cloudcommon/db/interface.go index fe2a8fa2db..5324205a0b 100644 --- a/pkg/cloudcommon/db/interface.go +++ b/pkg/cloudcommon/db/interface.go @@ -196,6 +196,7 @@ type IModel interface { MarkDeletePreventionOff() GetUsages() []IUsage + GetI18N(ctx context.Context) *jsonutils.JSONDict } type IResourceModelManager interface { diff --git a/pkg/cloudcommon/db/modelbase.go b/pkg/cloudcommon/db/modelbase.go index 46ecbff525..75cd5f17eb 100644 --- a/pkg/cloudcommon/db/modelbase.go +++ b/pkg/cloudcommon/db/modelbase.go @@ -596,3 +596,7 @@ func (model *SModelBase) DeleteInContext(ctx context.Context, userCred mcclient. func (model *SModelBase) GetUsages() []IUsage { return nil } + +func (model *SModelBase) GetI18N(ctx context.Context) *jsonutils.JSONDict { + return nil +}