Skip to content

Commit c397421

Browse files
authored
Merge pull request #3845 from architecture-building-systems/fix-limit-checks
Check limits only if not local
2 parents d173ec3 + 46438cb commit c397421

File tree

2 files changed

+46
-38
lines changed

2 files changed

+46
-38
lines changed

cea/interfaces/dashboard/api/contents.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from cea.interfaces.dashboard.api.project import get_project_choices
2222
from cea.interfaces.dashboard.dependencies import CEAProjectRoot
2323
from cea.interfaces.dashboard.lib.logs import getCEAServerLogger
24-
from cea.interfaces.dashboard.settings import LimitSettings
24+
from cea.interfaces.dashboard.settings import LimitSettings, get_settings
2525
from cea.interfaces.dashboard.utils import secure_path, OutsideProjectRootError
2626

2727
# TODO: Make this configurable
@@ -190,19 +190,21 @@ async def upload_scenario(form: Annotated[UploadScenario, Form()], project_root:
190190
project_name = form.project.strip()
191191
project_path = Path(secure_path(Path(project_root, project_name).resolve()))
192192

193+
settings = get_settings()
193194
limit_settings = LimitSettings()
194-
num_projects = len(await get_project_choices(project_root))
195-
if form.type == "new" and limit_settings.num_projects is not None and limit_settings.num_projects <= num_projects:
196-
raise HTTPException(
197-
status_code=status.HTTP_400_BAD_REQUEST,
198-
detail=f"Maximum number of projects reached ({limit_settings.num_projects}). Number of projects found: {num_projects}",
199-
)
200-
num_scenarios = len(cea.config.get_scenarios_list(str(project_path)))
201-
if limit_settings.num_scenarios is not None and limit_settings.num_scenarios <= num_scenarios:
202-
raise HTTPException(
203-
status_code=status.HTTP_400_BAD_REQUEST,
204-
detail=f"Maximum number of scenarios reached ({limit_settings.num_scenarios}). Number of scenarios found: {num_scenarios}",
195+
if not settings.local:
196+
num_projects = len(await get_project_choices(project_root))
197+
if form.type == "new" and limit_settings.num_projects is not None and limit_settings.num_projects <= num_projects:
198+
raise HTTPException(
199+
status_code=status.HTTP_400_BAD_REQUEST,
200+
detail=f"Maximum number of projects reached ({limit_settings.num_projects}). Number of projects found: {num_projects}",
205201
)
202+
num_scenarios = len(cea.config.get_scenarios_list(str(project_path)))
203+
if limit_settings.num_scenarios is not None and limit_settings.num_scenarios <= num_scenarios:
204+
raise HTTPException(
205+
status_code=status.HTTP_400_BAD_REQUEST,
206+
detail=f"Maximum number of scenarios reached ({limit_settings.num_scenarios}). Number of scenarios found: {num_scenarios}",
207+
)
206208

207209
# Check for existing projects
208210
if form.type == "current" or form.type == "existing":
@@ -299,12 +301,14 @@ def is_gh_export_path(path: str):
299301
detail=f"Scenarios {existing_scenario_names} already exists in project")
300302

301303
# Recheck number of scenarios after extraction
302-
num_scenarios += len(scenario_names)
303-
if limit_settings.num_scenarios is not None and limit_settings.num_scenarios < num_scenarios:
304-
raise HTTPException(
305-
status_code=status.HTTP_400_BAD_REQUEST,
306-
detail=f"Maximum number of scenarios reached ({limit_settings.num_scenarios}). Number of scenarios found: {num_scenarios}",
307-
)
304+
if not settings.local:
305+
num_scenarios = len(cea.config.get_scenarios_list(str(project_path)))
306+
num_scenarios += len(scenario_names)
307+
if limit_settings.num_scenarios is not None and limit_settings.num_scenarios < num_scenarios:
308+
raise HTTPException(
309+
status_code=status.HTTP_400_BAD_REQUEST,
310+
detail=f"Maximum number of scenarios reached ({limit_settings.num_scenarios}). Number of scenarios found: {num_scenarios}",
311+
)
308312

309313

310314
for potential_scenario in potential_scenario_paths:

cea/interfaces/dashboard/api/project.py

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
CEASeverDemoAuthCheck
2828
from cea.interfaces.dashboard.lib.database.session import SessionDep
2929
from cea.interfaces.dashboard.lib.logs import getCEAServerLogger
30-
from cea.interfaces.dashboard.settings import LimitSettings
30+
from cea.interfaces.dashboard.settings import LimitSettings, get_settings
3131
from cea.interfaces.dashboard.utils import secure_path, OutsideProjectRootError
3232
from cea.utilities.dbf import dbf_to_dataframe
3333
from cea.utilities.standardize_coordinates import get_geographic_coordinate_system, raster_to_WSG_and_UTM
@@ -249,13 +249,15 @@ async def create_new_project(project_root: CEAProjectRoot, new_project: NewProje
249249
"""
250250
Create new project folder
251251
"""
252+
settings = get_settings()
252253
limit_settings = LimitSettings()
253-
num_projects = len(await get_project_choices(project_root))
254-
if limit_settings.num_projects is not None and limit_settings.num_projects <= num_projects:
255-
raise HTTPException(
256-
status_code=status.HTTP_400_BAD_REQUEST,
257-
detail=f"Maximum number of projects reached ({limit_settings.num_projects}). Number of projects found: {num_projects}",
258-
)
254+
if not settings.local:
255+
num_projects = len(await get_project_choices(project_root))
256+
if limit_settings.num_projects is not None and limit_settings.num_projects <= num_projects:
257+
raise HTTPException(
258+
status_code=status.HTTP_400_BAD_REQUEST,
259+
detail=f"Maximum number of projects reached ({limit_settings.num_projects}). Number of projects found: {num_projects}",
260+
)
259261

260262
if new_project.project_root is None and project_root is None:
261263
raise HTTPException(
@@ -350,13 +352,15 @@ async def create_new_scenario_v2(project_root: CEAProjectRoot, scenario_form: An
350352
detail=str(e),
351353
)
352354

355+
settings = get_settings()
353356
limit_settings = LimitSettings()
354-
num_scenarios = len(cea.config.get_scenarios_list(cea_project))
355-
if limit_settings.num_scenarios is not None and limit_settings.num_scenarios <= num_scenarios:
356-
raise HTTPException(
357-
status_code=status.HTTP_400_BAD_REQUEST,
358-
detail=f"Maximum number of scenarios reached ({limit_settings.num_scenarios}). Number of scenarios found: {num_scenarios}",
359-
)
357+
if not settings.local:
358+
num_scenarios = len(cea.config.get_scenarios_list(cea_project))
359+
if limit_settings.num_scenarios is not None and limit_settings.num_scenarios <= num_scenarios:
360+
raise HTTPException(
361+
status_code=status.HTTP_400_BAD_REQUEST,
362+
detail=f"Maximum number of scenarios reached ({limit_settings.num_scenarios}). Number of scenarios found: {num_scenarios}",
363+
)
360364

361365
scenario_name = os.path.normpath(scenario_form.scenario_name)
362366
if scenario_name == "." or scenario_name == ".." or os.path.basename(scenario_name) != scenario_name:
@@ -388,13 +392,13 @@ async def create_zone(scenario_form, locator):
388392
# Ensure that zone exists
389393
zone_df = geopandas.read_file(locator.get_zone_geometry())
390394

391-
limit_settings = LimitSettings()
392-
num_buildings = len(zone_df)
393-
if limit_settings.num_buildings is not None and limit_settings.num_buildings <= num_buildings:
394-
raise HTTPException(
395-
status_code=status.HTTP_400_BAD_REQUEST,
396-
detail=f"Maximum number of buildings reached ({limit_settings.num_buildings}). Number of buildings found: {num_buildings}",
397-
)
395+
if not settings.local:
396+
num_buildings = len(zone_df)
397+
if limit_settings.num_buildings is not None and limit_settings.num_buildings <= num_buildings:
398+
raise HTTPException(
399+
status_code=status.HTTP_400_BAD_REQUEST,
400+
detail=f"Maximum number of buildings reached ({limit_settings.num_buildings}). Number of buildings found: {num_buildings}",
401+
)
398402

399403
# Copy zone from user-input
400404
else:

0 commit comments

Comments
 (0)