@voxgig/sdkgen 0.43.0 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-sdkgen +1 -1
- package/dist/cmp/ReadmeEntity.js +9 -153
- package/dist/cmp/ReadmeEntity.js.map +1 -1
- package/dist/cmp/ReadmeIntro.js +9 -14
- package/dist/cmp/ReadmeIntro.js.map +1 -1
- package/dist/cmp/ReadmeModel.js +6 -4
- package/dist/cmp/ReadmeModel.js.map +1 -1
- package/dist/cmp/ReadmeOptions.js +9 -61
- package/dist/cmp/ReadmeOptions.js.map +1 -1
- package/dist/cmp/ReadmeRef.js +10 -1328
- package/dist/cmp/ReadmeRef.js.map +1 -1
- package/dist/sdkgen.d.ts +2 -2
- package/dist/sdkgen.js +2 -1
- package/dist/sdkgen.js.map +1 -1
- package/dist/utility.d.ts +2 -1
- package/dist/utility.js +9 -0
- package/dist/utility.js.map +1 -1
- package/package.json +1 -1
- package/project/.sdk/src/cmp/go/Config_go.ts +9 -4
- package/project/.sdk/src/cmp/go/Gitignore_go.ts +47 -0
- package/project/.sdk/src/cmp/go/Main_go.ts +3 -0
- package/project/.sdk/src/cmp/go/ReadmeEntity_go.ts +138 -0
- package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -3
- package/project/.sdk/src/cmp/go/ReadmeIntro_go.ts +18 -0
- package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +6 -3
- package/project/.sdk/src/cmp/go/ReadmeOptions_go.ts +58 -0
- package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +11 -7
- package/project/.sdk/src/cmp/go/ReadmeRef_go.ts +354 -0
- package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +6 -4
- package/project/.sdk/src/cmp/go/TestDirect_go.ts +18 -8
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +105 -54
- package/project/.sdk/src/cmp/js/Config_js.ts +18 -0
- package/project/.sdk/src/cmp/js/Gitignore_js.ts +35 -0
- package/project/.sdk/src/cmp/js/Main_js.ts +3 -0
- package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +138 -0
- package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +11 -6
- package/project/.sdk/src/cmp/js/ReadmeIntro_js.ts +18 -0
- package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +6 -3
- package/project/.sdk/src/cmp/js/ReadmeOptions_js.ts +58 -0
- package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +6 -4
- package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +384 -0
- package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +6 -4
- package/project/.sdk/src/cmp/js/TestDirect_js.ts +23 -12
- package/project/.sdk/src/cmp/js/TestEntity_js.ts +107 -74
- package/project/.sdk/src/cmp/js/fragment/Config.fragment.js +1 -5
- package/project/.sdk/src/cmp/lua/Config_lua.ts +9 -4
- package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +39 -0
- package/project/.sdk/src/cmp/lua/Main_lua.ts +3 -0
- package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +138 -0
- package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +6 -3
- package/project/.sdk/src/cmp/lua/ReadmeIntro_lua.ts +18 -0
- package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +6 -3
- package/project/.sdk/src/cmp/lua/ReadmeOptions_lua.ts +58 -0
- package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +6 -4
- package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +360 -0
- package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +6 -4
- package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +18 -8
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +95 -51
- package/project/.sdk/src/cmp/php/Config_php.ts +10 -8
- package/project/.sdk/src/cmp/php/Gitignore_php.ts +33 -0
- package/project/.sdk/src/cmp/php/Main_php.ts +3 -0
- package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +138 -0
- package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -3
- package/project/.sdk/src/cmp/php/ReadmeIntro_php.ts +18 -0
- package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +6 -3
- package/project/.sdk/src/cmp/php/ReadmeOptions_php.ts +58 -0
- package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +6 -4
- package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +358 -0
- package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +6 -4
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +18 -8
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +101 -54
- package/project/.sdk/src/cmp/py/Config_py.ts +9 -4
- package/project/.sdk/src/cmp/py/Gitignore_py.ts +55 -0
- package/project/.sdk/src/cmp/py/Main_py.ts +3 -0
- package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +138 -0
- package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +6 -3
- package/project/.sdk/src/cmp/py/ReadmeIntro_py.ts +18 -0
- package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +6 -3
- package/project/.sdk/src/cmp/py/ReadmeOptions_py.ts +58 -0
- package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +9 -6
- package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +356 -0
- package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +9 -6
- package/project/.sdk/src/cmp/py/TestDirect_py.ts +18 -8
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +100 -50
- package/project/.sdk/src/cmp/rb/Config_rb.ts +9 -4
- package/project/.sdk/src/cmp/rb/Gitignore_rb.ts +38 -0
- package/project/.sdk/src/cmp/rb/Main_rb.ts +3 -0
- package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +138 -0
- package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +6 -3
- package/project/.sdk/src/cmp/rb/ReadmeIntro_rb.ts +18 -0
- package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +6 -3
- package/project/.sdk/src/cmp/rb/ReadmeOptions_rb.ts +58 -0
- package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +6 -4
- package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +361 -0
- package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +6 -4
- package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +18 -8
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +95 -51
- package/project/.sdk/src/cmp/ts/Config_ts.ts +18 -0
- package/project/.sdk/src/cmp/ts/Gitignore_ts.ts +37 -0
- package/project/.sdk/src/cmp/ts/Main_ts.ts +3 -0
- package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +138 -0
- package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +11 -6
- package/project/.sdk/src/cmp/ts/ReadmeIntro_ts.ts +18 -0
- package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +9 -5
- package/project/.sdk/src/cmp/ts/ReadmeOptions_ts.ts +58 -0
- package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +6 -4
- package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +384 -0
- package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +6 -4
- package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +68 -20
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +109 -74
- package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +1 -5
- package/project/.sdk/tm/go/utility/prepare_auth.go +15 -1
- package/project/.sdk/tm/js/src/utility/PrepareAuthUtility.js +7 -1
- package/project/.sdk/tm/lua/utility/prepare_auth.lua +9 -1
- package/project/.sdk/tm/php/utility/PrepareAuth.php +11 -1
- package/project/.sdk/tm/py/utility/prepare_auth.py +10 -1
- package/project/.sdk/tm/rb/utility/prepare_auth.rb +8 -1
- package/project/.sdk/tm/ts/src/utility/MakeUrlUtility.ts +7 -8
- package/project/.sdk/tm/ts/src/utility/PrepareAuthUtility.ts +7 -1
- package/src/cmp/ReadmeEntity.ts +11 -178
- package/src/cmp/ReadmeIntro.ts +11 -25
- package/src/cmp/ReadmeModel.ts +7 -5
- package/src/cmp/ReadmeOptions.ts +12 -74
- package/src/cmp/ReadmeRef.ts +11 -1372
- package/src/sdkgen.ts +2 -1
- package/src/utility.ts +12 -0
- /package/project/.sdk/tm/go/utility/{make_target.go → make_point.go} +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const ReadmeOptions = cmp(function ReadmeOptions(props: any) {
|
|
6
|
+
const { target } = props
|
|
7
|
+
const { model } = props.ctx$
|
|
8
|
+
|
|
9
|
+
const publishedOptions = each(target.options).filter((option: any) => option.publish)
|
|
10
|
+
if (0 === publishedOptions.length) {
|
|
11
|
+
return
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
Content(`
|
|
15
|
+
|
|
16
|
+
## Options
|
|
17
|
+
|
|
18
|
+
Pass options when creating a client instance:
|
|
19
|
+
|
|
20
|
+
`)
|
|
21
|
+
|
|
22
|
+
Content(`\`\`\`python
|
|
23
|
+
client = ${model.Name}SDK({
|
|
24
|
+
`)
|
|
25
|
+
|
|
26
|
+
publishedOptions.map((option: any) => {
|
|
27
|
+
if ('apikey' === option.name) {
|
|
28
|
+
Content(` "${option.name}": os.environ.get("${model.NAME}_APIKEY"),
|
|
29
|
+
`)
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
Content(` # "${option.name}": ${option.kind === 'string' ? "\"...\"" : '...'},
|
|
33
|
+
`)
|
|
34
|
+
}
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
Content(`})
|
|
38
|
+
\`\`\`
|
|
39
|
+
|
|
40
|
+
`)
|
|
41
|
+
|
|
42
|
+
Content(`| Option | Type | Description |
|
|
43
|
+
| --- | --- | --- |
|
|
44
|
+
`)
|
|
45
|
+
|
|
46
|
+
publishedOptions.map((option: any) => {
|
|
47
|
+
Content(`| \`${option.name}\` | \`${option.kind}\` | ${option.short} |
|
|
48
|
+
`)
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
Content(`
|
|
52
|
+
`)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
export {
|
|
57
|
+
ReadmeOptions
|
|
58
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, each, Content } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, each, Content, isAuthActive } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -18,15 +18,18 @@ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
|
|
|
18
18
|
e.active !== false && e.ancestors && e.ancestors.length > 0
|
|
19
19
|
) as any
|
|
20
20
|
|
|
21
|
+
const authActive = isAuthActive(model)
|
|
22
|
+
const apikeyImport = authActive ? `import os\n` : ''
|
|
23
|
+
const apikeyArg = authActive
|
|
24
|
+
? `\n "apikey": os.environ.get("${model.NAME}_APIKEY"),\n`
|
|
25
|
+
: ''
|
|
26
|
+
|
|
21
27
|
Content(`### 1. Create a client
|
|
22
28
|
|
|
23
29
|
\`\`\`python
|
|
24
|
-
import
|
|
25
|
-
from ${model.const.Name.toLowerCase()}_sdk import ${model.const.Name}SDK
|
|
30
|
+
${apikeyImport}from ${model.const.Name.toLowerCase()}_sdk import ${model.const.Name}SDK
|
|
26
31
|
|
|
27
|
-
client = ${model.const.Name}SDK({
|
|
28
|
-
"apikey": os.environ.get("${model.NAME}_APIKEY"),
|
|
29
|
-
})
|
|
32
|
+
client = ${model.const.Name}SDK({${apikeyArg}})
|
|
30
33
|
\`\`\`
|
|
31
34
|
|
|
32
35
|
`)
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
|
|
2
|
+
import { cmp, each, Content, File, isAuthActive } from '@voxgig/sdkgen'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
KIT,
|
|
6
|
+
getModelPath,
|
|
7
|
+
} from '@voxgig/apidef'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
const OP_SIGNATURES: Record<string, { sig: string, returns: string, desc: string }> = {
|
|
11
|
+
load: {
|
|
12
|
+
sig: 'load(reqmatch, ctrl=None) -> tuple',
|
|
13
|
+
returns: '(result, err)',
|
|
14
|
+
desc: 'Load a single entity matching the given criteria.',
|
|
15
|
+
},
|
|
16
|
+
list: {
|
|
17
|
+
sig: 'list(reqmatch, ctrl=None) -> tuple',
|
|
18
|
+
returns: '(result, err)',
|
|
19
|
+
desc: 'List entities matching the given criteria. Returns an array.',
|
|
20
|
+
},
|
|
21
|
+
create: {
|
|
22
|
+
sig: 'create(reqdata, ctrl=None) -> tuple',
|
|
23
|
+
returns: '(result, err)',
|
|
24
|
+
desc: 'Create a new entity with the given data.',
|
|
25
|
+
},
|
|
26
|
+
update: {
|
|
27
|
+
sig: 'update(reqdata, ctrl=None) -> tuple',
|
|
28
|
+
returns: '(result, err)',
|
|
29
|
+
desc: 'Update an existing entity. The data must include the entity `id`.',
|
|
30
|
+
},
|
|
31
|
+
remove: {
|
|
32
|
+
sig: 'remove(reqmatch, ctrl=None) -> tuple',
|
|
33
|
+
returns: '(result, err)',
|
|
34
|
+
desc: 'Remove the entity matching the given criteria.',
|
|
35
|
+
},
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
const ReadmeRef = cmp(function ReadmeRef(props: any) {
|
|
40
|
+
const { target } = props
|
|
41
|
+
const { model } = props.ctx$
|
|
42
|
+
|
|
43
|
+
const entity = getModelPath(model, `main.${KIT}.entity`)
|
|
44
|
+
const feature = getModelPath(model, `main.${KIT}.feature`)
|
|
45
|
+
|
|
46
|
+
const publishedEntities = each(entity).filter((e: any) => e.active !== false)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
File({ name: 'REFERENCE.md' }, () => {
|
|
50
|
+
|
|
51
|
+
Content(`# ${model.Name} ${target.title} SDK Reference
|
|
52
|
+
|
|
53
|
+
Complete API reference for the ${model.Name} ${target.title} SDK.
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
## ${model.Name}SDK
|
|
57
|
+
|
|
58
|
+
### Constructor
|
|
59
|
+
|
|
60
|
+
`)
|
|
61
|
+
|
|
62
|
+
Content(`\`\`\`python
|
|
63
|
+
from ${model.name}_sdk import ${model.const.Name}SDK
|
|
64
|
+
|
|
65
|
+
client = ${model.const.Name}SDK(options)
|
|
66
|
+
\`\`\`
|
|
67
|
+
|
|
68
|
+
Create a new SDK client instance.
|
|
69
|
+
|
|
70
|
+
**Parameters:**
|
|
71
|
+
|
|
72
|
+
| Name | Type | Description |
|
|
73
|
+
| --- | --- | --- |
|
|
74
|
+
| \`options\` | \`dict\` | SDK configuration options. |
|
|
75
|
+
| \`options["apikey"]\` | \`str\` | API key for authentication. |
|
|
76
|
+
| \`options["base"]\` | \`str\` | Base URL for API requests. |
|
|
77
|
+
| \`options["prefix"]\` | \`str\` | URL prefix appended after base. |
|
|
78
|
+
| \`options["suffix"]\` | \`str\` | URL suffix appended after path. |
|
|
79
|
+
| \`options["headers"]\` | \`dict\` | Custom headers for all requests. |
|
|
80
|
+
| \`options["feature"]\` | \`dict\` | Feature configuration. |
|
|
81
|
+
| \`options["system"]\` | \`dict\` | System overrides (e.g. custom fetch). |
|
|
82
|
+
|
|
83
|
+
`)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
Content(`
|
|
87
|
+
### Static Methods
|
|
88
|
+
|
|
89
|
+
`)
|
|
90
|
+
|
|
91
|
+
Content(`#### \`${model.const.Name}SDK.test(testopts=None, sdkopts=None)\`
|
|
92
|
+
|
|
93
|
+
Create a test client with mock features active. Both arguments may be \`None\`.
|
|
94
|
+
|
|
95
|
+
\`\`\`python
|
|
96
|
+
client = ${model.const.Name}SDK.test()
|
|
97
|
+
\`\`\`
|
|
98
|
+
|
|
99
|
+
`)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
Content(`
|
|
103
|
+
### Instance Methods
|
|
104
|
+
|
|
105
|
+
`)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
// Entity factory methods
|
|
109
|
+
publishedEntities.map((ent: any) => {
|
|
110
|
+
Content(`#### \`${ent.Name}(data=None)\`
|
|
111
|
+
|
|
112
|
+
Create a new \`${ent.Name}Entity\` instance. Pass \`None\` for no initial data.
|
|
113
|
+
|
|
114
|
+
`)
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
Content(`#### \`options_map() -> dict\`
|
|
119
|
+
|
|
120
|
+
Return a deep copy of the current SDK options.
|
|
121
|
+
|
|
122
|
+
#### \`get_utility() -> Utility\`
|
|
123
|
+
|
|
124
|
+
Return a copy of the SDK utility object.
|
|
125
|
+
|
|
126
|
+
#### \`direct(fetchargs=None) -> tuple\`
|
|
127
|
+
|
|
128
|
+
Make a direct HTTP request to any API endpoint. Returns \`(result, err)\`.
|
|
129
|
+
|
|
130
|
+
**Parameters:**
|
|
131
|
+
|
|
132
|
+
| Name | Type | Description |
|
|
133
|
+
| --- | --- | --- |
|
|
134
|
+
| \`fetchargs["path"]\` | \`str\` | URL path with optional \`{param}\` placeholders. |
|
|
135
|
+
| \`fetchargs["method"]\` | \`str\` | HTTP method (default: \`"GET"\`). |
|
|
136
|
+
| \`fetchargs["params"]\` | \`dict\` | Path parameter values. |
|
|
137
|
+
| \`fetchargs["query"]\` | \`dict\` | Query string parameters. |
|
|
138
|
+
| \`fetchargs["headers"]\` | \`dict\` | Request headers (merged with defaults). |
|
|
139
|
+
| \`fetchargs["body"]\` | \`any\` | Request body (dicts are JSON-serialized). |
|
|
140
|
+
|
|
141
|
+
**Returns:** \`(result_dict, err)\`
|
|
142
|
+
|
|
143
|
+
#### \`prepare(fetchargs=None) -> tuple\`
|
|
144
|
+
|
|
145
|
+
Prepare a fetch definition without sending. Returns \`(fetchdef, err)\`.
|
|
146
|
+
|
|
147
|
+
`)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
// Entity reference sections
|
|
151
|
+
publishedEntities.map((ent: any) => {
|
|
152
|
+
const opnames = Object.keys(ent.op || {})
|
|
153
|
+
const fields = ent.fields || []
|
|
154
|
+
|
|
155
|
+
Content(`
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## ${ent.Name}Entity
|
|
159
|
+
|
|
160
|
+
`)
|
|
161
|
+
|
|
162
|
+
if (ent.short) {
|
|
163
|
+
Content(`${ent.short}
|
|
164
|
+
|
|
165
|
+
`)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
Content(`\`\`\`python
|
|
169
|
+
${ent.name} = client.${ent.Name}()
|
|
170
|
+
\`\`\`
|
|
171
|
+
|
|
172
|
+
`)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
// Field schema
|
|
176
|
+
if (fields.length > 0) {
|
|
177
|
+
Content(`### Fields
|
|
178
|
+
|
|
179
|
+
| Field | Type | Required | Description |
|
|
180
|
+
| --- | --- | --- | --- |
|
|
181
|
+
`)
|
|
182
|
+
each(fields, (field: any) => {
|
|
183
|
+
const req = field.req ? 'Yes' : 'No'
|
|
184
|
+
const desc = field.short || ''
|
|
185
|
+
Content(`| \`${field.name}\` | \`${field.type || 'any'}\` | ${req} | ${desc} |
|
|
186
|
+
`)
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
Content(`
|
|
190
|
+
`)
|
|
191
|
+
|
|
192
|
+
// Field operations breakdown
|
|
193
|
+
const hasFieldOps = fields.some((f: any) => f.op && Object.keys(f.op).length > 0)
|
|
194
|
+
if (hasFieldOps) {
|
|
195
|
+
Content(`### Field Usage by Operation
|
|
196
|
+
|
|
197
|
+
| Field | load | list | create | update | remove |
|
|
198
|
+
| --- | --- | --- | --- | --- | --- |
|
|
199
|
+
`)
|
|
200
|
+
each(fields, (field: any) => {
|
|
201
|
+
const fops = field.op || {}
|
|
202
|
+
const cols = ['load', 'list', 'create', 'update', 'remove'].map((op: string) => {
|
|
203
|
+
if (!opnames.includes(op)) return '-'
|
|
204
|
+
const fop = fops[op]
|
|
205
|
+
if (null == fop) return '-'
|
|
206
|
+
if (fop.active === false) return '-'
|
|
207
|
+
return 'Yes'
|
|
208
|
+
})
|
|
209
|
+
Content(`| \`${field.name}\` | ${cols.join(' | ')} |
|
|
210
|
+
`)
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
Content(`
|
|
214
|
+
`)
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
// Operation details
|
|
220
|
+
if (opnames.length > 0) {
|
|
221
|
+
Content(`### Operations
|
|
222
|
+
|
|
223
|
+
`)
|
|
224
|
+
|
|
225
|
+
opnames.map((opname: string) => {
|
|
226
|
+
const info = OP_SIGNATURES[opname]
|
|
227
|
+
if (!info) return
|
|
228
|
+
|
|
229
|
+
Content(`#### \`${info.sig}\`
|
|
230
|
+
|
|
231
|
+
${info.desc}
|
|
232
|
+
|
|
233
|
+
`)
|
|
234
|
+
|
|
235
|
+
// Show example
|
|
236
|
+
if ('load' === opname || 'remove' === opname) {
|
|
237
|
+
Content(`\`\`\`python
|
|
238
|
+
result, err = client.${ent.Name}().${opname}({"id": "${ent.name}_id"})
|
|
239
|
+
\`\`\`
|
|
240
|
+
|
|
241
|
+
`)
|
|
242
|
+
}
|
|
243
|
+
else if ('list' === opname) {
|
|
244
|
+
Content(`\`\`\`python
|
|
245
|
+
results, err = client.${ent.Name}().list({})
|
|
246
|
+
\`\`\`
|
|
247
|
+
|
|
248
|
+
`)
|
|
249
|
+
}
|
|
250
|
+
else if ('create' === opname) {
|
|
251
|
+
Content(`\`\`\`python
|
|
252
|
+
result, err = client.${ent.Name}().create({
|
|
253
|
+
`)
|
|
254
|
+
each(fields, (field: any) => {
|
|
255
|
+
if ('id' !== field.name && field.req) {
|
|
256
|
+
Content(` "${field.name}": # ${field.type || 'value'},
|
|
257
|
+
`)
|
|
258
|
+
}
|
|
259
|
+
})
|
|
260
|
+
Content(`})
|
|
261
|
+
\`\`\`
|
|
262
|
+
|
|
263
|
+
`)
|
|
264
|
+
}
|
|
265
|
+
else if ('update' === opname) {
|
|
266
|
+
Content(`\`\`\`python
|
|
267
|
+
result, err = client.${ent.Name}().update({
|
|
268
|
+
"id": "${ent.name}_id",
|
|
269
|
+
# Fields to update
|
|
270
|
+
})
|
|
271
|
+
\`\`\`
|
|
272
|
+
|
|
273
|
+
`)
|
|
274
|
+
}
|
|
275
|
+
})
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
// Common methods
|
|
280
|
+
Content(`### Common Methods
|
|
281
|
+
|
|
282
|
+
#### \`data_get() -> dict\`
|
|
283
|
+
|
|
284
|
+
Get the entity data.
|
|
285
|
+
|
|
286
|
+
#### \`data_set(data)\`
|
|
287
|
+
|
|
288
|
+
Set the entity data.
|
|
289
|
+
|
|
290
|
+
#### \`match_get() -> dict\`
|
|
291
|
+
|
|
292
|
+
Get the entity match criteria.
|
|
293
|
+
|
|
294
|
+
#### \`match_set(match)\`
|
|
295
|
+
|
|
296
|
+
Set the entity match criteria.
|
|
297
|
+
|
|
298
|
+
#### \`make() -> Entity\`
|
|
299
|
+
|
|
300
|
+
Create a new \`${ent.Name}Entity\` instance with the same options.
|
|
301
|
+
|
|
302
|
+
#### \`get_name() -> str\`
|
|
303
|
+
|
|
304
|
+
Return the entity name.
|
|
305
|
+
|
|
306
|
+
`)
|
|
307
|
+
})
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
// Features section
|
|
311
|
+
const activeFeatures = each(feature).filter((f: any) => f.active)
|
|
312
|
+
if (activeFeatures.length > 0) {
|
|
313
|
+
Content(`
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## Features
|
|
317
|
+
|
|
318
|
+
| Feature | Version | Description |
|
|
319
|
+
| --- | --- | --- |
|
|
320
|
+
`)
|
|
321
|
+
|
|
322
|
+
activeFeatures.map((f: any) => {
|
|
323
|
+
Content(`| \`${f.name}\` | ${f.version || '0.0.1'} | ${f.title || ''} |
|
|
324
|
+
`)
|
|
325
|
+
})
|
|
326
|
+
|
|
327
|
+
Content(`
|
|
328
|
+
|
|
329
|
+
Features are activated via the \`feature\` option:
|
|
330
|
+
|
|
331
|
+
`)
|
|
332
|
+
|
|
333
|
+
Content(`\`\`\`python
|
|
334
|
+
client = ${model.const.Name}SDK({
|
|
335
|
+
"feature": {
|
|
336
|
+
`)
|
|
337
|
+
activeFeatures.map((f: any) => {
|
|
338
|
+
Content(` "${f.name}": {"active": True},
|
|
339
|
+
`)
|
|
340
|
+
})
|
|
341
|
+
Content(` },
|
|
342
|
+
})
|
|
343
|
+
\`\`\`
|
|
344
|
+
|
|
345
|
+
`)
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
})
|
|
349
|
+
})
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
export {
|
|
355
|
+
ReadmeRef
|
|
356
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { cmp, Content } from '@voxgig/sdkgen'
|
|
2
|
+
import { cmp, Content, isAuthActive } from '@voxgig/sdkgen'
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
KIT,
|
|
@@ -15,13 +15,16 @@ const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
|
|
|
15
15
|
|
|
16
16
|
const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
|
|
17
17
|
|
|
18
|
+
const authActive = isAuthActive(model)
|
|
19
|
+
const apikeyImport = authActive ? `import os\n` : ''
|
|
20
|
+
const apikeyArg = authActive
|
|
21
|
+
? `\n "apikey": os.environ.get("${model.NAME}_APIKEY"),\n`
|
|
22
|
+
: ''
|
|
23
|
+
|
|
18
24
|
Content(`\`\`\`python
|
|
19
|
-
import
|
|
20
|
-
from ${model.const.Name.toLowerCase()}_sdk import ${model.const.Name}SDK
|
|
25
|
+
${apikeyImport}from ${model.const.Name.toLowerCase()}_sdk import ${model.const.Name}SDK
|
|
21
26
|
|
|
22
|
-
client = ${model.const.Name}SDK({
|
|
23
|
-
"apikey": os.environ.get("${model.NAME}_APIKEY"),
|
|
24
|
-
})
|
|
27
|
+
client = ${model.const.Name}SDK({${apikeyArg}})
|
|
25
28
|
|
|
26
29
|
`)
|
|
27
30
|
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
|
|
2
2
|
import {
|
|
3
|
+
Model,
|
|
4
|
+
ModelEntity,
|
|
5
|
+
nom,
|
|
3
6
|
depluralize,
|
|
4
7
|
} from '@voxgig/apidef'
|
|
5
8
|
|
|
@@ -8,6 +11,7 @@ import {
|
|
|
8
11
|
File,
|
|
9
12
|
cmp,
|
|
10
13
|
snakify,
|
|
14
|
+
isAuthActive,
|
|
11
15
|
} from '@voxgig/sdkgen'
|
|
12
16
|
|
|
13
17
|
|
|
@@ -51,12 +55,20 @@ function normalizePathParams(
|
|
|
51
55
|
|
|
52
56
|
const TestDirect = cmp(function TestDirect(props: any) {
|
|
53
57
|
const ctx$ = props.ctx$
|
|
54
|
-
const model = ctx$.model
|
|
58
|
+
const model: Model = ctx$.model
|
|
55
59
|
|
|
56
60
|
const target = props.target
|
|
57
|
-
const entity = props.entity
|
|
61
|
+
const entity: ModelEntity = props.entity
|
|
58
62
|
|
|
59
|
-
const PROJECTNAME = model
|
|
63
|
+
const PROJECTNAME = nom(model, 'Name').toUpperCase().replace(/[^A-Z_]/g, '_')
|
|
64
|
+
|
|
65
|
+
const authActive = isAuthActive(model)
|
|
66
|
+
const apikeyEnvEntry = authActive
|
|
67
|
+
? `\n "${PROJECTNAME}_APIKEY": "NONE",`
|
|
68
|
+
: ''
|
|
69
|
+
const apikeyLiveField = authActive
|
|
70
|
+
? `\n "apikey": env.get("${PROJECTNAME}_APIKEY"),`
|
|
71
|
+
: ''
|
|
60
72
|
|
|
61
73
|
const opnames = Object.keys(entity.op)
|
|
62
74
|
const hasLoad = opnames.includes('load')
|
|
@@ -77,7 +89,7 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
77
89
|
const listPath = listPoint ? normalizePathParams(listPoint.parts || [], listPoint?.args?.params || [], listPoint?.rename?.param) : ''
|
|
78
90
|
const listParams = listPoint?.args?.params || []
|
|
79
91
|
|
|
80
|
-
const entidEnvVar = `${PROJECTNAME}_TEST_${entity
|
|
92
|
+
const entidEnvVar = `${PROJECTNAME}_TEST_${nom(entity, 'NAME').replace(/[^A-Z_]/g, '_')}_ENTID`
|
|
81
93
|
|
|
82
94
|
File({ name: 'test_' + entity.name + '_direct.' + target.ext }, () => {
|
|
83
95
|
|
|
@@ -200,15 +212,13 @@ def _${entity.name}_direct_setup(mockres):
|
|
|
200
212
|
|
|
201
213
|
env = runner.env_override({
|
|
202
214
|
"${entidEnvVar}": {},
|
|
203
|
-
"${PROJECTNAME}_TEST_LIVE": "FALSE"
|
|
204
|
-
"${PROJECTNAME}_APIKEY": "NONE",
|
|
215
|
+
"${PROJECTNAME}_TEST_LIVE": "FALSE",${apikeyEnvEntry}
|
|
205
216
|
})
|
|
206
217
|
|
|
207
218
|
live = env.get("${PROJECTNAME}_TEST_LIVE") == "TRUE"
|
|
208
219
|
|
|
209
220
|
if live:
|
|
210
|
-
merged_opts = {
|
|
211
|
-
"apikey": env.get("${PROJECTNAME}_APIKEY"),
|
|
221
|
+
merged_opts = {${apikeyLiveField}
|
|
212
222
|
}
|
|
213
223
|
client = ${model.const.Name}SDK(merged_opts)
|
|
214
224
|
return {
|