Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
trends_dashboard
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
suryakant
trends_dashboard
Commits
de578ed5
Commit
de578ed5
authored
Mar 06, 2024
by
suryakant
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Trends Dashboard
parent
78c28285
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
90 additions
and
123 deletions
+90
-123
scripts/core/db/postgres/psql_query.py
scripts/core/db/postgres/psql_query.py
+35
-41
scripts/core/handler/trends_handler.py
scripts/core/handler/trends_handler.py
+52
-80
scripts/core/schemas/api/trends_schema.py
scripts/core/schemas/api/trends_schema.py
+3
-1
scripts/core/service/trends_service.py
scripts/core/service/trends_service.py
+0
-1
No files found.
scripts/core/db/postgres/psql_query.py
View file @
de578ed5
from
scripts.constants
import
Constants
from
scripts.constants
import
Constants
from
scripts.configurations
import
postgres_details
from
sqlalchemy
import
select
from
sqlalchemy
import
select
,
and_
,
cast
,
Text
def
get_
unique_
departments
(
table
):
def
get_departments
(
table
):
return
select
(
return
select
(
table
.
department
.
label
(
Constants
.
DATA
)
table
.
department
)
.
distinct
()
)
.
distinct
()
...
@@ -15,8 +14,9 @@ def get_filter_query(
...
@@ -15,8 +14,9 @@ def get_filter_query(
table
=
None
table
=
None
):
):
query
=
None
query
=
None
clause
=
None
if
current_level
and
current_level
==
0
:
if
current_level
==
0
:
query
=
f
"""
query
=
f
"""
SELECT
SELECT
DISTINCT FUNCTION
DISTINCT FUNCTION
...
@@ -28,7 +28,7 @@ def get_filter_query(
...
@@ -28,7 +28,7 @@ def get_filter_query(
FUNCTION
FUNCTION
"""
"""
elif
current_level
and
current_level
==
1
:
elif
current_level
==
1
:
query
=
f
"""
query
=
f
"""
SELECT
SELECT
DISTINCT FORM
DISTINCT FORM
...
@@ -41,19 +41,24 @@ def get_filter_query(
...
@@ -41,19 +41,24 @@ def get_filter_query(
FORM
FORM
"""
"""
elif
current_level
and
current_level
>=
2
:
elif
current_level
>=
2
:
current_level
-=
1
current_level
-=
1
where_clause
=
""
where_clause
=
""
if
current_level
>=
2
:
if
current_level
>=
2
:
where_clause
=
f
"""
query_parts
=
[]
AND FILTER ->> 'l{current_level - 1}-value' = '{filter_value}'
for
index
,
data
in
filter_value
.
items
():
"""
key
,
value
=
list
(
data
.
items
())[
0
]
query_parts
.
append
(
f
"AND FILTER ->> 'l{int(index) + 1}-name' = '{key}'"
)
query_parts
.
append
(
f
"AND FILTER ->> 'l{int(index) + 1}-value' = '{value}'"
)
where_clause
=
"
\n
"
.
join
(
query_parts
)
query
=
f
"""
query
=
f
"""
SELECT
SELECT
DISTINCT (FILTER -
>> 'l{current_level}-name') AS L{current_level}_NAME,
DISTINCT (FILTER ->> 'l{current_level}-name') AS L{current_level}_NAME,
(FILTER -
>> 'l{current_level}-value') AS L{current_level}_VALUE
(FILTER ->> 'l{current_level}-value') AS L{current_level}_VALUE
FROM
FROM
{table}
{table}
WHERE
WHERE
...
@@ -64,35 +69,24 @@ def get_filter_query(
...
@@ -64,35 +69,24 @@ def get_filter_query(
ORDER BY
ORDER BY
L{current_level}_NAME
L{current_level}_NAME
"""
"""
clause
=
f
"""
WHERE
DEPARTMENT='{department}'
AND FUNCTION='{function}'
AND FORM='{form}'
{where_clause}
"""
return
query
return
query
,
clause
def
get_unique_function
(
table
,
department
):
return
select
(
table
.
function
.
label
(
Constants
.
DATA
)
)
.
distinct
()
.
where
(
table
.
department
==
department
)
def
get_unique_form
(
table
,
department
,
function
):
return
select
(
table
.
form
.
label
(
Constants
.
DATA
)
)
.
distinct
()
.
where
(
and_
(
table
.
department
==
department
,
table
.
function
==
function
))
def
get_
unique_filters
(
table
,
department
,
function
,
form
):
def
get_
parameters
(
where_clause
):
return
select
(
return
f
"""
cast
(
table
.
filter
,
Text
)
.
label
(
Constants
.
DATA
)
SELECT
)
.
distinct
()
.
where
(
DISTINCT PARAMETER
and_
(
FROM
table
.
department
==
department
,
PUBLIC.TRENDS_MASTER_TBL_
table
.
function
==
function
,
{where_clause}
table
.
form
==
form
ORDER BY
)
PARAMETER
)
"""
scripts/core/handler/trends_handler.py
View file @
de578ed5
...
@@ -5,8 +5,7 @@ from scripts.configurations import postgres_details
...
@@ -5,8 +5,7 @@ from scripts.configurations import postgres_details
from
scripts.constants
import
Constants
from
scripts.constants
import
Constants
from
scripts.core.db.postgres
import
database_init
from
scripts.core.db.postgres
import
database_init
from
scripts.core.db.postgres.psql_query
import
(
from
scripts.core.db.postgres.psql_query
import
(
get_unique_departments
,
get_unique_function
,
get_departments
,
get_parameters
,
get_filter_query
get_unique_form
,
get_unique_filters
,
get_filter_query
)
)
from
scripts.core.schemas.postgres
import
TableObject
from
scripts.core.schemas.postgres
import
TableObject
from
scripts.core.logging.application_logging
import
logger
from
scripts.core.logging.application_logging
import
logger
...
@@ -21,80 +20,12 @@ class TrendsDashboardHandler:
...
@@ -21,80 +20,12 @@ class TrendsDashboardHandler:
PepsiCo metrics.
PepsiCo metrics.
"""
"""
def
get_trends_metadata_old
(
self
,
request_data
):
"""
get_trends_metadata
"""
filter_flag
=
False
final_metadata_json
=
dict
(
values
=
[]
)
logger
.
info
(
"Database initialization"
)
db_init
=
database_init
()
# Creating table object
trends_master_tbl_obj
=
TableObject
(
db
=
db_init
,
table_name
=
TrendsMasterTable
)
if
request_data
.
department
and
request_data
.
function
and
request_data
.
form
:
filter_flag
=
True
filter_name
=
Constants
.
LINE
filter_query
=
get_unique_filters
(
table
=
TrendsMasterTable
,
department
=
request_data
.
department
,
function
=
request_data
.
function
,
form
=
request_data
.
form
)
elif
request_data
.
department
and
request_data
.
function
:
filter_name
=
Constants
.
FORM
filter_query
=
get_unique_form
(
table
=
TrendsMasterTable
,
department
=
request_data
.
department
,
function
=
request_data
.
function
)
elif
request_data
.
department
:
filter_name
=
Constants
.
FUNCTION
filter_query
=
get_unique_function
(
table
=
TrendsMasterTable
,
department
=
request_data
.
department
)
else
:
filter_name
=
Constants
.
DEPARTMENT
filter_query
=
get_unique_departments
(
table
=
TrendsMasterTable
)
# Getting response from the Trends Master Table
response_data
=
trends_master_tbl_obj
.
execute_query
(
query
=
filter_query
)
if
response_data
and
not
filter_flag
:
final_metadata_json
[
Constants
.
FILTER_NAME
]
=
filter_name
for
each_metadata
in
response_data
:
final_metadata_json
[
Constants
.
VALUES
]
.
append
(
dict
(
key
=
each_metadata
[
Constants
.
DATA
],
label
=
each_metadata
[
Constants
.
DATA
],
)
)
return
final_metadata_json
def
get_trends_metadata
(
self
,
request_data
):
def
get_trends_metadata
(
self
,
request_data
):
"""
"""
get_trends_metadata
get_trends_metadata
"""
"""
final_metadata_json
=
dict
(
final_metadata_json
=
dict
()
values
=
[]
clause
=
None
)
print
(
request_data
)
logger
.
info
(
"Database initialization"
)
logger
.
info
(
"Database initialization"
)
db_init
=
database_init
()
db_init
=
database_init
()
...
@@ -104,17 +35,19 @@ class TrendsDashboardHandler:
...
@@ -104,17 +35,19 @@ class TrendsDashboardHandler:
db
=
db_init
,
table_name
=
TrendsMasterTable
db
=
db_init
,
table_name
=
TrendsMasterTable
)
)
if
request_data
.
current_level
:
if
request_data
.
current_level
or
request_data
.
current_level
==
0
:
filter_query
=
get_filter_query
(
final_metadata_json
[
"current_level"
]
=
request_data
.
current_level
+
1
filter_query
,
clause
=
get_filter_query
(
current_level
=
request_data
.
current_level
,
current_level
=
request_data
.
current_level
,
department
=
request_data
.
department
,
department
=
request_data
.
department
,
function
=
request_data
.
function
,
function
=
request_data
.
function
,
form
=
request_data
.
form
,
form
=
request_data
.
form
,
filter_value
=
None
,
filter_value
=
request_data
.
filter
,
table
=
postgres_details
.
master_tbl
table
=
postgres_details
.
master_tbl
)
)
else
:
else
:
filter_query
=
get_unique_departments
(
final_metadata_json
[
"current_level"
]
=
0
filter_query
=
get_departments
(
table
=
TrendsMasterTable
table
=
TrendsMasterTable
)
)
...
@@ -122,14 +55,28 @@ class TrendsDashboardHandler:
...
@@ -122,14 +55,28 @@ class TrendsDashboardHandler:
response_data
=
trends_master_tbl_obj
.
execute_query
(
response_data
=
trends_master_tbl_obj
.
execute_query
(
query
=
filter_query
query
=
filter_query
)
)
parameter_flag
=
False
if
response_data
:
if
response_data
:
for
each_metadata
in
response_data
:
final_metadata_json
,
parameter_flag
=
self
.
get_response_data
(
response_data
=
response_data
,
final_metadata_json
=
final_metadata_json
,
parameter_flag
=
parameter_flag
)
# Create a JSON for UI
if
parameter_flag
:
print
(
each_metadata
)
filter_query
=
get_parameters
(
where_clause
=
clause
)
# Getting response from the Trends Master Table
response_data
=
trends_master_tbl_obj
.
execute_query
(
query
=
filter_query
)
if
response_data
:
final_metadata_json
,
parameter_flag
=
self
.
get_response_data
(
response_data
=
response_data
,
final_metadata_json
=
final_metadata_json
,
parameter_flag
=
parameter_flag
)
final_metadata_json
[
Constants
.
FILTER_NAME
]
=
"filter_name"
return
final_metadata_json
return
final_metadata_json
def
get_trends_data
(
self
,
request_data
):
def
get_trends_data
(
self
,
request_data
):
...
@@ -137,3 +84,28 @@ class TrendsDashboardHandler:
...
@@ -137,3 +84,28 @@ class TrendsDashboardHandler:
Docstring
Docstring
"""
"""
return
True
return
True
def
get_response_data
(
self
,
response_data
,
final_metadata_json
,
parameter_flag
):
values
=
[]
for
each_data
in
response_data
:
if
len
(
each_data
)
>
1
:
filter_name
=
list
(
each_data
.
items
())
if
filter_name
[
1
][
1
]:
values
.
append
({
"key"
:
filter_name
[
1
][
1
],
"label"
:
filter_name
[
1
][
1
]
})
else
:
parameter_flag
=
True
break
final_metadata_json
[
"filter_name"
]
=
filter_name
[
0
][
1
]
final_metadata_json
[
"values"
]
=
values
elif
len
(
each_data
)
==
1
:
filter_name
=
list
(
each_data
.
keys
())[
0
]
values
.
append
({
"key"
:
each_data
[
filter_name
],
"label"
:
each_data
[
filter_name
]
})
final_metadata_json
[
"filter_name"
]
=
filter_name
final_metadata_json
[
"values"
]
=
values
return
final_metadata_json
,
parameter_flag
scripts/core/schemas/api/trends_schema.py
View file @
de578ed5
...
@@ -9,12 +9,14 @@ class DashboardFilterInput(BaseModel):
...
@@ -9,12 +9,14 @@ class DashboardFilterInput(BaseModel):
department
:
Optional
[
str
]
=
None
department
:
Optional
[
str
]
=
None
function
:
Optional
[
str
]
=
None
function
:
Optional
[
str
]
=
None
form
:
Optional
[
str
]
=
None
form
:
Optional
[
str
]
=
None
current_level
:
Optional
[
str
]
=
None
current_level
:
Optional
[
int
]
=
None
filter
:
Optional
[
dict
]
=
None
class
DashboardFilterOutput
(
BaseModel
):
class
DashboardFilterOutput
(
BaseModel
):
filter_name
:
str
filter_name
:
str
values
:
list
values
:
list
current_level
:
int
class
DashboardFormInput
(
BaseModel
):
class
DashboardFormInput
(
BaseModel
):
...
...
scripts/core/service/trends_service.py
View file @
de578ed5
...
@@ -56,7 +56,6 @@ async def dashboard_metadata(
...
@@ -56,7 +56,6 @@ async def dashboard_metadata(
"""
"""
try
:
try
:
trends_obj
=
TrendsDashboardHandler
()
trends_obj
=
TrendsDashboardHandler
()
print
(
request_data
)
return
trends_obj
.
get_trends_metadata
(
request_data
=
request_data
)
return
trends_obj
.
get_trends_metadata
(
request_data
=
request_data
)
except
Exception
as
err
:
except
Exception
as
err
:
logger
.
exception
(
logger
.
exception
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment