Allow specific version generation in command

* Add --api-version parameter
* Fix request mocking
* Add tests
This commit is contained in:
Amoki
2018-07-27 12:33:26 +02:00
committed by Cristi Vîjdea
parent ca43a7de0c
commit bbc70a7e3d
4 changed files with 63 additions and 21 deletions
@@ -59,6 +59,11 @@ class Command(BaseCommand):
help='Use a mock request when generating the swagger schema. This is useful if your views or serializers'
'depend on context from a request in order to function.'
)
parser.add_argument(
'--api-version', dest='api_version',
type=str,
help='Version to use to generate schema. This option implies --mock-request.'
)
parser.add_argument(
'--user', dest='user',
help='Username of an existing user to use for mocked authentication. This option implies --mock-request.'
@@ -102,7 +107,7 @@ class Command(BaseCommand):
request = APIView().initialize_request(request)
return request
def handle(self, output_file, overwrite, format, api_url, mock, user, private, generator_class_name,
def handle(self, output_file, overwrite, format, api_url, mock, api_version, user, private, generator_class_name,
*args, **kwargs):
# disable logs of WARNING and below
logging.disable(logging.WARNING)
@@ -126,19 +131,25 @@ class Command(BaseCommand):
# avoid crashing if auth is not configured in the project
user = get_user_model().objects.get(username=user)
mock = mock or private or (user is not None)
mock = mock or private or (user is not None) or (api_version is not None)
if mock and not api_url:
raise ImproperlyConfigured(
'--mock-request requires an API url; either provide '
'the --url argument or set the DEFAULT_API_URL setting'
)
request = self.get_mock_request(api_url, format, user) if mock else None
request = None
if mock:
request = self.get_mock_request(api_url, format, user)
if request and api_version:
request.version = api_version
generator_class = import_class(generator_class_name) or swagger_settings.DEFAULT_GENERATOR_CLASS
generator = generator_class(
info=info,
url=api_url
version=api_version,
url=api_url,
)
schema = generator.get_schema(request=request, public=not private)