Update dependency urllib3 to v1.26.10 #11
							
								
								
									
										16
									
								
								.github/workflows/merge-to-main.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/merge-to-main.yml
									
									
									
									
										vendored
									
									
								
							| @@ -10,6 +10,8 @@ jobs: | ||||
|     steps: | ||||
|       - name: Check out repository code | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|       - name: Setup Python | ||||
|         uses: actions/setup-python@v4 | ||||
|         with: | ||||
| @@ -18,14 +20,16 @@ jobs: | ||||
|         run: pip install -r requirements.txt && pip install -r requirements-dev.txt | ||||
|       - name: Run test suite | ||||
|         run: | | ||||
|           coverage run -m py.test -v | ||||
|           coverage run -m py.test -v --junitxml=testresults.xml | ||||
|           coverage xml | ||||
|       - name: Report results to DeepSource | ||||
|         run: | | ||||
|           curl https://deepsource.io/cli | sh | ||||
|           ./bin/deepsource report --analyzer test-coverage --key python --value-file ./coverage.xml | ||||
|       - uses: sonarsource/sonarqube-scan-action@master | ||||
|         env: | ||||
|           DEEPSOURCE_DSN: ${{ secrets.DEEPSOURCE_DSN }} | ||||
|           SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | ||||
|           SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} | ||||
|       - uses: sonarsource/sonarqube-quality-gate-action@master | ||||
|         timeout-minutes: 5 | ||||
|         env: | ||||
|           SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | ||||
|  | ||||
|   build: | ||||
|     needs: coverage | ||||
|   | ||||
							
								
								
									
										17
									
								
								.github/workflows/pull-request.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								.github/workflows/pull-request.yml
									
									
									
									
										vendored
									
									
								
							| @@ -16,6 +16,7 @@ jobs: | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           ref: ${{ github.event.pull_request.head.sha }} | ||||
|           fetch-depth: 0 | ||||
|       - name: Setup Python | ||||
|         uses: actions/setup-python@v4 | ||||
|         with: | ||||
| @@ -23,14 +24,16 @@ jobs: | ||||
|       - name: Install dependencies | ||||
|         run: pip install -r requirements.txt && pip install -r requirements-dev.txt | ||||
|       - name: Lint | ||||
|         run: pylint --recursive=yes . | ||||
|         run: pylint --recursive=yes --output-format=parseable --output=lintreport.txt . | ||||
|       - name: Run test suite | ||||
|         run: | | ||||
|           coverage run -m py.test -v | ||||
|           coverage run -m py.test -v --junitxml=testresults.xml | ||||
|           coverage xml | ||||
|       - name: Report results to DeepSource | ||||
|         run: | | ||||
|           curl https://deepsource.io/cli | sh | ||||
|           ./bin/deepsource report --analyzer test-coverage --key python --value-file ./coverage.xml | ||||
|       - uses: sonarsource/sonarqube-scan-action@master | ||||
|         env: | ||||
|           DEEPSOURCE_DSN: ${{ secrets.DEEPSOURCE_DSN }} | ||||
|           SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | ||||
|           SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} | ||||
|       - uses: sonarsource/sonarqube-quality-gate-action@master | ||||
|         timeout-minutes: 5 | ||||
|         env: | ||||
|           SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | ||||
|   | ||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -38,6 +38,8 @@ pip-log.txt | ||||
| pip-delete-this-directory.txt | ||||
|  | ||||
| # Unit test / coverage reports | ||||
| lintreport.txt | ||||
| testresults.xml | ||||
| htmlcov/ | ||||
| .tox/ | ||||
| .nox/ | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| # iPilot [](https://github.com/luketainton/pypilot/actions/workflows/ci-branch-main.yml) [](https://deepsource.io/gh/luketainton/pypilot/?ref=repository-badge) | ||||
| # iPilot [](https://github.com/luketainton/pypilot/actions/workflows/ci-branch-main.yml) [](https://sonarqube.tainton.uk/dashboard?id=luketainton_pypilot_AYHo1eOKSbMjdyWLhHhP) | ||||
|  | ||||
| ## Description | ||||
| IP Information Lookup Tool | ||||
|   | ||||
| @@ -2,4 +2,4 @@ | ||||
|  | ||||
| """MODULE: Specifies app version.""" | ||||
|  | ||||
| VERSION = "1.2" | ||||
| VERSION = "1.2"  # pragma: no cover | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import argparse | ||||
| from app.query_normalisation import get_public_ip | ||||
|  | ||||
|  | ||||
| def parse_args() -> argparse.Namespace: | ||||
| def parse_args() -> argparse.Namespace:  # pragma: no cover | ||||
|     """Get arguments from user via the command line.""" | ||||
|     parser = argparse.ArgumentParser( | ||||
|         description="Query information about an IP address or domain name." | ||||
|   | ||||
| @@ -2,6 +2,8 @@ | ||||
|  | ||||
| """MODULE: Provides functions to call various APIs to retrieve IP/prefix information.""" | ||||
|  | ||||
| from typing import Union | ||||
|  | ||||
| import ipaddress | ||||
| import requests | ||||
|  | ||||
| @@ -24,7 +26,7 @@ def get_autonomous_system_number(as_info: str) -> str: | ||||
|     return as_number | ||||
|  | ||||
|  | ||||
| def get_prefix_information(autonomous_system: int) -> list: | ||||
| def get_prefix_information(autonomous_system: int) -> Union[list, None]: | ||||
|     """Retrieves prefix information about a given autonomous system.""" | ||||
|     api_endpoint = f"https://api.hackertarget.com/aslookup/?q={str(autonomous_system)}" | ||||
|     try: | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import sys | ||||
| from app.args import parse_args | ||||
| from app.print_table import print_table, generate_prefix_string | ||||
| from app.query_normalisation import is_ip_address, resolve_domain_name | ||||
| from app.ip_info import (  # pragma: no cover | ||||
| from app.ip_info import ( | ||||
|     get_ip_information, | ||||
|     get_autonomous_system_number, | ||||
|     get_prefix_information, | ||||
|   | ||||
| @@ -2,10 +2,11 @@ | ||||
|  | ||||
| """MODULE: Provides functions for preparing, then printing, retrieved data.""" | ||||
|  | ||||
| from typing import Union | ||||
| from tabulate import tabulate | ||||
|  | ||||
|  | ||||
| def generate_prefix_string(prefixes: list) -> str: | ||||
| def generate_prefix_string(prefixes: list) -> Union[str, None]: | ||||
|     """Generate a string that spilts prefixes into rows of 4.""" | ||||
|     num_per_row = 4 | ||||
|     try: | ||||
| @@ -17,6 +18,6 @@ def generate_prefix_string(prefixes: list) -> str: | ||||
|         return None | ||||
|  | ||||
|  | ||||
| def print_table(table_data) -> None: | ||||
| def print_table(table_data) -> None:  # pragma: no cover | ||||
|     """Print table generated by tabulate.""" | ||||
|     print(tabulate(table_data)) | ||||
|   | ||||
							
								
								
									
										9
									
								
								sonar-project.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								sonar-project.properties
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| sonar.projectKey=luketainton_pypilot_AYHo1eOKSbMjdyWLhHhP | ||||
| sonar.python.version=3.10 | ||||
| sonar.python.coverage.reportPaths=coverage.xml | ||||
| sonar.python.pylint.reportPaths=lintreport.txt | ||||
| sonar.python.xunit.reportPath=testresults.xml | ||||
| sonar.sources=app | ||||
| sonar.tests=tests | ||||
| sonar.exclusions=,.github/**,.gitignore,CODEOWNERS,CHANGELOG.md,LICENSE.md,README.md,renovate.json,requirements-dev.txt,requirements.txt | ||||
| sonar.coverage.exclusions=app/_version.py,app/args.py,app/main.py | ||||
							
								
								
									
										19
									
								
								tests/test_print_table.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								tests/test_print_table.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| #!/usr/bin/env python3 | ||||
|  | ||||
| """MODULE: Provides test cases for app/print_table.py.""" | ||||
|  | ||||
| from app.print_table import generate_prefix_string  # pragma: no cover | ||||
|  | ||||
|  | ||||
| def test_generate_prefix_string_small() -> None: | ||||
|     """TEST: Verifies if a small prefix list results in one line.""" | ||||
|     test_query = ["abc", "def"] | ||||
|     result = generate_prefix_string(prefixes=test_query) | ||||
|     assert result == "abc, def\n" | ||||
|  | ||||
|  | ||||
| def test_generate_prefix_string_large() -> None: | ||||
|     """TEST: Verifies if a large prefix list results in multiple lines.""" | ||||
|     test_query = ["abc", "def", "ghi", "jkl", "mno", "pqr"] | ||||
|     result = generate_prefix_string(prefixes=test_query) | ||||
|     assert result == "abc, def, ghi, jkl\nmno, pqr\n" | ||||
		Reference in New Issue
	
	Block a user