Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • O openapi-generator
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 3,476
    • Issues 3,476
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 402
    • Merge requests 402
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OpenAPI Tools
  • openapi-generator
  • Issues
  • #11935
Closed
Open
Issue created Mar 22, 2022 by Administrator@rootContributor5 of 6 checklist items completed5/6 checklist items

[BUG][PYTHON] ValueError thrown in generated Flask server stub

Created by: megretson

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?

See bug description.

  • Have you validated the input using an OpenAPI validator (example)?

Yes, this file passes validation.

  • Have you tested with the latest master to confirm the issue still exists?

Yes, version 5.4.0

  • Have you searched for related issues/PRs?

Yes, no related issues on value error.

  • What's the actual output vs expected output?

(venv) megretson@moonshot Back-end % python -m game_server Traceback (most recent call last): File "/Users/megretson/.pyenv/versions/3.8.6/lib/python3.8/runpy.py", line 194, in _run_module_as_main return _run_code(code, main_globals, None, File "/Users/megretson/.pyenv/versions/3.8.6/lib/python3.8/runpy.py", line 87, in _run_code exec(code, run_globals) File "/Users/megretson/Projects/JHU/Back-end/game_server/__main__.py", line 19, in <module> main() File "/Users/megretson/Projects/JHU/Back-end/game_server/__main__.py", line 11, in main app.add_api('openapi.yaml', File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/connexion/apps/flask_app.py", line 73, in add_api self.app.register_blueprint(api.blueprint) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/app.py", line 98, in wrapper_func return f(self, *args, **kwargs) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/app.py", line 1168, in register_blueprint blueprint.register(self, options, first_registration) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/blueprints.py", line 256, in register deferred(state) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/blueprints.py", line 294, in <lambda> self.record(lambda s: s.add_url_rule(rule, endpoint, view_func, **options)) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/blueprints.py", line 81, in add_url_rule self.app.add_url_rule( File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/app.py", line 98, in wrapper_func return f(self, *args, **kwargs) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/app.py", line 1275, in add_url_rule rule = self.url_rule_class(rule, methods=methods, **options) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/werkzeug/routing.py", line 666, in __init__ raise ValueError("urls must start with a leading slash") ValueError: urls must start with a leading slash

Expected output: running server

  • [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description
  • Attached is the yaml file used for this example
  • Code is generated with the command java -jar openapi-generator-cli.jar generate -i ./Back-end/sync_definition.yaml -g python-flask -o Back-end --package-name game_server --api-package game_server
  • All dependencies installed into venv.
  • Using Openapi-generator 5.4.0
  • Running the generated code via python3 -m game_server

Output: (venv) megretson@moonshot Back-end % python -m game_server Traceback (most recent call last): File "/Users/megretson/.pyenv/versions/3.8.6/lib/python3.8/runpy.py", line 194, in _run_module_as_main return _run_code(code, main_globals, None, File "/Users/megretson/.pyenv/versions/3.8.6/lib/python3.8/runpy.py", line 87, in _run_code exec(code, run_globals) File "/Users/megretson/Projects/JHU/Back-end/game_server/__main__.py", line 19, in <module> main() File "/Users/megretson/Projects/JHU/Back-end/game_server/__main__.py", line 11, in main app.add_api('openapi.yaml', File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/connexion/apps/flask_app.py", line 73, in add_api self.app.register_blueprint(api.blueprint) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/app.py", line 98, in wrapper_func return f(self, *args, **kwargs) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/app.py", line 1168, in register_blueprint blueprint.register(self, options, first_registration) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/blueprints.py", line 256, in register deferred(state) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/blueprints.py", line 294, in <lambda> self.record(lambda s: s.add_url_rule(rule, endpoint, view_func, **options)) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/blueprints.py", line 81, in add_url_rule self.app.add_url_rule( File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/app.py", line 98, in wrapper_func return f(self, *args, **kwargs) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/flask/app.py", line 1275, in add_url_rule rule = self.url_rule_class(rule, methods=methods, **options) File "/Users/megretson/Projects/JHU/Back-end/venv/lib/python3.8/site-packages/werkzeug/routing.py", line 666, in __init__ raise ValueError("urls must start with a leading slash") ValueError: urls must start with a leading slash

openapi-generator version

5.4.0

OpenAPI declaration file content or url

openapi: 3.0.0
servers:
  - url: our_clue_game_will_live_here.com
    description: This is the server for game state
info:
  description: This is the synchronous API definition for our server 
  version: 1.0.0
  title: Game Server

paths:
  /game:
    post:
      summary: Create a new game
      description: 'Create a new game'
      operationId: createGame
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/game'
        '405':
          description: Invalid input
    
  /game/{gameId}:
    get:
      summary: Find game by ID
      description: Returns a game
      operationId: getGameById
      parameters:
        - name: gameId
          in: path
          description: ID of game to return
          required: true
          schema:
            $ref: "#/components/schemas/game_board_id"
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/game'
        '400':
          description: Invalid ID supplied
        '404':
          description: Game not found
  
  /game/{gameId}/player:
    post:
      summary: Create a new player
      description: 'Create a new player'
      operationId: createPlayer
      parameters:
        - name: gameId
          in: path
          description: ID of game to return
          required: true
          schema:
            $ref: "#/components/schemas/game_board_id"      
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/player'
        '405':
          description: Invalid input

  /game/{gameId}/player/{playerId}:
    get:
      summary: Find a player
      description: 'Find a  player'
      operationId: findPlayer
      parameters:
        - name: gameId
          in: path
          description: ID of game to return
          required: true
          schema:
            $ref: "#/components/schemas/game_board_id"
        - name: playerId
          in: path
          description: ID of player to return
          required: true
          schema:
            $ref: "#/components/schemas/player_id" 
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/player'
        '405':
          description: Invalid input

  /game/{gameId}/player/{playerId}/move:
    post:
      summary: Create a new player move
      description: 'Create a new player move'
      operationId: movePlayer
      parameters:
        - name: gameId
          in: path
          description: ID of game to return
          required: true
          schema:
            $ref: "#/components/schemas/game_board_id"  
        - name: playerId
          in: path
          description: ID of player to return
          required: true
          schema:
            $ref: "#/components/schemas/player_id"
        - name: move
          in: query
          description: attempted move
          required: true
          schema:
            $ref: "#/components/schemas/move"
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/game'
        '405':
          description: Invalid input / illegal move

  /game/{gameId}/player/{playerId}/accusation:
    post:
      summary: Make an accusation
      description: 'Create a new player accusation'
      operationId: makeAccusation
      parameters:
        - name: gameId
          in: path
          description: ID of game to return
          required: true
          schema:
            $ref: "#/components/schemas/game_board_id"  
        - name: playerId
          in: path
          description: ID of player to return
          required: true
          schema:
            $ref: "#/components/schemas/player_id"
        - name: accusation
          in: query
          description: the player's accusation
          required: true
          schema:
            $ref: "#/components/schemas/card_set"
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/card_set'
        '405':
          description: Invalid input 

  /game/{gameId}/player/{playerId}/suggestion:
    post:
      summary: Make a suggestion
      description: 'Create a new player suggestion'
      operationId: makeSuggestion
      parameters:
        - name: gameId
          in: path
          description: ID of game to return
          required: true
          schema:
            $ref: "#/components/schemas/game_board_id"  
        - name: playerId
          in: path
          description: ID of player to return
          required: true
          schema:
            $ref: "#/components/schemas/player_id"
        - name: suggestion
          in: query
          description: the player's suggestion
          required: true
          schema:
            $ref: "#/components/schemas/card_set"
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/rebuttal_card'
        '405':
          description: Invalid input 


components:
  schemas:
    player:
      description: An object which stores a player's unique ID, and which character they currently are
      type: object
      properties:
        player_id:
          $ref: "#/components/schemas/player_id"
        character_name:
          type: string
          format: enum
    
    player_id:
      type: string
      format: UUID
      description: a unique identifier for a player
    
    game_board_id:
      type: string
      format: UUID
      description: a unique identifier for a game board
    
    sent_at:
      type: string
      format: date-time
      description: Date and time when the message was sent.
    
    move:
      type: number
      format: integer
      description: a numerical value representing the room or hallway the player is attempting to move to
  
    card_set:
      description: A set of cards representing a possible crime
      type: object
      properties:
        player:
          $ref: "#/components/schemas/player"
        room:
          type: string
          format: enum
        weapon:
          type: string
          format: enum
        character_name:
          type: string
          format: enum
  
    rebuttal_card:
      description: The card someone responds to a suggestion with
      type: object
      properties:
        player:
            $ref: "#/components/schemas/player"
        card:
          type: string
          format: enum 
  
    game:
      title: a Game
      description: A game playable on the the server 
      type: object
      properties:
        game_board_id:
          $ref: "#/components/schemas/game_board_id"
        status:
          type: string
          description: pet status in the store
          deprecated: true
          enum:
            - active
            - finished
Generation Details

java -jar openapi-generator-cli.jar generate -i ./Back-end/sync_definition.yaml -g python-flask -o Back-end --package-name game_server --api-package game_server

Steps to reproduce

Bug description describes reproduction steps.

Related issues/PRs

None found

Suggest a fix

Always possible this is some issue with this yaml? Otherwise, this feels like it might be a versioning issue. I am attaching here my pip frozen for arguments sake.

megretson@moonshot Back-end % pip freeze                     
appdirs==1.4.4
attrs==21.4.0
certifi==2021.10.8
charset-normalizer==2.0.12
click==7.1.2
clickclick==20.10.2
connexion==2.12.0
distlib==0.3.1
filelock==3.0.12
Flask==1.1.2
game-server==1.0.0
idna==3.3
importlib-resources==5.4.0
inflection==0.5.1
itsdangerous==1.1.0
Jinja2==2.11.3
jsonschema==4.4.0
MarkupSafe==2.0.1
pbr==5.5.1
pyrsistent==0.18.1
python-dateutil==2.8.2
PyYAML==5.4.1
requests==2.27.1
six==1.15.0
stevedore==3.2.2
swagger-ui-bundle==0.0.9
urllib3==1.26.9
virtualenv==20.0.35
virtualenv-clone==0.5.4
virtualenvwrapper==4.8.4
Werkzeug==1.0.1
zipp==3.7.0

Thanks!

Assignee
Assign to
Time tracking