-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
197 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
"""API endoipoints for app networks. | ||
/networks/ returns list of top networks. | ||
""" | ||
|
||
from typing import Self | ||
|
||
from litestar import Controller, get | ||
from litestar.exceptions import NotFoundException | ||
|
||
from api_app.models import NetworkApps, TopNetworks | ||
from config import get_logger | ||
from dbcon.queries import get_apps_for_network, get_top_networks | ||
|
||
logger = get_logger(__name__) | ||
|
||
|
||
def networks_overview() -> TopNetworks: | ||
"""Process networks and return TopNetworks class.""" | ||
df = get_top_networks() | ||
df = df[~df["network_name"].isna()] | ||
df = df.sort_values("app_count", ascending=False) | ||
networks = TopNetworks(networks=df.to_dict(orient="records")) | ||
return networks | ||
|
||
|
||
class NetworksController(Controller): | ||
|
||
"""API EndPoint return for app networks.""" | ||
|
||
path = "/api/networks/" | ||
|
||
@get(path="/", cache=True) | ||
async def top_networks(self: Self) -> TopNetworks: | ||
"""Handle GET request for a list of top networks. | ||
Returns | ||
------- | ||
A dictionary representation of the list of networks | ||
each with an id, name, type and total of apps. | ||
""" | ||
logger.info(f"{self.path} start") | ||
overview = networks_overview() | ||
|
||
return overview | ||
|
||
@get(path="/{network_name:str}", cache=3600) | ||
async def get_network_apps(self: Self, network_name: str) -> NetworkApps: | ||
"""Handle GET request for a specific network. | ||
Args: | ||
---- | ||
network_name (str): The name of the network to retrieve apps for. | ||
Returns: | ||
------- | ||
json | ||
""" | ||
logger.info(f"{self.path} start") | ||
apps_df = get_apps_for_network(network_name) | ||
|
||
if apps_df.empty: | ||
msg = f"Network Name not found: {network_name!r}" | ||
raise NotFoundException( | ||
msg, | ||
status_code=404, | ||
) | ||
apps_dict = apps_df.to_dict(orient="records") | ||
|
||
apps = NetworkApps( | ||
title=network_name, | ||
apps=apps_dict, | ||
) | ||
return apps |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
SELECT * | ||
FROM | ||
store_apps | ||
WHERE | ||
id IN | ||
( | ||
SELECT sat.store_app | ||
FROM | ||
store_apps_networks AS sat | ||
LEFT JOIN networks AS t | ||
ON | ||
sat.network = t.id | ||
WHERE | ||
t.name = :network_name | ||
) | ||
ORDER BY installs DESC | ||
LIMIT :mylimit; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
WITH | ||
network_counts AS ( | ||
SELECT | ||
network, | ||
count(DISTINCT store_app) AS app_count | ||
FROM | ||
store_apps_networks | ||
GROUP BY | ||
network | ||
), | ||
|
||
total_app_count AS ( | ||
SELECT count(DISTINCT store_app) | ||
FROM | ||
store_apps_networks | ||
) | ||
|
||
SELECT | ||
t.name AS network_name, | ||
tc.app_count, | ||
total_app_count.count AS total_app_count, | ||
( | ||
tc.app_count / total_app_count.count::decimal | ||
) AS percent | ||
FROM | ||
network_counts AS tc | ||
LEFT JOIN networks AS t | ||
ON | ||
tc.network = t.id | ||
INNER JOIN total_app_count ON | ||
TRUE; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters