|
2 | 2 | Types and constants for Azure API Management automation and deployment. |
3 | 3 | """ |
4 | 4 |
|
| 5 | +import os |
5 | 6 | from enum import StrEnum |
6 | 7 | from dataclasses import dataclass |
| 8 | +from pathlib import Path |
7 | 9 | from typing import List, Optional, Any |
8 | 10 |
|
9 | 11 |
|
10 | 12 | # ------------------------------ |
11 | 13 | # CONSTANTS |
12 | 14 | # ------------------------------ |
13 | 15 |
|
14 | | -# These paths are relative to the infrastructure and samples |
15 | | -SHARED_XML_POLICY_BASE_PATH = '../../shared/apim-policies' |
16 | | -DEFAULT_XML_POLICY_PATH = f'{SHARED_XML_POLICY_BASE_PATH}/default.xml' |
17 | | -REQUIRE_PRODUCT_XML_POLICY_PATH = f'{SHARED_XML_POLICY_BASE_PATH}/require-product.xml' |
18 | | -HELLO_WORLD_XML_POLICY_PATH = f'{SHARED_XML_POLICY_BASE_PATH}/hello-world.xml' |
19 | | -REQUEST_HEADERS_XML_POLICY_PATH = f'{SHARED_XML_POLICY_BASE_PATH}/request-headers.xml' |
20 | | -BACKEND_XML_POLICY_PATH = f'{SHARED_XML_POLICY_BASE_PATH}/backend.xml' |
| 16 | +def _get_project_root() -> Path: |
| 17 | + """Get the project root directory path.""" |
| 18 | + # Try to get from environment variable first (set by .env file) |
| 19 | + if 'PROJECT_ROOT' in os.environ: |
| 20 | + return Path(os.environ['PROJECT_ROOT']) |
| 21 | + |
| 22 | + # Fallback: detect project root by walking up from this file |
| 23 | + current_path = Path(__file__).resolve().parent.parent.parent # Go up from shared/python/ |
| 24 | + indicators = ['README.md', 'requirements.txt', 'bicepconfig.json'] |
| 25 | + |
| 26 | + while current_path != current_path.parent: |
| 27 | + if all((current_path / indicator).exists() for indicator in indicators): |
| 28 | + return current_path |
| 29 | + current_path = current_path.parent |
| 30 | + |
| 31 | + # Ultimate fallback |
| 32 | + return Path(__file__).resolve().parent.parent.parent |
| 33 | + |
| 34 | +# Get project root and construct absolute paths to policy files |
| 35 | +_PROJECT_ROOT = _get_project_root() |
| 36 | +_SHARED_XML_POLICY_BASE_PATH = _PROJECT_ROOT / 'shared' / 'apim-policies' |
| 37 | + |
| 38 | +# Policy file paths (now absolute and platform-independent) |
| 39 | +DEFAULT_XML_POLICY_PATH = str(_SHARED_XML_POLICY_BASE_PATH / 'default.xml') |
| 40 | +REQUIRE_PRODUCT_XML_POLICY_PATH = str(_SHARED_XML_POLICY_BASE_PATH / 'require-product.xml') |
| 41 | +HELLO_WORLD_XML_POLICY_PATH = str(_SHARED_XML_POLICY_BASE_PATH / 'hello-world.xml') |
| 42 | +REQUEST_HEADERS_XML_POLICY_PATH = str(_SHARED_XML_POLICY_BASE_PATH / 'request-headers.xml') |
| 43 | +BACKEND_XML_POLICY_PATH = str(_SHARED_XML_POLICY_BASE_PATH / 'backend.xml') |
21 | 44 |
|
22 | 45 | SUBSCRIPTION_KEY_PARAMETER_NAME = 'api_key' |
23 | 46 | SLEEP_TIME_BETWEEN_REQUESTS_MS = 50 |
|
0 commit comments