You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@syncope.apache.org by "Miroslav.Capkovic" <mi...@gmail.com> on 2020/07/16 10:16:44 UTC

Generatinmg syncope rest client by OPENAPI/swagger from openapi.json - PolicyTO model is missing in generated code

Hi,

I have problems with generating rest api clients from
/syncope/rest/openapi.json as through swager as throuh openapi for syncope.


Both technologies  has problem with the following:


- duplicate (version 2.1.7-SNAPSHOT) parmeter remediationKey or unsued
key (version 2.1.6) on service endpoint /remediations (can be repaired)

- missing schema model PolicyTO , that leads to impossibility to
generate client (openapi) and leads to incorrectly generated classess
(swagger) (seems tha parent of AccountPolicyTO should be PolictyTO but
its is object)


A im not sure if the problem is really syncope related or it is related
to openapi/swagger tools.


Both i have used for generating python swagger_client. (seems be that
there is missing dependecy between AccounPolicyTO and PolicyTO  but i'm
not sure )

path to reproduce with swagger  - generates code but code is not valid
and ends with error message missing PolicyTO object in AccountPolicyTO
object:

-- snippet of generated python code --

...

class AccountPolicyTO(object):
...

code generates the error code:


  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 638, in
_load_backward_compatible
  File
"/opt/venv/lib/python3.7/site-packages/swagger_client-1.0.0-py3.7.egg/swagger_client/models/account_policy_to.py",
line 19, in <module>
  File
"/opt/venv/lib/python3.7/site-packages/swagger_client-1.0.0-py3.7.egg/swagger_client/models/account_policy_to.py",
line 42, in AccountPolicyTO
*NameError: name 'PolicyTO' is not defined*



path to reproduce with openapi :

    ./openapi-generator-cli  generate -g python -i
http://idm:8080/syncope/rest/openapi.json -o out --skip-validate-sp

generates error message(code is not generated)

....

Exception in thread "main" java.lang.RuntimeException: *Could not
process model 'PolicyTO'.*Please make sure that your schema is correct!
        at
org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:496)
        at
org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:1005)
        at org.openapitools.codegen.cmd.Generate.execute(Generate.java:431)
        at
org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
        at
org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:61)
Caused by: java.lang.RuntimeException: Stack overflow hit when looking
for PolicyTO an infinite loop starting and ending at PullPolicyTO was seen
        at
org.openapitools.codegen.DefaultCodegen.getAllOfDescendants(DefaultCodegen.java:2670)
        at
org.openapitools.codegen.DefaultCodegen.createDiscriminator(DefaultCodegen.java:2722)
        at
org.openapitools.codegen.DefaultCodegen.fromModel(DefaultCodegen.java:2152)
        at
org.openapitools.codegen.DefaultGenerator.processModels(DefaultGenerator.java:1289)
        at
org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:491)


in swagger editor/openapi code gen  generate python client for rest api
and test code


Thank U for your help.

Regards, Miro.




Re: Generatinmg syncope rest client by OPENAPI/swagger from openapi.json - PolicyTO model is missing in generated code

Posted by Francesco Chicchiriccò <il...@apache.org>.
On 16/07/20 12:16, Miroslav.Capkovic wrote:
> Hi,
>
> I have problems with generating rest api clients from
> /syncope/rest/openapi.json as through swager as throuh openapi for syncope.
>
>
> Both technologies  has problem with the following:
>
>
> - duplicate (version 2.1.7-SNAPSHOT) parmeter remediationKey or unsued
> key (version 2.1.6) on service endpoint /remediations (can be repaired)
>
> - missing schema model PolicyTO , that leads to impossibility to
> generate client (openapi) and leads to incorrectly generated classess
> (swagger) (seems tha parent of AccountPolicyTO should be PolictyTO but
> its is object)
>
>
> A im not sure if the problem is really syncope related or it is related
> to openapi/swagger tools.
>
>
> Both i have used for generating python swagger_client. (seems be that
> there is missing dependecy between AccounPolicyTO and PolicyTO  but i'm
> not sure )
>
> path to reproduce with swagger  - generates code but code is not valid and ends with error message missing PolicyTO object in AccountPolicyTO object:
>
> -- snippet of generated python code --
>
> ...
>
> class AccountPolicyTO(object):
> ...
>
> code generates the error code:
>
>
>   File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
>   File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
>   File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
>   File "/opt/venv/lib/python3.7/site-packages/swagger_client-1.0.0-py3.7.egg/swagger_client/models/account_policy_to.py", line 19, in <module>
>   File "/opt/venv/lib/python3.7/site-packages/swagger_client-1.0.0-py3.7.egg/swagger_client/models/account_policy_to.py", line 42, in AccountPolicyTO
> *NameError: name 'PolicyTO' is not defined*
>
>
>
> path to reproduce with openapi :
>
>     ./openapi-generator-cli  generate -g python -i http://idm:8080/syncope/rest/openapi.json -o out --skip-validate-sp
>
> generates error message(code is not generated)
>
> ....
>
> Exception in thread "main" java.lang.RuntimeException: *Could not process model 'PolicyTO'.*Please make sure that your schema is correct!
>         at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:496)
>         at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:1005)
>         at org.openapitools.codegen.cmd.Generate.execute(Generate.java:431)
>         at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
>         at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:61)
> Caused by: java.lang.RuntimeException: Stack overflow hit when looking for PolicyTO an infinite loop starting and ending at PullPolicyTO was seen
>         at org.openapitools.codegen.DefaultCodegen.getAllOfDescendants(DefaultCodegen.java:2670)
>         at org.openapitools.codegen.DefaultCodegen.createDiscriminator(DefaultCodegen.java:2722)
>         at org.openapitools.codegen.DefaultCodegen.fromModel(DefaultCodegen.java:2152)
>         at org.openapitools.codegen.DefaultGenerator.processModels(DefaultGenerator.java:1289)
>         at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:491)
>
>
> in swagger editor/openapi code gen  generate python client for rest api
> and test code

Hi Miro,
thanks for reporting the issue about duplicated remediationKey I have just fixed that in

https://github.com/apache/syncope/commit/66927e35e93e3823720c5bab23180e870b7da726

it should be ok now.

Regarding PolicyTO and children (as AccountPolicyTO, PasswordPolicyTO, PullPolicyTO and PushPolicyTO) I think the real issue is that the related REST service is heavily using Java generics: see

https://github.com/apache/syncope/blob/2_1_X/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/PolicyService.java

and I am not sure how this could be better handled in OpenAPI.

I have generated the Python client via http://editor.swagger.io/ and run

python setup.py build

that went out fine, but I don't know how to move forward to check if the client is actually working or not; can you provide some help?

Regards.

-- 
Francesco Chicchiriccò

Tirasa - Open Source Excellence
http://www.tirasa.net/

Member at The Apache Software Foundation
Syncope, Cocoon, Olingo, CXF, OpenJPA, PonyMail
http://home.apache.org/~ilgrosso/