3
3
from dataclasses import dataclass
4
4
from datetime import timedelta
5
5
from enum import Enum
6
- from typing import Dict, List, Any, Iterator, Type
6
+ from typing import Dict, List, Any, Iterator, Type, Callable
7
7
import time
8
8
import random
9
9
import logging
@@ -52,7 +52,7 @@ class {{.PascalName}}{{if eq "List" .PascalName}}Request{{end}}:{{if .Descriptio
52
52
{{- define "as_request_type" -}}
53
53
{{- if not .Entity }}None # ERROR: No Type
54
54
{{- else if .Entity.ArrayValue }}[{{if .Entity.ArrayValue.IsObject}}v.as_dict(){{else}}v{{end}} for v in self.{{.SnakeName}}]
55
- {{- else if .Entity.IsObject }}self.{{.SnakeName}}.as_dict()
55
+ {{- else if or .Entity.IsObject .Entity.IsExternal }}self.{{.SnakeName}}.as_dict()
56
56
{{- else if .Entity.Enum }}self.{{.SnakeName}}.value
57
57
{{- else}}self.{{.SnakeName}}{{- end -}}
58
58
{{- end -}}
@@ -89,7 +89,8 @@ class {{.Name}}API:{{if .Description}}
89
89
def __init__(self, api_client):
90
90
self._api = api_client
91
91
{{range .Waits}}
92
- def {{.SnakeName}}(self{{range .Binding}}, {{.PollField.SnakeName}}: {{template "type-nq" .PollField.Entity}}{{end}}, timeout=timedelta(minutes={{.Timeout}})) -> {{.Poll.Response.PascalName}}:
92
+ def {{.SnakeName}}(self{{range .Binding}}, {{.PollField.SnakeName}}: {{template "type-nq" .PollField.Entity}}{{end}},
93
+ timeout=timedelta(minutes={{.Timeout}}), callback: Callable[[{{.Poll.Response.PascalName}}], None] = None) -> {{.Poll.Response.PascalName}}:
93
94
deadline = time.time() + timeout.total_seconds()
94
95
target_states = ({{range .Success}}{{.Entity.PascalName}}.{{.Content}}, {{end}}){{if .Failure}}
95
96
failure_states = ({{range .Failure}}{{.Entity.PascalName}}.{{.Content}}, {{end}}){{end}}
@@ -109,6 +110,8 @@ class {{.Name}}API:{{if .Description}}
109
110
{{- end}}
110
111
if status in target_states:
111
112
return poll
113
+ if callback:
114
+ callback(poll)
112
115
{{if .Failure -}}
113
116
if status in failure_states:
114
117
msg = f'failed to reach {{range $i, $e := .Success}}{{if $i}} or {{end}}{{$e.Content}}{{end}}, got {status}: {status_message}'
@@ -166,8 +169,9 @@ class {{.Name}}API:{{if .Description}}
166
169
167
170
{{define "method-call-retried" -}}
168
171
{{if .Response}}op_response = {{end}}{{template "method-do" .}}
169
- return Wait(self.{{.Wait.SnakeName}}, {{range $i, $b := .Wait.Binding}}{{if $i}}, {{end}}
170
- {{.PollField.SnakeName}}={{if .IsResponseBind}}op_response['{{.Bind.Name}}']{{else}}request.{{.Bind.SnakeName}}{{end}}
172
+ return Wait(self.{{.Wait.SnakeName}}
173
+ {{if .Response}}, response = {{.Response.PascalName}}.from_dict(op_response){{end}}
174
+ {{range .Wait.Binding}}, {{.PollField.SnakeName}}={{if .IsResponseBind}}op_response['{{.Bind.Name}}']{{else}}request.{{.Bind.SnakeName}}{{end}}
171
175
{{- end}})
172
176
{{- end}}
173
177
0 commit comments