Skip to content

Commit

Permalink
Merge pull request #126 from ImMin5/master
Browse files Browse the repository at this point in the history
Modify cost_query_set apis
  • Loading branch information
ImMin5 authored Jan 2, 2024
2 parents 9d49114 + 8884ceb commit 4494dea
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 50 deletions.
33 changes: 21 additions & 12 deletions src/spaceone/cost_analysis/manager/cost_query_set_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.cost_query_set_model: CostQuerySet = self.locator.get_model("CostQuerySet")

def create_cost_query_set(self, params):
def _rollback(cost_query_set_vo):
def create_cost_query_set(self, params: dict):
def _rollback(vo: CostQuerySet):
_LOGGER.info(
f"[create_cost_query_set._rollback] "
f"Delete cost_query_set : {cost_query_set_vo.name} "
f"({cost_query_set_vo.cost_query_set_id})"
f"({vo.cost_query_set_id})"
)
cost_query_set_vo.delete()
vo.delete()

cost_query_set_vo: CostQuerySet = self.cost_query_set_model.create(params)
self.transaction.add_rollback(_rollback, cost_query_set_vo)
Expand All @@ -42,16 +42,25 @@ def _rollback(old_data):
self.transaction.add_rollback(_rollback, cost_query_set_vo.to_dict())
return cost_query_set_vo.update(params)

def delete_cost_query_set(self, cost_query_set_id, domain_id):
cost_query_set_vo: CostQuerySet = self.get_cost_query_set(
cost_query_set_id, domain_id
)
@staticmethod
def delete_cost_query_set_by_vo(cost_query_set_vo: CostQuerySet) -> None:
cost_query_set_vo.delete()

def get_cost_query_set(self, cost_query_set_id, user_id, domain_id):
return self.cost_query_set_model.get(
cost_query_set_id=cost_query_set_id, user_id=user_id, domain_id=domain_id
)
def get_cost_query_set(
self,
cost_query_set_id: str,
user_id: str,
domain_id: str,
workspace_id: str = None,
) -> CostQuerySet:
conditions = {
"cost_query_set_id": cost_query_set_id,
"user_id": user_id,
"domain_id": domain_id,
}
if workspace_id:
conditions["workspace_id"] = workspace_id
return self.cost_query_set_model.get(**conditions)

def list_cost_query_sets(self, query={}):
return self.cost_query_set_model.query(**query)
Expand Down
31 changes: 11 additions & 20 deletions src/spaceone/cost_analysis/model/cost_query_set_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,26 @@


class CostQuerySet(MongoModel):
cost_query_set_id = StringField(max_length=40, generate_id='query', unique=True)
cost_query_set_id = StringField(max_length=40, generate_id="query", unique=True)
name = StringField(max_length=255)
options = DictField(default={})
tags = DictField(default={})
user_id = StringField(max_length=40)
data_source_id = StringField(max_length=40)
workspace_id = StringField(max_length=40, default=None, null=True)
domain_id = StringField(max_length=40)
created_at = DateTimeField(auto_now_add=True)
updated_at = DateTimeField(auto_now=True)

meta = {
'updatable_fields': [
'name',
'options',
'tags'
"updatable_fields": ["name", "options", "tags"],
"minimal_fields": [
"cost_query_set_id",
"name",
"user_id",
"data_source_id",
"workspace_id",
],
'minimal_fields': [
'cost_query_set_id',
'name',
'user_id',
'data_source_id'
],
'ordering': [
'name'
],
'indexes': [
'name',
'user_id',
'data_source_id',
'domain_id'
]
"ordering": ["name"],
"indexes": ["name", "user_id", "data_source_id", "domain_id"],
}
54 changes: 36 additions & 18 deletions src/spaceone/cost_analysis/service/cost_query_set_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def __init__(self, *args, **kwargs):

@transaction(
permission="cost-analysis:CostQuerySet.write",
role_types=["WORKSPACE_OWNER", "WORKSPACE_MEMBER"],
role_types=["USER"],
)
@check_required(["data_source_id", "name", "options", "user_id", "domain_id"])
@change_date_value(["start", "end"])
Expand All @@ -36,6 +36,7 @@ def create(self, params):
'options': 'str',
'tags': 'dict',
'user_id': 'str', # injected from auth
'workspace_id': 'str', # injected from auth (optional)
'domain_id': 'str' # injected from auth
}
Expand All @@ -51,7 +52,7 @@ def create(self, params):
)
@check_required(["cost_query_set_id", "user_id", "domain_id"])
@change_date_value(["end"])
def update(self, params):
def update(self, params: dict):
"""Update cost_query_set
Args:
Expand All @@ -60,8 +61,9 @@ def update(self, params):
'name': 'str',
'options': 'dict',
'tags': 'dict'
'user_id': 'str',
'domain_id': 'str'
'user_id': 'str', # injected from auth
'workspace_id': 'str', # injected from auth (optional)
'domain_id': 'str' # injected from auth
}
Returns:
Expand All @@ -70,9 +72,10 @@ def update(self, params):
cost_query_set_id = params["cost_query_set_id"]
user_id = params["user_id"]
domain_id = params["domain_id"]
workspace_id = params.get("workspace_id")

cost_query_set_vo: CostQuerySet = self.cost_query_set_mgr.get_cost_query_set(
cost_query_set_id, user_id, domain_id
cost_query_set_id, user_id, domain_id, workspace_id
)

return self.cost_query_set_mgr.update_cost_query_set_by_vo(
Expand All @@ -83,8 +86,8 @@ def update(self, params):
permission="cost-analysis:CostQuerySet.write",
role_types=["USER"],
)
@check_required(["cost_query_set_id", "domain_id"])
def delete(self, params):
@check_required(["cost_query_set_id", "user_id", "domain_id"])
def delete(self, params: dict):
"""Deregister cost_query_set
Args:
Expand All @@ -97,16 +100,21 @@ def delete(self, params):
None
"""

self.cost_query_set_mgr.delete_cost_query_set(
params["cost_query_set_id"], params["domain_id"]
cost_query_set_vo = self.cost_query_set_mgr.get_cost_query_set(
params["cost_query_set_id"],
params["user_id"],
params["domain_id"],
params.get("workspace_id"),
)

self.cost_query_set_mgr.delete_cost_query_set_by_vo(cost_query_set_vo)

@transaction(
permission="cost-analysis:CostQuerySet.read",
role_types=["USER"],
)
@check_required(["cost_query_set_id", "user_id", "domain_id"])
def get(self, params):
def get(self, params: dict):
"""Get cost_query_set
Args:
Expand All @@ -123,31 +131,41 @@ def get(self, params):
cost_query_set_id = params["cost_query_set_id"]
user_id = params["user_id"]
domain_id = params["domain_id"]
workspace_id = params.get("workspace_id")

return self.cost_query_set_mgr.get_cost_query_set(
cost_query_set_id, user_id, domain_id
cost_query_set_id, user_id, domain_id, workspace_id
)

@transaction(
permission="cost-analysis:CostQuerySet.read",
role_types=["USER"],
)
@check_required(["data_source_id", "domain_id"])
@check_required(["data_source_id", "user_id", "domain_id"])
@append_query_filter(
["data_source_id", "cost_query_set_id", "name", "user_id", "domain_id"]
[
"data_source_id",
"cost_query_set_id",
"name",
"user_id",
"workspace_id",
"domain_id",
]
)
@append_keyword_filter(["cost_query_set_id", "name"])
def list(self, params):
def list(self, params: dict):
"""List cost_query_sets
Args:
params (dict): {
'query': 'dict (spaceone.api.core.v2.Query)'
'data_source_id': 'str',
'cost_query_set_id': 'str',
'name': 'str',
'user_id': 'str',
'domain_id': 'str',
'query': 'dict (spaceone.api.core.v1.Query)'
'user_id': 'str', # injected from auth
'workspace_id': 'str', # injected from auth (optional)
'domain_id': 'str', # injected from auth
}
Returns:
Expand All @@ -165,7 +183,7 @@ def list(self, params):
@check_required(["query", "data_source_id", "domain_id"])
@append_query_filter(["data_source_id", "domain_id"])
@append_keyword_filter(["cost_query_set_id", "name"])
def stat(self, params):
def stat(self, params: dict):
"""
Args:
params (dict): {
Expand Down

0 comments on commit 4494dea

Please sign in to comment.