From e0cb6a5ff025018702415f110901f0b325a595da Mon Sep 17 00:00:00 2001 From: Liang-Shih Lin Date: Tue, 1 Oct 2024 16:45:52 +0800 Subject: [PATCH] fix: Use save_to_disk fix: Update test fix: Remove full file path --- posting-1.13.0-py3-none-any.whl | Bin 0 -> 97700 bytes src/posting/__main__.py | 6 +- src/posting/importing/postman.py | 181 ++++++++++++++++++------------- tests/test_postman_import.py | 136 ++++++++--------------- 4 files changed, 151 insertions(+), 172 deletions(-) create mode 100644 posting-1.13.0-py3-none-any.whl diff --git a/posting-1.13.0-py3-none-any.whl b/posting-1.13.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..8b56eb1aa86b70db1c4db9d9082e60e28d76840b GIT binary patch literal 97700 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%0An6!UgmCiLGQ1t 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 None: collection = import_openapi_spec(spec_path) elif type.lower() == "postman": spec_type = "Postman" - console.print( - "Importing Postman collection haven't been implemented yet", style="red" - ) - import_postman_spec(spec_path, output) - return + collection = import_postman_spec(spec_path, output) else: console.print(f"Unknown spec type: {type!r}", style="red") return diff --git a/src/posting/importing/postman.py b/src/posting/importing/postman.py index ebb7b256..220fcd01 100644 --- a/src/posting/importing/postman.py +++ b/src/posting/importing/postman.py @@ -1,15 +1,22 @@ from pathlib import Path -from typing import Any, List, Optional +from typing import List, Optional import json -import os import re -import yaml from pydantic import BaseModel from rich.console import Console -from posting.collection import APIInfo, Collection +from posting.collection import ( + APIInfo, + Collection, + FormItem, + Header, + QueryParam, + RequestBody, + RequestModel, + HttpRequestMethod, +) class Variable(BaseModel): @@ -22,9 +29,17 @@ class Variable(BaseModel): disabled: Optional[bool] = None +class RawRequestOptions(BaseModel): + language: str + + +class RequestOptions(BaseModel): + raw: RawRequestOptions + + class Body(BaseModel): mode: str - options: Optional[dict] = None + options: Optional[RequestOptions] = None raw: Optional[str] = None formdata: Optional[List[Variable]] = None @@ -37,7 +52,7 @@ class Url(BaseModel): class PostmanRequest(BaseModel): - method: str + method: HttpRequestMethod url: Optional[str | Url] = None header: Optional[List[Variable]] = None description: Optional[str] = None @@ -52,100 +67,111 @@ class RequestItem(BaseModel): class PostmanCollection(BaseModel): info: dict[str, str] - item: List[RequestItem] variable: List[Variable] - -def create_env_file(path: Path, env_filename: str, variables: List[Variable]) -> Path: - env_content: List[str] = [] - - for var in variables: - env_content.append(f"{transform_variables(var.key)}={var.value}") - - env_file = path / env_filename - env_file.write_text("\n".join(env_content)) - return env_file - - -def generate_directory_structure( - items: List[RequestItem], current_path: str = "", base_path: Path = Path("") -) -> List[str]: - directories = [] - for item in items: - if item.item is not None: - folder_name = item.name - new_path = f"{current_path}/{folder_name}" if current_path else folder_name - full_path = Path(base_path) / new_path - os.makedirs(str(full_path), exist_ok=True) - directories.append(str(full_path)) - generate_directory_structure(item.item, new_path, base_path) - if item.request is not None: - request_name = re.sub(r"[^A-Za-z0-9\.]+", "", item.name) - file_name = f"{request_name}.posting.yaml" - full_path = Path(base_path) / current_path / file_name - create_request_file(full_path, item) - return directories + item: List[RequestItem] # Converts variable names like userId to $USER_ID, or user-id to $USER_ID -def transform_variables(string): +def sanitize_variables(string): underscore_case = re.sub(r"(? Path: + env_content: List[str] = [] - if request_data.request is not None: - yaml_content["method"] = request_data.request.method + for var in variables: + env_content.append(f"{sanitize_variables(var.key)}={var.value}") - if request_data.request.header is not None: - yaml_content["headers"] = [ - {"name": header.key, "value": header.value} - for header in request_data.request.header - ] + env_file = path / env_filename + env_file.write_text("\n".join(env_content)) + return env_file - if request_data.request.url is not None: - if isinstance(request_data.request.url, Url): - yaml_content["url"] = transform_url(request_data.request.url.raw) - if request_data.request.url.query is not None: - yaml_content["params"] = [ - {"name": param.key, "value": transform_url(param.value)} - for param in request_data.request.url.query - ] - else: - yaml_content["url"] = transform_url((request_data.request.url)) - if request_data.request.description is not None: - yaml_content["description"] = request_data.request.description +def import_requests( + items: List[RequestItem], base_path: Path = Path("") +) -> List[RequestModel]: + requests: List[RequestModel] = [] + for item in items: + if item.item is not None: + requests = requests + import_requests(item.item, base_path) + if item.request is not None: + file_name = re.sub(r"[^A-Za-z0-9\.]+", "", item.name) + requests.append(format_request(file_name, item.request)) + + return requests + + +def format_request(name: str, request: PostmanRequest) -> RequestModel: + postingRequest = RequestModel( + name=name, + method=request.method, + description=request.description if request.description is not None else "", + url=sanitize_str( + request.url.raw if isinstance(request.url, Url) else request.url + ) + if request.url is not None + else "", + ) + if request.header is not None: + for header in request.header: + postingRequest.headers.append( + Header( + name=header.key, + value=header.value if header.value is not None else "", + enabled=True, + ) + ) + + if ( + request.url is not None + and isinstance(request.url, Url) + and request.url.query is not None + ): + for param in request.url.query: + postingRequest.params.append( + QueryParam( + name=param.key, + value=param.value if param.value is not None else "", + enabled=param.disabled if param.disabled is not None else False, + ) + ) + + if request.body is not None and request.body.raw is not None: if ( - request_data.request.body is not None - and request_data.request.body.raw is not None + request.body.mode == "raw" + and request.body.options is not None + and request.body.options.raw.language == "json" ): - yaml_content["body"] = { - "content": transform_url(request_data.request.body.raw) - } + postingRequest.body = RequestBody(content=sanitize_str(request.body.raw)) + elif request.body.mode == "formdata" and request.body.formdata is not None: + form_data: list[FormItem] = [ + FormItem( + name=data.key, + value=data.value if data.value is not None else "", + enabled=data.disabled is False, + ) + for data in request.body.formdata + ] + postingRequest.body = RequestBody(form_data=form_data) - # Write YAML file - with open(file_path, "w") as f: - yaml.dump(yaml_content, f, default_flow_style=False) + return postingRequest def import_postman_spec( spec_path: str | Path, output_path: str | Path | None -) -> tuple[Collection, Path, List[str]]: +) -> Collection: console = Console() console.print(f"Importing Postman spec from {spec_path!r}.") @@ -166,15 +192,14 @@ def import_postman_spec( if output_path is not None: base_dir = Path(output_path) if isinstance(output_path, str) else output_path - console.print(f"Output path: {output_path!r}") + console.print(f"Output path: {str(base_dir)!r}") env_file = create_env_file(base_dir, f"{info.title}.env", spec.variable) console.print(f"Created environment file {str(env_file)!r}.") - main_collection = Collection(path=spec_path.parent, name="Postman Test") + main_collection = Collection(path=spec_path.parent, name=info.title) + main_collection.readme = main_collection.generate_readme(info) - # Create the directory structure like Postman's request folders - directories = generate_directory_structure(spec.item, base_path=base_dir) - console.print("Finished importing postman collection.") + main_collection.requests = import_requests(spec.item, base_dir) - return main_collection, env_file, directories + return main_collection diff --git a/tests/test_postman_import.py b/tests/test_postman_import.py index f1fa659a..38cd23fe 100644 --- a/tests/test_postman_import.py +++ b/tests/test_postman_import.py @@ -1,18 +1,10 @@ -import pytest -from pathlib import Path import json -import tempfile -import shutil -from posting.importing.postman import ( - Variable, - RequestItem, - PostmanRequest, - Url, - import_postman_spec, - create_env_file, - generate_directory_structure, - create_request_file, -) +from pathlib import Path +from unittest.mock import patch, mock_open + +import pytest +from posting.importing.postman import import_postman_spec, PostmanCollection +from posting.collection import Collection @pytest.fixture @@ -23,86 +15,52 @@ def sample_postman_spec(): "description": "A test API", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", }, - "variable": [{"key": "base_url", "value": "https://api.example.com"}], + "variable": [{"key": "baseUrl", "value": "https://api.example.com"}], "item": [ { - "name": "Users", - "item": [ - { - "name": "Get User", - "request": { - "method": "GET", - "url": { - "raw": "{{base_url}}/users/1", - "query": [{"key": "include", "value": "posts"}], - }, - "header": [{"key": "Accept", "value": "application/json"}], - }, - } - ], + "name": "Get Users", + "request": { + "method": "GET", + "url": { + "raw": "{{baseUrl}}/users", + "host": ["{{baseUrl}}"], + "path": ["users"], + }, + }, } ], } @pytest.fixture -def temp_dir(): - temp_dir = tempfile.mkdtemp() - yield Path(temp_dir) - shutil.rmtree(temp_dir) - - -def test_import_postman_spec(sample_postman_spec, temp_dir): - spec_file = temp_dir / "test_spec.json" - with open(spec_file, "w") as f: - json.dump(sample_postman_spec, f) - - collection, env_file, directories = import_postman_spec(spec_file, temp_dir) - - assert collection.name == "Postman Test" - assert env_file.name == "Test API.env" - assert len(directories) == 1 - assert directories[0].endswith("Users") - - -def test_create_env_file(temp_dir): - variables = [Variable(key="base_url", value="https://api.example.com")] - env_file = create_env_file(temp_dir, "test.env", variables) - - assert env_file.exists() - assert env_file.read_text() == "'base_url'='https://api.example.com'" - - -def test_generate_directory_structure(temp_dir): - request_obj = PostmanRequest(method="GET", url=Url(raw="{{base_url}}/users/1")) - request_item = RequestItem(name="Get User", request=request_obj) - item = RequestItem(name="Users", item=[request_item]) - items = [item] - - directories = generate_directory_structure(items, base_path=temp_dir) - - assert len(directories) == 1 - assert directories[0].endswith("Users") - assert (temp_dir / "Users" / "Get User.posting.yaml").exists() - - -def test_create_request_file(temp_dir): - request_obj = PostmanRequest( - method="GET", - url=Url( - raw="{{base_url}}/users/1", query=[Variable(key="include", value="posts")] - ), - header=[Variable(key="Accept", value="application/json")], - ) - request_data = RequestItem(name="Get User", request=request_obj) - - file_path = temp_dir / "test_request.posting.yaml" - create_request_file(file_path, request_data) - - assert file_path.exists() - content = file_path.read_text() - assert "name: Get User" in content - assert "method: GET" in content - assert "url: '{{base_url}}/users/1'" in content - assert "headers:" in content - assert "params:" in content +def mock_spec_file(sample_postman_spec): + return mock_open(read_data=json.dumps(sample_postman_spec)) + + +def test_import_postman_spec(sample_postman_spec, mock_spec_file): + spec_path = Path("/path/to/spec.json") + output_path = Path("/path/to/output") + + with patch("builtins.open", mock_spec_file), patch( + "posting.importing.postman.create_env_file" + ) as mock_create_env, patch( + "posting.collection.Collection.generate_readme" + ) as mock_generate_readme: + mock_create_env.return_value = output_path / "Test API.env" + mock_generate_readme.return_value = "# Test API" + + result = import_postman_spec(spec_path, output_path) + + assert isinstance(result, Collection) + assert result.name == "Test API" + assert len(result.requests) == 1 + assert result.requests[0].name == "GetUsers" + assert result.requests[0].method == "GET" + assert result.requests[0].url == "$BASE_URL/users" + + mock_create_env.assert_called_once_with( + output_path, + "Test API.env", + PostmanCollection(**sample_postman_spec).variable, + ) + mock_generate_readme.assert_called_once()