syncano 3.1.4 → 4.0.0.alpha

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.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -1
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +3 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +25 -1
  7. data/Guardfile +22 -4
  8. data/README.md +68 -447
  9. data/Rakefile +48 -5
  10. data/circle.yml +10 -0
  11. data/lib/active_attr/dirty.rb +3 -17
  12. data/lib/active_attr/typecasting/hash_typecaster.rb +34 -0
  13. data/lib/active_attr/typecasting_override.rb +29 -0
  14. data/lib/syncano.rb +53 -92
  15. data/lib/syncano/api.rb +13 -0
  16. data/lib/syncano/connection.rb +97 -0
  17. data/lib/syncano/model/associations.rb +121 -0
  18. data/lib/syncano/{active_record/association → model/associations}/base.rb +5 -5
  19. data/lib/syncano/{active_record/association → model/associations}/belongs_to.rb +6 -6
  20. data/lib/syncano/{active_record/association → model/associations}/has_many.rb +15 -9
  21. data/lib/syncano/{active_record/association → model/associations}/has_one.rb +4 -4
  22. data/lib/syncano/model/base.rb +257 -0
  23. data/lib/syncano/{active_record → model}/callbacks.rb +16 -13
  24. data/lib/syncano/{active_record → model}/scope_builder.rb +53 -69
  25. data/lib/syncano/query_builder.rb +19 -129
  26. data/lib/syncano/resources.rb +126 -0
  27. data/lib/syncano/resources/base.rb +304 -300
  28. data/lib/syncano/resources/collection.rb +19 -223
  29. data/lib/syncano/resources/space.rb +29 -0
  30. data/lib/syncano/schema.rb +86 -0
  31. data/lib/syncano/schema/attribute_definition.rb +83 -0
  32. data/lib/syncano/schema/resource_definition.rb +36 -0
  33. data/lib/syncano/scope.rb +10 -0
  34. data/lib/syncano/version.rb +3 -4
  35. data/spec/integration/syncano_spec.rb +228 -0
  36. data/spec/spec_helper.rb +15 -9
  37. data/spec/unit/api_spec.rb +5 -0
  38. data/spec/unit/connection_spec.rb +137 -0
  39. data/spec/unit/query_builder_spec.rb +75 -0
  40. data/spec/unit/resources/collection_spec.rb +36 -0
  41. data/spec/unit/resources/space_spec.rb +28 -0
  42. data/spec/unit/resources_base_spec.rb +185 -0
  43. data/spec/unit/schema/attribute_definition_spec.rb +18 -0
  44. data/spec/unit/schema/resource_definition_spec.rb +25 -0
  45. data/spec/unit/schema_spec.rb +3532 -0
  46. data/spec/unit/syncano_spec.rb +63 -0
  47. data/syncano.gemspec +8 -14
  48. metadata +85 -210
  49. data/lib/generators/syncano/install_generator.rb +0 -17
  50. data/lib/generators/syncano/templates/initializers/syncano.rb +0 -7
  51. data/lib/syncano/active_record/associations.rb +0 -112
  52. data/lib/syncano/active_record/base.rb +0 -318
  53. data/lib/syncano/batch_queue.rb +0 -58
  54. data/lib/syncano/batch_queue_element.rb +0 -33
  55. data/lib/syncano/clients/base.rb +0 -123
  56. data/lib/syncano/clients/rest.rb +0 -79
  57. data/lib/syncano/clients/sync.rb +0 -164
  58. data/lib/syncano/errors.rb +0 -17
  59. data/lib/syncano/jimson_client.rb +0 -66
  60. data/lib/syncano/packets/auth.rb +0 -27
  61. data/lib/syncano/packets/base.rb +0 -70
  62. data/lib/syncano/packets/call.rb +0 -34
  63. data/lib/syncano/packets/call_response.rb +0 -33
  64. data/lib/syncano/packets/error.rb +0 -19
  65. data/lib/syncano/packets/message.rb +0 -30
  66. data/lib/syncano/packets/notification.rb +0 -39
  67. data/lib/syncano/packets/ping.rb +0 -12
  68. data/lib/syncano/resources/admin.rb +0 -26
  69. data/lib/syncano/resources/api_key.rb +0 -108
  70. data/lib/syncano/resources/data_object.rb +0 -316
  71. data/lib/syncano/resources/folder.rb +0 -88
  72. data/lib/syncano/resources/notifications/base.rb +0 -103
  73. data/lib/syncano/resources/notifications/create.rb +0 -20
  74. data/lib/syncano/resources/notifications/destroy.rb +0 -20
  75. data/lib/syncano/resources/notifications/message.rb +0 -9
  76. data/lib/syncano/resources/notifications/update.rb +0 -24
  77. data/lib/syncano/resources/project.rb +0 -96
  78. data/lib/syncano/resources/role.rb +0 -11
  79. data/lib/syncano/resources/subscription.rb +0 -12
  80. data/lib/syncano/resources/user.rb +0 -65
  81. data/lib/syncano/response.rb +0 -22
  82. data/lib/syncano/sync_connection.rb +0 -133
  83. data/spec/admins_spec.rb +0 -16
  84. data/spec/api_keys_spec.rb +0 -34
  85. data/spec/collections_spec.rb +0 -67
  86. data/spec/data_objects_spec.rb +0 -113
  87. data/spec/folders_spec.rb +0 -39
  88. data/spec/notifications_spec.rb +0 -43
  89. data/spec/projects_spec.rb +0 -35
  90. data/spec/roles_spec.rb +0 -13
  91. data/spec/sync_resources_spec.rb +0 -35
  92. data/spec/syncano_spec.rb +0 -9
@@ -0,0 +1,75 @@
1
+ require_relative '../spec_helper'
2
+
3
+
4
+ describe Syncano::QueryBuilder do
5
+ let(:connection) { double('connection') }
6
+ let(:resource_class) { double('resource_class') }
7
+ let(:scope_parameters) { { foo: :bar } }
8
+
9
+ subject { described_class.new(connection, resource_class, scope_parameters) }
10
+
11
+ describe '.initialize' do
12
+ it { expect(subject.instance_eval{ connection }).to eq(connection) }
13
+ it { expect(subject.instance_eval{ resource_class }).to eq(resource_class) }
14
+ it { expect(subject.instance_eval{ scope_parameters }).to eq(scope_parameters) }
15
+ end
16
+
17
+ describe '.all' do
18
+ specify do
19
+ expect(resource_class).to receive(:all).with(connection, scope_parameters, {})
20
+ subject.all
21
+ end
22
+ end
23
+
24
+ describe '.first' do
25
+ specify do
26
+ expect(resource_class).to receive(:first).with(connection, scope_parameters, {})
27
+ subject.first
28
+ end
29
+ end
30
+
31
+ describe '.last' do
32
+ specify do
33
+ expect(resource_class).to receive(:last).with(connection, scope_parameters, {})
34
+ subject.last
35
+ end
36
+ end
37
+
38
+ describe '.find' do
39
+ specify do
40
+ key = 100
41
+ expect(resource_class).to receive(:find).with(connection, scope_parameters, key)
42
+ subject.find(key)
43
+ end
44
+ end
45
+
46
+ describe '.new' do
47
+ specify do
48
+ attributes = { bar: :foo }
49
+ expect(resource_class).to receive(:new).with(connection, scope_parameters, attributes)
50
+ subject.new(attributes)
51
+ end
52
+ end
53
+
54
+ describe '.create' do
55
+ specify do
56
+ attributes = { bar: :foo }
57
+ expect(resource_class).to receive(:create).with(connection, scope_parameters, attributes)
58
+ subject.create(attributes)
59
+ end
60
+ end
61
+
62
+ describe '.space' do
63
+ let(:options) { double }
64
+ let(:resource) { double }
65
+ let(:space) { double }
66
+
67
+ before do
68
+ expect(Syncano::Resources::Space).to receive(:new).with(resource, subject, options).and_return(space)
69
+ end
70
+
71
+ it 'should return a Space object with passed options' do
72
+ expect(subject.space(resource, options)).to eq(space)
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe Syncano::Resources::Collection do
4
+ subject { described_class.from_database response, scope, element_class }
5
+
6
+ let(:response) { { 'objects' => objects, 'prev' => previous, 'next' => subsequent } }
7
+ let(:objects) { (1..4).to_a }
8
+ let(:scope) { spy('scope') }
9
+ let(:element_class) { double(new: 'blah') }
10
+ let(:subsequent) { 'http://next' }
11
+ let(:previous) { 'https://prev' }
12
+
13
+ describe '#next?' do
14
+ context 'where there is next' do
15
+ it { is_expected.to be_next }
16
+ end
17
+
18
+ context 'when there is no next' do
19
+ let(:subsequent) { nil }
20
+
21
+ it { is_expected.not_to be_next }
22
+ end
23
+ end
24
+
25
+ describe '#prev?' do
26
+ context 'when there is prev' do
27
+ it { is_expected.to be_prev }
28
+ end
29
+
30
+ context 'when there is no prev' do
31
+ let(:previous) { nil }
32
+
33
+ it { is_expected.not_to be_prev }
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe Syncano::Resources::Space do
4
+ let(:resource) { double('resource', primary_key: 123) }
5
+ let(:query_builder) { spy('query_builder') }
6
+
7
+ it 'should pass the query to the query builder with a default direction' do
8
+ described_class.new(resource, query_builder).all
9
+
10
+ expect(query_builder).to have_received(:all).with(last_pk: 123, direction: 1)
11
+ end
12
+
13
+ it 'should translate order desc to query builder direction' do
14
+ described_class.new(resource, query_builder, direction: :prev).all
15
+
16
+ expect(query_builder).to have_received(:all).with(last_pk: 123, direction: 0)
17
+ end
18
+
19
+ it 'should translate order asc to query builder direction' do
20
+ described_class.new(resource, query_builder, direction: :next).all
21
+
22
+ expect(query_builder).to have_received(:all).with(last_pk: 123, direction: 1)
23
+ end
24
+
25
+ it 'should raise an error on invalid options' do
26
+ expect { described_class.new(resource, query_builder, direction: :koza).all }.to raise_error(Syncano::RuntimeError)
27
+ end
28
+ end
@@ -0,0 +1,185 @@
1
+ require_relative '../spec_helper'
2
+
3
+
4
+ require 'rspec/expectations'
5
+
6
+ describe Syncano::Resources::Base do
7
+ subject do
8
+ Syncano::Resources.new_resource_class(
9
+ Syncano::Schema::ResourceDefinition.new('same_name',
10
+ { :attributes => { 'name' => { 'read_only' => false,
11
+ 'primary_key' => true,
12
+ 'required' => true,
13
+ 'label' => 'name',
14
+ 'max_length' => 64,
15
+ 'type' => 'string' },
16
+
17
+ 'created_at' => { 'read_only' => true,
18
+ 'required' => false,
19
+ 'type' => 'datetime',
20
+ 'label' => 'created at' },
21
+ 'updated_at' => { 'read_only' => true,
22
+ 'required' => false,
23
+ 'type' => 'datetime',
24
+ 'label' => 'updated at' },
25
+ 'role' => { 'read_only' => true,
26
+ 'required' => false,
27
+ 'type' => 'field' },
28
+ 'owner' => { 'first_name' => { 'read_only' => false,
29
+ 'max_length' => 35,
30
+ 'required' => false,
31
+ 'type' => 'string',
32
+ 'label' => 'first name' },
33
+ 'last_name' => { 'read_only' => false,
34
+ 'max_length' => 35,
35
+ 'required' => false,
36
+ 'type' => 'string',
37
+ 'label' => 'last name' },
38
+ 'id' => { 'read_only' => true,
39
+ 'required' => false,
40
+ 'type' => 'integer',
41
+ 'label' => 'ID' },
42
+ 'email' => { 'read_only' => false,
43
+ 'max_length' => 254,
44
+ 'required' => true,
45
+ 'type' => 'email',
46
+ 'label' => 'email address' } },
47
+ 'metadata' => { 'read_only' => false,
48
+ 'required' => false,
49
+ 'type' => 'field',
50
+ 'label' => 'metadata' },
51
+ 'description' => { 'read_only' => false,
52
+ 'required' => false,
53
+ 'type' => 'string',
54
+ 'label' => 'description' } },
55
+ :associations => { 'read_only' => true,
56
+ 'required' => false,
57
+ 'type' => 'links',
58
+ 'links' => [{ 'type' => 'detail',
59
+ 'name' => 'self' },
60
+ { 'type' => 'list',
61
+ 'name' => 'admins' },
62
+ { 'type' => 'list',
63
+ 'name' => 'classes' },
64
+ { 'type' => 'list',
65
+ 'name' => 'codeboxes' },
66
+ { 'type' => 'list',
67
+ 'name' => 'runtimes' },
68
+ { 'type' => 'list',
69
+ 'name' => 'invitations' },
70
+ { 'type' => 'list',
71
+ 'name' => 'api_keys' },
72
+ { 'type' => 'list',
73
+ 'name' => 'triggers' },
74
+ { 'type' => 'list',
75
+ 'name' => 'webhooks' }] },
76
+ :collection => { :path => '/v1/instances/',
77
+ :http_methods => ['post',
78
+ 'get'],
79
+ :params => [] },
80
+ :member => { :path => '/v1/instances/{ name }/',
81
+ :http_methods => ['put',
82
+ 'get',
83
+ 'patch',
84
+ 'delete'],
85
+ :params => ['name'] },
86
+ :custom_methods => [] })
87
+ )
88
+ end
89
+
90
+ let(:connection) { double('connection') }
91
+ let(:scope_parameters) { double('scope_parameters') }
92
+
93
+ describe '.find' do
94
+ let(:response) {
95
+ {'name'=>'kozakoza',
96
+ 'links'=>{'runtimes'=>'/v1/instances/kozakoza/codeboxes/runtimes/',
97
+ 'triggers'=>'/v1/instances/kozakoza/triggers/',
98
+ 'self'=>'/v1/instances/kozakoza/',
99
+ 'invitations'=>'/v1/instances/kozakoza/invitations/',
100
+ 'admins'=>'/v1/instances/kozakoza/admins/',
101
+ 'classes'=>'/v1/instances/kozakoza/classes/',
102
+ 'webhooks'=>'/v1/instances/kozakoza/webhooks/',
103
+ 'api_keys'=>'/v1/instances/kozakoza/api_keys/',
104
+ 'codeboxes'=>'/v1/instances/kozakoza/codeboxes/'},
105
+ 'created_at'=>'2015-02-27T16:57:08.475612Z',
106
+ 'updated_at'=>'2015-02-27T16:57:08.483462Z',
107
+ 'role'=>'full',
108
+ 'owner'=>{'first_name'=>'',
109
+ 'last_name'=>'',
110
+ 'id'=>124,
111
+ 'email'=>'maciej.lotkowski@gmail.com'},
112
+ 'metadata'=>{},
113
+ 'description'=>''}
114
+
115
+ }
116
+ before do
117
+ expect(connection).to receive(:request).and_return(response)
118
+ end
119
+
120
+ it 'should find a resource' do
121
+ subject.find(connection, scope_parameters, 'PK')
122
+ end
123
+ end
124
+
125
+ describe '.all' do
126
+ let(:response) { { 'objects' => [{}] } }
127
+
128
+ before do
129
+ expect(connection).to receive(:request).and_return(response)
130
+ end
131
+
132
+ it 'should get collection of resources' do
133
+ expect(subject.all(connection, {})).to be_a(Syncano::Resources::Collection)
134
+ end
135
+ end
136
+
137
+ describe '.new' do
138
+ it 'should instantiate new resource' do
139
+ expect(subject.new(connection, {}, {}, true)).to be_a subject
140
+ end
141
+
142
+ it 'should init attributes' do
143
+ resource = subject.new(connection, {}, { name: 'test' }, true)
144
+ expect(resource.name).to eq('test')
145
+ end
146
+
147
+ it 'should clean changes if initialized from database' do
148
+ resource = subject.new(connection, {}, { links: { self: '/v1/instances/test/' }, name: 'test' }, true)
149
+ expect(resource.changed?).to eq(false)
150
+ end
151
+
152
+ it 'should keep changes if not initialized from database' do
153
+ resource = subject.new(connection, {}, { links: { self: '/v1/instances/test/' }, name: 'test' }, false)
154
+ expect(resource.changed?).to eq(true)
155
+ end
156
+
157
+ it 'should mark resource as not new if initialized with self path' do
158
+ resource = subject.new(connection, {}, { links: { self: '/v1/instances/test/' } }, true)
159
+ expect(resource.new_record?).to be(false)
160
+ end
161
+
162
+ it 'should mark resource as new if initialized without self path' do
163
+ resource = subject.new(connection, {}, { name: 'test' }, true)
164
+ expect(resource.new_record?).to be(true)
165
+ end
166
+ end
167
+
168
+ describe '.create' do
169
+ it 'should create new object in Syncano' do
170
+
171
+ end
172
+ end
173
+
174
+ describe '.update_attributes' do
175
+ it 'should create update object\'s attributes in Syncano' do
176
+
177
+ end
178
+ end
179
+
180
+ describe '.destroy' do
181
+ it 'should delete object from Syncano' do
182
+
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe Syncano::Schema::AttributeDefinition do
4
+ let(:name) { 'example' }
5
+ let(:raw_definition) { {} }
6
+
7
+ subject { described_class.new name, raw_definition }
8
+
9
+ specify { expect(subject.name).to eq(name) }
10
+
11
+ context 'when name is "class"' do
12
+ let(:name) { 'class' }
13
+
14
+ it 'should be named associated_class to avoid method name collision' do
15
+ expect(subject.name).to eq('associated_class')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe Syncano::Schema::ResourceDefinition do
4
+ let(:attribute) { double 'attribute' }
5
+ let(:definition) do
6
+ described_class.new(name, attributes: { 'koza' => raw_attribute },
7
+ associations: {
8
+ 'links' => [{ 'name' => 'koza', 'type' => 'detail' }]
9
+ })
10
+ end
11
+ let(:name) { 'Kiszka' }
12
+ let(:raw_attribute) { double 'raw attribute' }
13
+
14
+ before do
15
+ expect(Syncano::Schema::AttributeDefinition).to receive(:new).with('koza', raw_attribute).and_return(attribute)
16
+ end
17
+
18
+ specify { expect(definition.attributes).to eq([attribute]) }
19
+
20
+ specify { expect(definition.name).to eq(name) }
21
+
22
+ it 'should delete colliding links' do
23
+ expect(definition[:associations]['links']).to be_empty
24
+ end
25
+ end
@@ -0,0 +1,3532 @@
1
+ require_relative '../spec_helper'
2
+
3
+
4
+ require 'rspec/expectations'
5
+ require 'active_attr/matchers/have_attribute_matcher'
6
+ require 'shoulda-matchers'
7
+
8
+ describe Syncano::Schema do
9
+ include ActiveAttr::Matchers
10
+
11
+ let(:connection) { double("connection") }
12
+
13
+ subject { described_class.new connection }
14
+
15
+ before do
16
+ expect(connection).to receive(:request).with(:get, described_class::SCHEMA_PATH) { schema }
17
+
18
+ Syncano::Resources.instance_eval do
19
+ constants.each do |const|
20
+ if ![:Base, :Collection, :Space].include?(const) && const_defined?(const)
21
+ remove_const const
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ describe 'process!' do
28
+ it 'defintes classes according to the schema' do
29
+ expect { Syncano::Resources::Class }.to raise_error(NameError)
30
+
31
+ subject.process!
32
+
33
+ expect { Syncano::Resources::Class }.to_not raise_error
34
+
35
+ expect(Syncano::Resources::Class).to have_attribute(:name)
36
+ expect(Syncano::Resources::Class).to have_attribute(:status)
37
+ expect(Syncano::Resources::Class).to have_attribute(:created_at)
38
+ expect(Syncano::Resources::Class).to have_attribute(:description)
39
+ expect(Syncano::Resources::Class).to have_attribute(:updated_at)
40
+ expect(Syncano::Resources::Class).to have_attribute(:objects_count)
41
+ expect(Syncano::Resources::Class).to have_attribute(:metadata)
42
+ expect(Syncano::Resources::Class).to have_attribute(:revision)
43
+
44
+ class_instance = Syncano::Resources::Class.new(connection, {}, { links: {} })
45
+
46
+ expect(class_instance).to validate_presence_of(:name)
47
+ expect(class_instance).to validate_length_of(:name).is_at_most(50)
48
+
49
+ expect(class_instance).to respond_to(:objects)
50
+
51
+ code_box_instance = Syncano::Resources::CodeBox.new(connection, {}, { links: {} })
52
+ expect(code_box_instance).to validate_inclusion_of(:runtime_name).
53
+ in_array(%w(nodejs ruby python))
54
+
55
+ end
56
+
57
+ it 'defines foreign keys attributes when attributes names collide with links' do
58
+ subject.process!
59
+
60
+ schedule_instance = Syncano::Resources::Schedule.new connection, {}, links: {}
61
+
62
+ expect(schedule_instance).to respond_to(:codebox)
63
+ end
64
+ end
65
+
66
+ def schema
67
+ JSON.parse('
68
+ [
69
+ {
70
+ "endpoints": {
71
+ "list": {
72
+ "methods": [
73
+ "get"
74
+ ],
75
+ "fields": {
76
+ "state": {
77
+ "read_only": false,
78
+ "required": true,
79
+ "type": "choice",
80
+ "choices": [
81
+ {
82
+ "display_name": "new",
83
+ "value": 1
84
+ },
85
+ {
86
+ "display_name": "declined",
87
+ "value": 2
88
+ },
89
+ {
90
+ "display_name": "accepted",
91
+ "value": 3
92
+ }
93
+ ]
94
+ },
95
+ "role": {
96
+ "read_only": true,
97
+ "required": false,
98
+ "type": "choice",
99
+ "choices": [
100
+ {
101
+ "display_name": "---------",
102
+ "value": ""
103
+ },
104
+ {
105
+ "display_name": "full",
106
+ "value": "full"
107
+ },
108
+ {
109
+ "display_name": "write",
110
+ "value": "write"
111
+ },
112
+ {
113
+ "display_name": "read",
114
+ "value": "read"
115
+ }
116
+ ]
117
+ },
118
+ "id": {
119
+ "read_only": true,
120
+ "required": false,
121
+ "type": "integer",
122
+ "primary_key": true,
123
+ "label": "ID"
124
+ },
125
+ "links": {
126
+ "read_only": true,
127
+ "required": false,
128
+ "type": "links",
129
+ "links": [
130
+ {
131
+ "type": "detail",
132
+ "name": "self"
133
+ },
134
+ {
135
+ "type": "detail",
136
+ "name": "instance"
137
+ }
138
+ ]
139
+ },
140
+ "email": {
141
+ "read_only": true,
142
+ "max_length": 254,
143
+ "required": true,
144
+ "type": "email",
145
+ "label": "email"
146
+ }
147
+ },
148
+ "properties": [],
149
+ "path": "/v1/account/invitations/"
150
+ },
151
+ "detail": {
152
+ "methods": [
153
+ "put",
154
+ "get",
155
+ "patch"
156
+ ],
157
+ "fields": {
158
+ "state": {
159
+ "read_only": false,
160
+ "required": true,
161
+ "type": "choice",
162
+ "choices": [
163
+ {
164
+ "display_name": "new",
165
+ "value": 1
166
+ },
167
+ {
168
+ "display_name": "declined",
169
+ "value": 2
170
+ },
171
+ {
172
+ "display_name": "accepted",
173
+ "value": 3
174
+ }
175
+ ]
176
+ },
177
+ "role": {
178
+ "read_only": true,
179
+ "required": false,
180
+ "type": "choice",
181
+ "choices": [
182
+ {
183
+ "display_name": "---------",
184
+ "value": ""
185
+ },
186
+ {
187
+ "display_name": "full",
188
+ "value": "full"
189
+ },
190
+ {
191
+ "display_name": "write",
192
+ "value": "write"
193
+ },
194
+ {
195
+ "display_name": "read",
196
+ "value": "read"
197
+ }
198
+ ]
199
+ },
200
+ "id": {
201
+ "read_only": true,
202
+ "required": false,
203
+ "type": "integer",
204
+ "primary_key": true,
205
+ "label": "ID"
206
+ },
207
+ "links": {
208
+ "read_only": true,
209
+ "required": false,
210
+ "type": "links",
211
+ "links": [
212
+ {
213
+ "type": "detail",
214
+ "name": "self"
215
+ },
216
+ {
217
+ "type": "detail",
218
+ "name": "instance"
219
+ }
220
+ ]
221
+ },
222
+ "email": {
223
+ "read_only": true,
224
+ "max_length": 254,
225
+ "required": true,
226
+ "type": "email",
227
+ "label": "email"
228
+ }
229
+ },
230
+ "properties": [
231
+ "id"
232
+ ],
233
+ "path": "/v1/account/invitations/{id}/"
234
+ }
235
+ },
236
+ "name": "AdminInvitation"
237
+ },
238
+ {
239
+ "endpoints": {
240
+ "list": {
241
+ "methods": [
242
+ "get"
243
+ ],
244
+ "fields": {
245
+ "first_name": {
246
+ "read_only": true,
247
+ "required": false,
248
+ "type": "field"
249
+ },
250
+ "last_name": {
251
+ "read_only": true,
252
+ "required": false,
253
+ "type": "field"
254
+ },
255
+ "links": {
256
+ "read_only": true,
257
+ "required": false,
258
+ "type": "links",
259
+ "links": [
260
+ {
261
+ "type": "detail",
262
+ "name": "self"
263
+ }
264
+ ]
265
+ },
266
+ "email": {
267
+ "read_only": true,
268
+ "required": false,
269
+ "type": "field"
270
+ },
271
+ "role": {
272
+ "read_only": false,
273
+ "required": true,
274
+ "type": "choice",
275
+ "choices": [
276
+ {
277
+ "display_name": "full",
278
+ "value": "full"
279
+ },
280
+ {
281
+ "display_name": "write",
282
+ "value": "write"
283
+ },
284
+ {
285
+ "display_name": "read",
286
+ "value": "read"
287
+ }
288
+ ]
289
+ },
290
+ "id": {
291
+ "read_only": true,
292
+ "required": false,
293
+ "type": "field",
294
+ "primary_key": true
295
+ }
296
+ },
297
+ "properties": [
298
+ "instance_name"
299
+ ],
300
+ "path": "/v1/instances/{instance_name}/admins/"
301
+ },
302
+ "detail": {
303
+ "methods": [
304
+ "put",
305
+ "get",
306
+ "patch",
307
+ "delete"
308
+ ],
309
+ "fields": {
310
+ "first_name": {
311
+ "read_only": true,
312
+ "required": false,
313
+ "type": "field"
314
+ },
315
+ "last_name": {
316
+ "read_only": true,
317
+ "required": false,
318
+ "type": "field"
319
+ },
320
+ "links": {
321
+ "read_only": true,
322
+ "required": false,
323
+ "type": "links",
324
+ "links": [
325
+ {
326
+ "type": "detail",
327
+ "name": "self"
328
+ }
329
+ ]
330
+ },
331
+ "email": {
332
+ "read_only": true,
333
+ "required": false,
334
+ "type": "field"
335
+ },
336
+ "role": {
337
+ "read_only": false,
338
+ "required": true,
339
+ "type": "choice",
340
+ "choices": [
341
+ {
342
+ "display_name": "full",
343
+ "value": "full"
344
+ },
345
+ {
346
+ "display_name": "write",
347
+ "value": "write"
348
+ },
349
+ {
350
+ "display_name": "read",
351
+ "value": "read"
352
+ }
353
+ ]
354
+ },
355
+ "id": {
356
+ "read_only": true,
357
+ "required": false,
358
+ "type": "field",
359
+ "primary_key": true
360
+ }
361
+ },
362
+ "properties": [
363
+ "instance_name",
364
+ "admin_id"
365
+ ],
366
+ "path": "/v1/instances/{instance_name}/admins/{admin_id}/"
367
+ }
368
+ },
369
+ "name": "Admin"
370
+ },
371
+ {
372
+ "endpoints": {
373
+ "list": {
374
+ "methods": [
375
+ "post",
376
+ "get"
377
+ ],
378
+ "fields": {
379
+ "api_key": {
380
+ "read_only": true,
381
+ "required": false,
382
+ "type": "field"
383
+ },
384
+ "id": {
385
+ "read_only": true,
386
+ "required": false,
387
+ "type": "integer",
388
+ "primary_key": true,
389
+ "label": "ID"
390
+ },
391
+ "links": {
392
+ "read_only": true,
393
+ "required": false,
394
+ "type": "links",
395
+ "links": [
396
+ {
397
+ "type": "detail",
398
+ "name": "self"
399
+ }
400
+ ]
401
+ },
402
+ "ignore_acl": {
403
+ "read_only": false,
404
+ "required": false,
405
+ "type": "boolean"
406
+ }
407
+ },
408
+ "properties": [
409
+ "instance_name"
410
+ ],
411
+ "path": "/v1/instances/{instance_name}/api_keys/"
412
+ },
413
+ "detail": {
414
+ "methods": [
415
+ "get",
416
+ "delete"
417
+ ],
418
+ "fields": {
419
+ "api_key": {
420
+ "read_only": true,
421
+ "required": false,
422
+ "type": "field"
423
+ },
424
+ "id": {
425
+ "read_only": true,
426
+ "required": false,
427
+ "type": "integer",
428
+ "primary_key": true,
429
+ "label": "ID"
430
+ },
431
+ "links": {
432
+ "read_only": true,
433
+ "required": false,
434
+ "type": "links",
435
+ "links": [
436
+ {
437
+ "type": "detail",
438
+ "name": "self"
439
+ }
440
+ ]
441
+ },
442
+ "ignore_acl": {
443
+ "read_only": false,
444
+ "required": false,
445
+ "type": "boolean"
446
+ }
447
+ },
448
+ "properties": [
449
+ "instance_name",
450
+ "id"
451
+ ],
452
+ "path": "/v1/instances/{instance_name}/api_keys/{id}/"
453
+ }
454
+ },
455
+ "name": "ApiKey"
456
+ },
457
+ {
458
+ "endpoints": {
459
+ "balance": {
460
+ "methods": [
461
+ "get"
462
+ ],
463
+ "fields": {
464
+ "value": {
465
+ "read_only": false,
466
+ "required": true,
467
+ "type": "decimal"
468
+ }
469
+ },
470
+ "properties": [],
471
+ "path": "/v1/billing/balance/"
472
+ }
473
+ },
474
+ "name": "BalanceView"
475
+ },
476
+ {
477
+ "endpoints": {
478
+ "list": {
479
+ "methods": [
480
+ "post",
481
+ "get"
482
+ ],
483
+ "fields": {
484
+ "status": {
485
+ "read_only": true,
486
+ "required": false,
487
+ "type": "field"
488
+ },
489
+ "name": {
490
+ "read_only": false,
491
+ "primary_key": true,
492
+ "required": true,
493
+ "label": "name",
494
+ "max_length": 50,
495
+ "type": "string"
496
+ },
497
+ "links": {
498
+ "read_only": true,
499
+ "required": false,
500
+ "type": "links",
501
+ "links": [
502
+ {
503
+ "type": "detail",
504
+ "name": "self"
505
+ },
506
+ {
507
+ "type": "list",
508
+ "name": "objects"
509
+ }
510
+ ]
511
+ },
512
+ "created_at": {
513
+ "read_only": true,
514
+ "required": false,
515
+ "type": "datetime",
516
+ "label": "created at"
517
+ },
518
+ "description": {
519
+ "read_only": false,
520
+ "required": false,
521
+ "type": "string",
522
+ "label": "description"
523
+ },
524
+ "updated_at": {
525
+ "read_only": true,
526
+ "required": false,
527
+ "type": "datetime",
528
+ "label": "updated at"
529
+ },
530
+ "objects_count": {
531
+ "read_only": true,
532
+ "required": false,
533
+ "type": "field"
534
+ },
535
+ "metadata": {
536
+ "read_only": false,
537
+ "required": false,
538
+ "type": "field",
539
+ "label": "metadata"
540
+ },
541
+ "revision": {
542
+ "read_only": true,
543
+ "required": true,
544
+ "type": "integer",
545
+ "label": "revision"
546
+ },
547
+ "schema": {
548
+ "read_only": false,
549
+ "required": true,
550
+ "type": "field",
551
+ "label": "schema"
552
+ }
553
+ },
554
+ "properties": [
555
+ "instance_name"
556
+ ],
557
+ "path": "/v1/instances/{instance_name}/classes/"
558
+ },
559
+ "detail": {
560
+ "methods": [
561
+ "put",
562
+ "get",
563
+ "patch",
564
+ "delete"
565
+ ],
566
+ "fields": {
567
+ "status": {
568
+ "read_only": true,
569
+ "required": false,
570
+ "type": "field"
571
+ },
572
+ "expected_revision": {
573
+ "read_only": false,
574
+ "required": false,
575
+ "type": "integer",
576
+ "label": "Expected revision"
577
+ },
578
+ "name": {
579
+ "read_only": true,
580
+ "primary_key": true,
581
+ "required": true,
582
+ "label": "name",
583
+ "max_length": 50,
584
+ "type": "string"
585
+ },
586
+ "links": {
587
+ "read_only": true,
588
+ "required": false,
589
+ "type": "links",
590
+ "links": [
591
+ {
592
+ "type": "detail",
593
+ "name": "self"
594
+ },
595
+ {
596
+ "type": "list",
597
+ "name": "objects"
598
+ }
599
+ ]
600
+ },
601
+ "created_at": {
602
+ "read_only": true,
603
+ "required": false,
604
+ "type": "datetime",
605
+ "label": "created at"
606
+ },
607
+ "description": {
608
+ "read_only": false,
609
+ "required": false,
610
+ "type": "string",
611
+ "label": "description"
612
+ },
613
+ "updated_at": {
614
+ "read_only": true,
615
+ "required": false,
616
+ "type": "datetime",
617
+ "label": "updated at"
618
+ },
619
+ "objects_count": {
620
+ "read_only": true,
621
+ "required": false,
622
+ "type": "field"
623
+ },
624
+ "metadata": {
625
+ "read_only": false,
626
+ "required": false,
627
+ "type": "field",
628
+ "label": "metadata"
629
+ },
630
+ "revision": {
631
+ "read_only": true,
632
+ "required": true,
633
+ "type": "integer",
634
+ "label": "revision"
635
+ },
636
+ "schema": {
637
+ "read_only": false,
638
+ "required": true,
639
+ "type": "field",
640
+ "label": "schema"
641
+ }
642
+ },
643
+ "properties": [
644
+ "instance_name",
645
+ "name"
646
+ ],
647
+ "path": "/v1/instances/{instance_name}/classes/{name}/"
648
+ }
649
+ },
650
+ "name": "Class"
651
+ },
652
+ {
653
+ "endpoints": {
654
+ "list": {
655
+ "methods": [
656
+ "get"
657
+ ],
658
+ "fields": {
659
+ "status": {
660
+ "read_only": false,
661
+ "choices": [
662
+ {
663
+ "display_name": "Pending",
664
+ "value": "pending"
665
+ },
666
+ {
667
+ "display_name": "Success",
668
+ "value": "success"
669
+ },
670
+ {
671
+ "display_name": "Failure",
672
+ "value": "failure"
673
+ },
674
+ {
675
+ "display_name": "Timeout",
676
+ "value": "timeout"
677
+ }
678
+ ],
679
+ "required": true,
680
+ "type": "choice",
681
+ "label": "status"
682
+ },
683
+ "links": {
684
+ "read_only": true,
685
+ "required": false,
686
+ "type": "links",
687
+ "links": [
688
+ {
689
+ "type": "detail",
690
+ "name": "self"
691
+ }
692
+ ]
693
+ },
694
+ "executed_at": {
695
+ "read_only": false,
696
+ "required": false,
697
+ "type": "datetime",
698
+ "label": "executed at"
699
+ },
700
+ "result": {
701
+ "read_only": false,
702
+ "required": false,
703
+ "type": "string",
704
+ "label": "result"
705
+ },
706
+ "duration": {
707
+ "read_only": false,
708
+ "required": false,
709
+ "type": "integer",
710
+ "label": "duration"
711
+ },
712
+ "id": {
713
+ "read_only": true,
714
+ "required": false,
715
+ "type": "integer",
716
+ "primary_key": true,
717
+ "label": "ID"
718
+ }
719
+ },
720
+ "properties": [
721
+ "instance_name",
722
+ "codebox_id"
723
+ ],
724
+ "path": "/v1/instances/{instance_name}/codeboxes/{codebox_id}/traces/"
725
+ },
726
+ "detail": {
727
+ "methods": [
728
+ "get"
729
+ ],
730
+ "fields": {
731
+ "status": {
732
+ "read_only": false,
733
+ "choices": [
734
+ {
735
+ "display_name": "Pending",
736
+ "value": "pending"
737
+ },
738
+ {
739
+ "display_name": "Success",
740
+ "value": "success"
741
+ },
742
+ {
743
+ "display_name": "Failure",
744
+ "value": "failure"
745
+ },
746
+ {
747
+ "display_name": "Timeout",
748
+ "value": "timeout"
749
+ }
750
+ ],
751
+ "required": true,
752
+ "type": "choice",
753
+ "label": "status"
754
+ },
755
+ "links": {
756
+ "read_only": true,
757
+ "required": false,
758
+ "type": "links",
759
+ "links": [
760
+ {
761
+ "type": "detail",
762
+ "name": "self"
763
+ }
764
+ ]
765
+ },
766
+ "executed_at": {
767
+ "read_only": false,
768
+ "required": false,
769
+ "type": "datetime",
770
+ "label": "executed at"
771
+ },
772
+ "result": {
773
+ "read_only": false,
774
+ "required": false,
775
+ "type": "string",
776
+ "label": "result"
777
+ },
778
+ "duration": {
779
+ "read_only": false,
780
+ "required": false,
781
+ "type": "integer",
782
+ "label": "duration"
783
+ },
784
+ "id": {
785
+ "read_only": true,
786
+ "required": false,
787
+ "type": "integer",
788
+ "primary_key": true,
789
+ "label": "ID"
790
+ }
791
+ },
792
+ "properties": [
793
+ "instance_name",
794
+ "codebox_id",
795
+ "id"
796
+ ],
797
+ "path": "/v1/instances/{instance_name}/codeboxes/{codebox_id}/traces/{id}/"
798
+ }
799
+ },
800
+ "name": "CodeBoxTrace"
801
+ },
802
+ {
803
+ "endpoints": {
804
+ "list": {
805
+ "methods": [
806
+ "post",
807
+ "get"
808
+ ],
809
+ "fields": {
810
+ "description": {
811
+ "read_only": false,
812
+ "required": false,
813
+ "type": "string",
814
+ "label": "description"
815
+ },
816
+ "links": {
817
+ "read_only": true,
818
+ "required": false,
819
+ "type": "links",
820
+ "links": [
821
+ {
822
+ "type": "detail",
823
+ "name": "self"
824
+ },
825
+ {
826
+ "type": "list",
827
+ "name": "runtimes"
828
+ },
829
+ {
830
+ "type": "run",
831
+ "name": "run"
832
+ },
833
+ {
834
+ "type": "list",
835
+ "name": "traces"
836
+ }
837
+ ]
838
+ },
839
+ "created_at": {
840
+ "read_only": true,
841
+ "required": false,
842
+ "type": "datetime",
843
+ "label": "created at"
844
+ },
845
+ "updated_at": {
846
+ "read_only": true,
847
+ "required": false,
848
+ "type": "datetime",
849
+ "label": "updated at"
850
+ },
851
+ "source": {
852
+ "read_only": false,
853
+ "required": true,
854
+ "type": "string",
855
+ "label": "source"
856
+ },
857
+ "runtime_name": {
858
+ "read_only": false,
859
+ "choices": [
860
+ {
861
+ "display_name": "golang",
862
+ "value": "golang"
863
+ },
864
+ {
865
+ "display_name": "nodejs",
866
+ "value": "nodejs"
867
+ },
868
+ {
869
+ "display_name": "python",
870
+ "value": "python"
871
+ },
872
+ {
873
+ "display_name": "ruby",
874
+ "value": "ruby"
875
+ }
876
+ ],
877
+ "required": true,
878
+ "type": "choice",
879
+ "label": "runtime name"
880
+ },
881
+ "config": {
882
+ "read_only": false,
883
+ "required": false,
884
+ "type": "field",
885
+ "label": "config"
886
+ },
887
+ "id": {
888
+ "read_only": true,
889
+ "required": false,
890
+ "type": "integer",
891
+ "primary_key": true,
892
+ "label": "ID"
893
+ },
894
+ "name": {
895
+ "read_only": false,
896
+ "max_length": 80,
897
+ "required": true,
898
+ "type": "string",
899
+ "label": "name"
900
+ }
901
+ },
902
+ "properties": [
903
+ "instance_name"
904
+ ],
905
+ "path": "/v1/instances/{instance_name}/codeboxes/"
906
+ },
907
+ "run": {
908
+ "methods": [
909
+ "post"
910
+ ],
911
+ "fields": {
912
+ "description": {
913
+ "read_only": false,
914
+ "required": false,
915
+ "type": "string",
916
+ "label": "description"
917
+ },
918
+ "links": {
919
+ "read_only": true,
920
+ "required": false,
921
+ "type": "links",
922
+ "links": [
923
+ {
924
+ "type": "detail",
925
+ "name": "self"
926
+ },
927
+ {
928
+ "type": "list",
929
+ "name": "runtimes"
930
+ },
931
+ {
932
+ "type": "run",
933
+ "name": "run"
934
+ },
935
+ {
936
+ "type": "list",
937
+ "name": "traces"
938
+ }
939
+ ]
940
+ },
941
+ "created_at": {
942
+ "read_only": true,
943
+ "required": false,
944
+ "type": "datetime",
945
+ "label": "created at"
946
+ },
947
+ "updated_at": {
948
+ "read_only": true,
949
+ "required": false,
950
+ "type": "datetime",
951
+ "label": "updated at"
952
+ },
953
+ "source": {
954
+ "read_only": false,
955
+ "required": true,
956
+ "type": "string",
957
+ "label": "source"
958
+ },
959
+ "runtime_name": {
960
+ "read_only": false,
961
+ "choices": [
962
+ {
963
+ "display_name": "golang",
964
+ "value": "golang"
965
+ },
966
+ {
967
+ "display_name": "nodejs",
968
+ "value": "nodejs"
969
+ },
970
+ {
971
+ "display_name": "python",
972
+ "value": "python"
973
+ },
974
+ {
975
+ "display_name": "ruby",
976
+ "value": "ruby"
977
+ }
978
+ ],
979
+ "required": true,
980
+ "type": "choice",
981
+ "label": "runtime name"
982
+ },
983
+ "config": {
984
+ "read_only": false,
985
+ "required": false,
986
+ "type": "field",
987
+ "label": "config"
988
+ },
989
+ "id": {
990
+ "read_only": true,
991
+ "required": false,
992
+ "type": "integer",
993
+ "primary_key": true,
994
+ "label": "ID"
995
+ },
996
+ "name": {
997
+ "read_only": false,
998
+ "max_length": 80,
999
+ "required": true,
1000
+ "type": "string",
1001
+ "label": "name"
1002
+ }
1003
+ },
1004
+ "properties": [
1005
+ "instance_name",
1006
+ "id"
1007
+ ],
1008
+ "path": "/v1/instances/{instance_name}/codeboxes/{id}/run/"
1009
+ },
1010
+ "detail": {
1011
+ "methods": [
1012
+ "put",
1013
+ "get",
1014
+ "patch",
1015
+ "delete"
1016
+ ],
1017
+ "fields": {
1018
+ "description": {
1019
+ "read_only": false,
1020
+ "required": false,
1021
+ "type": "string",
1022
+ "label": "description"
1023
+ },
1024
+ "links": {
1025
+ "read_only": true,
1026
+ "required": false,
1027
+ "type": "links",
1028
+ "links": [
1029
+ {
1030
+ "type": "detail",
1031
+ "name": "self"
1032
+ },
1033
+ {
1034
+ "type": "list",
1035
+ "name": "runtimes"
1036
+ },
1037
+ {
1038
+ "type": "run",
1039
+ "name": "run"
1040
+ },
1041
+ {
1042
+ "type": "list",
1043
+ "name": "traces"
1044
+ }
1045
+ ]
1046
+ },
1047
+ "created_at": {
1048
+ "read_only": true,
1049
+ "required": false,
1050
+ "type": "datetime",
1051
+ "label": "created at"
1052
+ },
1053
+ "updated_at": {
1054
+ "read_only": true,
1055
+ "required": false,
1056
+ "type": "datetime",
1057
+ "label": "updated at"
1058
+ },
1059
+ "source": {
1060
+ "read_only": false,
1061
+ "required": true,
1062
+ "type": "string",
1063
+ "label": "source"
1064
+ },
1065
+ "runtime_name": {
1066
+ "read_only": false,
1067
+ "choices": [
1068
+ {
1069
+ "display_name": "golang",
1070
+ "value": "golang"
1071
+ },
1072
+ {
1073
+ "display_name": "nodejs",
1074
+ "value": "nodejs"
1075
+ },
1076
+ {
1077
+ "display_name": "python",
1078
+ "value": "python"
1079
+ },
1080
+ {
1081
+ "display_name": "ruby",
1082
+ "value": "ruby"
1083
+ }
1084
+ ],
1085
+ "required": true,
1086
+ "type": "choice",
1087
+ "label": "runtime name"
1088
+ },
1089
+ "config": {
1090
+ "read_only": false,
1091
+ "required": false,
1092
+ "type": "field",
1093
+ "label": "config"
1094
+ },
1095
+ "id": {
1096
+ "read_only": true,
1097
+ "required": false,
1098
+ "type": "integer",
1099
+ "primary_key": true,
1100
+ "label": "ID"
1101
+ },
1102
+ "name": {
1103
+ "read_only": false,
1104
+ "max_length": 80,
1105
+ "required": true,
1106
+ "type": "string",
1107
+ "label": "name"
1108
+ }
1109
+ },
1110
+ "properties": [
1111
+ "instance_name",
1112
+ "id"
1113
+ ],
1114
+ "path": "/v1/instances/{instance_name}/codeboxes/{id}/"
1115
+ }
1116
+ },
1117
+ "name": "CodeBox"
1118
+ },
1119
+ {
1120
+ "endpoints": {
1121
+ "list": {
1122
+ "methods": [
1123
+ "post",
1124
+ "get"
1125
+ ],
1126
+ "fields": {
1127
+ "name": {
1128
+ "read_only": false,
1129
+ "primary_key": true,
1130
+ "required": true,
1131
+ "label": "name",
1132
+ "max_length": 32,
1133
+ "type": "string"
1134
+ },
1135
+ "percent_off": {
1136
+ "read_only": false,
1137
+ "required": false,
1138
+ "type": "integer",
1139
+ "label": "percent off"
1140
+ },
1141
+ "redeem_by": {
1142
+ "read_only": false,
1143
+ "required": true,
1144
+ "type": "date",
1145
+ "label": "redeem by"
1146
+ },
1147
+ "links": {
1148
+ "read_only": true,
1149
+ "required": false,
1150
+ "type": "links",
1151
+ "links": [
1152
+ {
1153
+ "type": "detail",
1154
+ "name": "self"
1155
+ },
1156
+ {
1157
+ "type": "list",
1158
+ "name": "redeem"
1159
+ }
1160
+ ]
1161
+ },
1162
+ "amount_off": {
1163
+ "read_only": false,
1164
+ "required": false,
1165
+ "type": "float",
1166
+ "label": "amount off"
1167
+ },
1168
+ "currency": {
1169
+ "read_only": false,
1170
+ "required": true,
1171
+ "type": "choice",
1172
+ "choices": [
1173
+ {
1174
+ "display_name": "USD",
1175
+ "value": "usd"
1176
+ }
1177
+ ]
1178
+ },
1179
+ "duration": {
1180
+ "read_only": false,
1181
+ "required": true,
1182
+ "type": "integer",
1183
+ "label": "duration"
1184
+ }
1185
+ },
1186
+ "properties": [],
1187
+ "path": "/v1/billing/coupons/"
1188
+ },
1189
+ "detail": {
1190
+ "methods": [
1191
+ "get",
1192
+ "delete"
1193
+ ],
1194
+ "fields": {
1195
+ "name": {
1196
+ "read_only": false,
1197
+ "primary_key": true,
1198
+ "required": true,
1199
+ "label": "name",
1200
+ "max_length": 32,
1201
+ "type": "string"
1202
+ },
1203
+ "percent_off": {
1204
+ "read_only": false,
1205
+ "required": false,
1206
+ "type": "integer",
1207
+ "label": "percent off"
1208
+ },
1209
+ "redeem_by": {
1210
+ "read_only": false,
1211
+ "required": true,
1212
+ "type": "date",
1213
+ "label": "redeem by"
1214
+ },
1215
+ "links": {
1216
+ "read_only": true,
1217
+ "required": false,
1218
+ "type": "links",
1219
+ "links": [
1220
+ {
1221
+ "type": "detail",
1222
+ "name": "self"
1223
+ },
1224
+ {
1225
+ "type": "list",
1226
+ "name": "redeem"
1227
+ }
1228
+ ]
1229
+ },
1230
+ "amount_off": {
1231
+ "read_only": false,
1232
+ "required": false,
1233
+ "type": "float",
1234
+ "label": "amount off"
1235
+ },
1236
+ "currency": {
1237
+ "read_only": false,
1238
+ "required": true,
1239
+ "type": "choice",
1240
+ "choices": [
1241
+ {
1242
+ "display_name": "USD",
1243
+ "value": "usd"
1244
+ }
1245
+ ]
1246
+ },
1247
+ "duration": {
1248
+ "read_only": false,
1249
+ "required": true,
1250
+ "type": "integer",
1251
+ "label": "duration"
1252
+ }
1253
+ },
1254
+ "properties": [
1255
+ "name"
1256
+ ],
1257
+ "path": "/v1/billing/coupons/{name}/"
1258
+ }
1259
+ },
1260
+ "name": "Coupon"
1261
+ },
1262
+ {
1263
+ "endpoints": {
1264
+ "list": {
1265
+ "methods": [
1266
+ "get"
1267
+ ],
1268
+ "fields": {
1269
+ "name": {
1270
+ "read_only": false,
1271
+ "required": true,
1272
+ "type": "string"
1273
+ }
1274
+ },
1275
+ "properties": [],
1276
+ "path": "/v1/metrics/filters/"
1277
+ }
1278
+ },
1279
+ "name": "DimensionTypeListView"
1280
+ },
1281
+ {
1282
+ "endpoints": {
1283
+ "list": {
1284
+ "methods": [
1285
+ "post",
1286
+ "get"
1287
+ ],
1288
+ "fields": {
1289
+ "end": {
1290
+ "read_only": true,
1291
+ "required": true,
1292
+ "type": "date",
1293
+ "label": "end"
1294
+ },
1295
+ "links": {
1296
+ "read_only": true,
1297
+ "required": false,
1298
+ "type": "links",
1299
+ "links": [
1300
+ {
1301
+ "type": "detail",
1302
+ "name": "self"
1303
+ }
1304
+ ]
1305
+ },
1306
+ "start": {
1307
+ "read_only": true,
1308
+ "required": false,
1309
+ "type": "date",
1310
+ "label": "start"
1311
+ },
1312
+ "coupon": {
1313
+ "name": {
1314
+ "read_only": false,
1315
+ "max_length": 32,
1316
+ "required": true,
1317
+ "type": "string",
1318
+ "label": "name"
1319
+ },
1320
+ "percent_off": {
1321
+ "read_only": false,
1322
+ "required": false,
1323
+ "type": "integer",
1324
+ "label": "percent off"
1325
+ },
1326
+ "redeem_by": {
1327
+ "read_only": false,
1328
+ "required": true,
1329
+ "type": "date",
1330
+ "label": "redeem by"
1331
+ },
1332
+ "links": {
1333
+ "read_only": true,
1334
+ "required": false,
1335
+ "type": "links",
1336
+ "links": [
1337
+ {
1338
+ "type": "detail",
1339
+ "name": "self"
1340
+ },
1341
+ {
1342
+ "type": "list",
1343
+ "name": "redeem"
1344
+ }
1345
+ ],
1346
+ "label": "Links"
1347
+ },
1348
+ "amount_off": {
1349
+ "read_only": false,
1350
+ "required": false,
1351
+ "type": "float",
1352
+ "label": "amount off"
1353
+ },
1354
+ "currency": {
1355
+ "read_only": false,
1356
+ "choices": [
1357
+ {
1358
+ "display_name": "USD",
1359
+ "value": "usd"
1360
+ }
1361
+ ],
1362
+ "required": true,
1363
+ "type": "choice",
1364
+ "label": "Currency"
1365
+ },
1366
+ "duration": {
1367
+ "read_only": false,
1368
+ "required": true,
1369
+ "type": "integer",
1370
+ "label": "duration"
1371
+ }
1372
+ },
1373
+ "instance": {
1374
+ "name": {
1375
+ "read_only": false,
1376
+ "max_length": 50,
1377
+ "required": true,
1378
+ "type": "string",
1379
+ "label": "name"
1380
+ },
1381
+ "links": {
1382
+ "read_only": true,
1383
+ "required": false,
1384
+ "type": "links",
1385
+ "links": [
1386
+ {
1387
+ "type": "detail",
1388
+ "name": "self"
1389
+ },
1390
+ {
1391
+ "type": "list",
1392
+ "name": "admins"
1393
+ },
1394
+ {
1395
+ "type": "list",
1396
+ "name": "classes"
1397
+ },
1398
+ {
1399
+ "type": "list",
1400
+ "name": "codeboxes"
1401
+ },
1402
+ {
1403
+ "type": "list",
1404
+ "name": "runtimes"
1405
+ },
1406
+ {
1407
+ "type": "list",
1408
+ "name": "invitations"
1409
+ },
1410
+ {
1411
+ "type": "list",
1412
+ "name": "api_keys"
1413
+ },
1414
+ {
1415
+ "type": "list",
1416
+ "name": "triggers"
1417
+ },
1418
+ {
1419
+ "type": "list",
1420
+ "name": "webhooks"
1421
+ },
1422
+ {
1423
+ "type": "list",
1424
+ "name": "schedules"
1425
+ }
1426
+ ],
1427
+ "label": "Links"
1428
+ },
1429
+ "created_at": {
1430
+ "read_only": true,
1431
+ "required": false,
1432
+ "type": "datetime",
1433
+ "label": "created at"
1434
+ },
1435
+ "updated_at": {
1436
+ "read_only": true,
1437
+ "required": false,
1438
+ "type": "datetime",
1439
+ "label": "updated at"
1440
+ },
1441
+ "role": {
1442
+ "read_only": true,
1443
+ "required": false,
1444
+ "type": "field",
1445
+ "label": "Role"
1446
+ },
1447
+ "owner": {
1448
+ "first_name": {
1449
+ "read_only": false,
1450
+ "max_length": 35,
1451
+ "required": false,
1452
+ "type": "string",
1453
+ "label": "first name"
1454
+ },
1455
+ "last_name": {
1456
+ "read_only": false,
1457
+ "max_length": 35,
1458
+ "required": false,
1459
+ "type": "string",
1460
+ "label": "last name"
1461
+ },
1462
+ "id": {
1463
+ "read_only": true,
1464
+ "required": false,
1465
+ "type": "integer",
1466
+ "label": "ID"
1467
+ },
1468
+ "email": {
1469
+ "read_only": false,
1470
+ "max_length": 254,
1471
+ "required": true,
1472
+ "type": "email",
1473
+ "label": "email address"
1474
+ }
1475
+ },
1476
+ "metadata": {
1477
+ "read_only": false,
1478
+ "required": false,
1479
+ "type": "field",
1480
+ "label": "metadata"
1481
+ },
1482
+ "description": {
1483
+ "read_only": false,
1484
+ "required": false,
1485
+ "type": "string",
1486
+ "label": "description"
1487
+ }
1488
+ },
1489
+ "id": {
1490
+ "read_only": true,
1491
+ "required": false,
1492
+ "type": "integer",
1493
+ "primary_key": true,
1494
+ "label": "ID"
1495
+ }
1496
+ },
1497
+ "properties": [],
1498
+ "path": "/v1/billing/discounts/"
1499
+ },
1500
+ "detail": {
1501
+ "methods": [
1502
+ "get"
1503
+ ],
1504
+ "fields": {
1505
+ "end": {
1506
+ "read_only": true,
1507
+ "required": true,
1508
+ "type": "date",
1509
+ "label": "end"
1510
+ },
1511
+ "links": {
1512
+ "read_only": true,
1513
+ "required": false,
1514
+ "type": "links",
1515
+ "links": [
1516
+ {
1517
+ "type": "detail",
1518
+ "name": "self"
1519
+ }
1520
+ ]
1521
+ },
1522
+ "start": {
1523
+ "read_only": true,
1524
+ "required": false,
1525
+ "type": "date",
1526
+ "label": "start"
1527
+ },
1528
+ "coupon": {
1529
+ "name": {
1530
+ "read_only": false,
1531
+ "max_length": 32,
1532
+ "required": true,
1533
+ "type": "string",
1534
+ "label": "name"
1535
+ },
1536
+ "percent_off": {
1537
+ "read_only": false,
1538
+ "required": false,
1539
+ "type": "integer",
1540
+ "label": "percent off"
1541
+ },
1542
+ "redeem_by": {
1543
+ "read_only": false,
1544
+ "required": true,
1545
+ "type": "date",
1546
+ "label": "redeem by"
1547
+ },
1548
+ "links": {
1549
+ "read_only": true,
1550
+ "required": false,
1551
+ "type": "links",
1552
+ "links": [
1553
+ {
1554
+ "type": "detail",
1555
+ "name": "self"
1556
+ },
1557
+ {
1558
+ "type": "list",
1559
+ "name": "redeem"
1560
+ }
1561
+ ],
1562
+ "label": "Links"
1563
+ },
1564
+ "amount_off": {
1565
+ "read_only": false,
1566
+ "required": false,
1567
+ "type": "float",
1568
+ "label": "amount off"
1569
+ },
1570
+ "currency": {
1571
+ "read_only": false,
1572
+ "choices": [
1573
+ {
1574
+ "display_name": "USD",
1575
+ "value": "usd"
1576
+ }
1577
+ ],
1578
+ "required": true,
1579
+ "type": "choice",
1580
+ "label": "Currency"
1581
+ },
1582
+ "duration": {
1583
+ "read_only": false,
1584
+ "required": true,
1585
+ "type": "integer",
1586
+ "label": "duration"
1587
+ }
1588
+ },
1589
+ "instance": {
1590
+ "name": {
1591
+ "read_only": false,
1592
+ "max_length": 50,
1593
+ "required": true,
1594
+ "type": "string",
1595
+ "label": "name"
1596
+ },
1597
+ "links": {
1598
+ "read_only": true,
1599
+ "required": false,
1600
+ "type": "links",
1601
+ "links": [
1602
+ {
1603
+ "type": "detail",
1604
+ "name": "self"
1605
+ },
1606
+ {
1607
+ "type": "list",
1608
+ "name": "admins"
1609
+ },
1610
+ {
1611
+ "type": "list",
1612
+ "name": "classes"
1613
+ },
1614
+ {
1615
+ "type": "list",
1616
+ "name": "codeboxes"
1617
+ },
1618
+ {
1619
+ "type": "list",
1620
+ "name": "runtimes"
1621
+ },
1622
+ {
1623
+ "type": "list",
1624
+ "name": "invitations"
1625
+ },
1626
+ {
1627
+ "type": "list",
1628
+ "name": "api_keys"
1629
+ },
1630
+ {
1631
+ "type": "list",
1632
+ "name": "triggers"
1633
+ },
1634
+ {
1635
+ "type": "list",
1636
+ "name": "webhooks"
1637
+ },
1638
+ {
1639
+ "type": "list",
1640
+ "name": "schedules"
1641
+ }
1642
+ ],
1643
+ "label": "Links"
1644
+ },
1645
+ "created_at": {
1646
+ "read_only": true,
1647
+ "required": false,
1648
+ "type": "datetime",
1649
+ "label": "created at"
1650
+ },
1651
+ "updated_at": {
1652
+ "read_only": true,
1653
+ "required": false,
1654
+ "type": "datetime",
1655
+ "label": "updated at"
1656
+ },
1657
+ "role": {
1658
+ "read_only": true,
1659
+ "required": false,
1660
+ "type": "field",
1661
+ "label": "Role"
1662
+ },
1663
+ "owner": {
1664
+ "first_name": {
1665
+ "read_only": false,
1666
+ "max_length": 35,
1667
+ "required": false,
1668
+ "type": "string",
1669
+ "label": "first name"
1670
+ },
1671
+ "last_name": {
1672
+ "read_only": false,
1673
+ "max_length": 35,
1674
+ "required": false,
1675
+ "type": "string",
1676
+ "label": "last name"
1677
+ },
1678
+ "id": {
1679
+ "read_only": true,
1680
+ "required": false,
1681
+ "type": "integer",
1682
+ "label": "ID"
1683
+ },
1684
+ "email": {
1685
+ "read_only": false,
1686
+ "max_length": 254,
1687
+ "required": true,
1688
+ "type": "email",
1689
+ "label": "email address"
1690
+ }
1691
+ },
1692
+ "metadata": {
1693
+ "read_only": false,
1694
+ "required": false,
1695
+ "type": "field",
1696
+ "label": "metadata"
1697
+ },
1698
+ "description": {
1699
+ "read_only": false,
1700
+ "required": false,
1701
+ "type": "string",
1702
+ "label": "description"
1703
+ }
1704
+ },
1705
+ "id": {
1706
+ "read_only": true,
1707
+ "required": false,
1708
+ "type": "integer",
1709
+ "primary_key": true,
1710
+ "label": "ID"
1711
+ }
1712
+ },
1713
+ "properties": [
1714
+ "id"
1715
+ ],
1716
+ "path": "/v1/billing/discounts/{id}/"
1717
+ }
1718
+ },
1719
+ "name": "Discount"
1720
+ },
1721
+ {
1722
+ "endpoints": {
1723
+ "list": {
1724
+ "methods": [
1725
+ "get"
1726
+ ],
1727
+ "fields": {},
1728
+ "properties": [],
1729
+ "path": "/v1/billing/info/"
1730
+ }
1731
+ },
1732
+ "name": "Info"
1733
+ },
1734
+ {
1735
+ "endpoints": {
1736
+ "list": {
1737
+ "methods": [
1738
+ "post",
1739
+ "get"
1740
+ ],
1741
+ "fields": {
1742
+ "name": {
1743
+ "read_only": false,
1744
+ "primary_key": true,
1745
+ "required": true,
1746
+ "label": "name",
1747
+ "max_length": 50,
1748
+ "type": "string"
1749
+ },
1750
+ "links": {
1751
+ "read_only": true,
1752
+ "required": false,
1753
+ "type": "links",
1754
+ "links": [
1755
+ {
1756
+ "type": "detail",
1757
+ "name": "self"
1758
+ },
1759
+ {
1760
+ "type": "list",
1761
+ "name": "admins"
1762
+ },
1763
+ {
1764
+ "type": "list",
1765
+ "name": "classes"
1766
+ },
1767
+ {
1768
+ "type": "list",
1769
+ "name": "codeboxes"
1770
+ },
1771
+ {
1772
+ "type": "list",
1773
+ "name": "runtimes"
1774
+ },
1775
+ {
1776
+ "type": "list",
1777
+ "name": "invitations"
1778
+ },
1779
+ {
1780
+ "type": "list",
1781
+ "name": "api_keys"
1782
+ },
1783
+ {
1784
+ "type": "list",
1785
+ "name": "triggers"
1786
+ },
1787
+ {
1788
+ "type": "list",
1789
+ "name": "webhooks"
1790
+ },
1791
+ {
1792
+ "type": "list",
1793
+ "name": "schedules"
1794
+ }
1795
+ ]
1796
+ },
1797
+ "created_at": {
1798
+ "read_only": true,
1799
+ "required": false,
1800
+ "type": "datetime",
1801
+ "label": "created at"
1802
+ },
1803
+ "updated_at": {
1804
+ "read_only": true,
1805
+ "required": false,
1806
+ "type": "datetime",
1807
+ "label": "updated at"
1808
+ },
1809
+ "role": {
1810
+ "read_only": true,
1811
+ "required": false,
1812
+ "type": "field"
1813
+ },
1814
+ "owner": {
1815
+ "first_name": {
1816
+ "read_only": false,
1817
+ "max_length": 35,
1818
+ "required": false,
1819
+ "type": "string",
1820
+ "label": "first name"
1821
+ },
1822
+ "last_name": {
1823
+ "read_only": false,
1824
+ "max_length": 35,
1825
+ "required": false,
1826
+ "type": "string",
1827
+ "label": "last name"
1828
+ },
1829
+ "id": {
1830
+ "read_only": true,
1831
+ "required": false,
1832
+ "type": "integer",
1833
+ "label": "ID"
1834
+ },
1835
+ "email": {
1836
+ "read_only": false,
1837
+ "max_length": 254,
1838
+ "required": true,
1839
+ "type": "email",
1840
+ "label": "email address"
1841
+ }
1842
+ },
1843
+ "metadata": {
1844
+ "read_only": false,
1845
+ "required": false,
1846
+ "type": "field",
1847
+ "label": "metadata"
1848
+ },
1849
+ "description": {
1850
+ "read_only": false,
1851
+ "required": false,
1852
+ "type": "string",
1853
+ "label": "description"
1854
+ }
1855
+ },
1856
+ "properties": [],
1857
+ "path": "/v1/instances/"
1858
+ },
1859
+ "detail": {
1860
+ "methods": [
1861
+ "put",
1862
+ "get",
1863
+ "patch",
1864
+ "delete"
1865
+ ],
1866
+ "fields": {
1867
+ "name": {
1868
+ "read_only": true,
1869
+ "primary_key": true,
1870
+ "required": true,
1871
+ "label": "name",
1872
+ "max_length": 50,
1873
+ "type": "string"
1874
+ },
1875
+ "links": {
1876
+ "read_only": true,
1877
+ "required": false,
1878
+ "type": "links",
1879
+ "links": [
1880
+ {
1881
+ "type": "detail",
1882
+ "name": "self"
1883
+ },
1884
+ {
1885
+ "type": "list",
1886
+ "name": "admins"
1887
+ },
1888
+ {
1889
+ "type": "list",
1890
+ "name": "classes"
1891
+ },
1892
+ {
1893
+ "type": "list",
1894
+ "name": "codeboxes"
1895
+ },
1896
+ {
1897
+ "type": "list",
1898
+ "name": "runtimes"
1899
+ },
1900
+ {
1901
+ "type": "list",
1902
+ "name": "invitations"
1903
+ },
1904
+ {
1905
+ "type": "list",
1906
+ "name": "api_keys"
1907
+ },
1908
+ {
1909
+ "type": "list",
1910
+ "name": "triggers"
1911
+ },
1912
+ {
1913
+ "type": "list",
1914
+ "name": "webhooks"
1915
+ },
1916
+ {
1917
+ "type": "list",
1918
+ "name": "schedules"
1919
+ }
1920
+ ]
1921
+ },
1922
+ "created_at": {
1923
+ "read_only": true,
1924
+ "required": false,
1925
+ "type": "datetime",
1926
+ "label": "created at"
1927
+ },
1928
+ "updated_at": {
1929
+ "read_only": true,
1930
+ "required": false,
1931
+ "type": "datetime",
1932
+ "label": "updated at"
1933
+ },
1934
+ "role": {
1935
+ "read_only": true,
1936
+ "required": false,
1937
+ "type": "field"
1938
+ },
1939
+ "owner": {
1940
+ "first_name": {
1941
+ "read_only": false,
1942
+ "max_length": 35,
1943
+ "required": false,
1944
+ "type": "string",
1945
+ "label": "first name"
1946
+ },
1947
+ "last_name": {
1948
+ "read_only": false,
1949
+ "max_length": 35,
1950
+ "required": false,
1951
+ "type": "string",
1952
+ "label": "last name"
1953
+ },
1954
+ "id": {
1955
+ "read_only": true,
1956
+ "required": false,
1957
+ "type": "integer",
1958
+ "label": "ID"
1959
+ },
1960
+ "email": {
1961
+ "read_only": false,
1962
+ "max_length": 254,
1963
+ "required": true,
1964
+ "type": "email",
1965
+ "label": "email address"
1966
+ }
1967
+ },
1968
+ "metadata": {
1969
+ "read_only": false,
1970
+ "required": false,
1971
+ "type": "field",
1972
+ "label": "metadata"
1973
+ },
1974
+ "description": {
1975
+ "read_only": false,
1976
+ "required": false,
1977
+ "type": "string",
1978
+ "label": "description"
1979
+ }
1980
+ },
1981
+ "properties": [
1982
+ "name"
1983
+ ],
1984
+ "path": "/v1/instances/{name}/"
1985
+ }
1986
+ },
1987
+ "name": "Instance"
1988
+ },
1989
+ {
1990
+ "endpoints": {
1991
+ "list": {
1992
+ "methods": [
1993
+ "post",
1994
+ "get"
1995
+ ],
1996
+ "fields": {
1997
+ "links": {
1998
+ "read_only": true,
1999
+ "required": false,
2000
+ "type": "links",
2001
+ "links": [
2002
+ {
2003
+ "type": "detail",
2004
+ "name": "self"
2005
+ }
2006
+ ]
2007
+ },
2008
+ "created_at": {
2009
+ "read_only": true,
2010
+ "required": false,
2011
+ "type": "datetime",
2012
+ "label": "created at"
2013
+ },
2014
+ "updated_at": {
2015
+ "read_only": true,
2016
+ "required": false,
2017
+ "type": "datetime",
2018
+ "label": "updated at"
2019
+ },
2020
+ "email": {
2021
+ "read_only": false,
2022
+ "max_length": 254,
2023
+ "required": true,
2024
+ "type": "email",
2025
+ "label": "email"
2026
+ },
2027
+ "state": {
2028
+ "read_only": true,
2029
+ "required": false,
2030
+ "type": "choice",
2031
+ "choices": [
2032
+ {
2033
+ "display_name": "---------",
2034
+ "value": ""
2035
+ },
2036
+ {
2037
+ "display_name": "new",
2038
+ "value": 1
2039
+ },
2040
+ {
2041
+ "display_name": "declined",
2042
+ "value": 2
2043
+ },
2044
+ {
2045
+ "display_name": "accepted",
2046
+ "value": 3
2047
+ }
2048
+ ]
2049
+ },
2050
+ "role": {
2051
+ "read_only": true,
2052
+ "required": false,
2053
+ "type": "field"
2054
+ },
2055
+ "key": {
2056
+ "read_only": false,
2057
+ "max_length": 40,
2058
+ "required": true,
2059
+ "type": "string",
2060
+ "label": "key"
2061
+ },
2062
+ "id": {
2063
+ "read_only": true,
2064
+ "required": false,
2065
+ "type": "integer",
2066
+ "primary_key": true,
2067
+ "label": "ID"
2068
+ }
2069
+ },
2070
+ "properties": [
2071
+ "instance_name"
2072
+ ],
2073
+ "path": "/v1/instances/{instance_name}/invitations/"
2074
+ },
2075
+ "detail": {
2076
+ "methods": [
2077
+ "get",
2078
+ "delete"
2079
+ ],
2080
+ "fields": {
2081
+ "links": {
2082
+ "read_only": true,
2083
+ "required": false,
2084
+ "type": "links",
2085
+ "links": [
2086
+ {
2087
+ "type": "detail",
2088
+ "name": "self"
2089
+ }
2090
+ ]
2091
+ },
2092
+ "created_at": {
2093
+ "read_only": true,
2094
+ "required": false,
2095
+ "type": "datetime",
2096
+ "label": "created at"
2097
+ },
2098
+ "updated_at": {
2099
+ "read_only": true,
2100
+ "required": false,
2101
+ "type": "datetime",
2102
+ "label": "updated at"
2103
+ },
2104
+ "email": {
2105
+ "read_only": false,
2106
+ "max_length": 254,
2107
+ "required": true,
2108
+ "type": "email",
2109
+ "label": "email"
2110
+ },
2111
+ "state": {
2112
+ "read_only": true,
2113
+ "required": false,
2114
+ "type": "choice",
2115
+ "choices": [
2116
+ {
2117
+ "display_name": "---------",
2118
+ "value": ""
2119
+ },
2120
+ {
2121
+ "display_name": "new",
2122
+ "value": 1
2123
+ },
2124
+ {
2125
+ "display_name": "declined",
2126
+ "value": 2
2127
+ },
2128
+ {
2129
+ "display_name": "accepted",
2130
+ "value": 3
2131
+ }
2132
+ ]
2133
+ },
2134
+ "role": {
2135
+ "read_only": true,
2136
+ "required": false,
2137
+ "type": "field"
2138
+ },
2139
+ "key": {
2140
+ "read_only": false,
2141
+ "max_length": 40,
2142
+ "required": true,
2143
+ "type": "string",
2144
+ "label": "key"
2145
+ },
2146
+ "id": {
2147
+ "read_only": true,
2148
+ "required": false,
2149
+ "type": "integer",
2150
+ "primary_key": true,
2151
+ "label": "ID"
2152
+ }
2153
+ },
2154
+ "properties": [
2155
+ "instance_name",
2156
+ "id"
2157
+ ],
2158
+ "path": "/v1/instances/{instance_name}/invitations/{id}/"
2159
+ }
2160
+ },
2161
+ "name": "Invitation"
2162
+ },
2163
+ {
2164
+ "endpoints": {
2165
+ "list": {
2166
+ "methods": [
2167
+ "get"
2168
+ ],
2169
+ "fields": {},
2170
+ "properties": [],
2171
+ "path": "/v1/billing/invoices/"
2172
+ },
2173
+ "detail": {
2174
+ "methods": [
2175
+ "get"
2176
+ ],
2177
+ "fields": {},
2178
+ "properties": [
2179
+ "id"
2180
+ ],
2181
+ "path": "/v1/billing/invoices/{id}/"
2182
+ }
2183
+ },
2184
+ "name": "Invoice"
2185
+ },
2186
+ {
2187
+ "endpoints": {
2188
+ "list": {
2189
+ "methods": [
2190
+ "post",
2191
+ "get"
2192
+ ],
2193
+ "fields": {
2194
+ "created_at": {
2195
+ "read_only": true,
2196
+ "required": false,
2197
+ "type": "datetime",
2198
+ "label": "created at"
2199
+ },
2200
+ "revision": {
2201
+ "read_only": true,
2202
+ "required": true,
2203
+ "type": "integer",
2204
+ "label": "revision"
2205
+ },
2206
+ "id": {
2207
+ "read_only": true,
2208
+ "required": false,
2209
+ "type": "integer",
2210
+ "primary_key": true,
2211
+ "label": "ID"
2212
+ },
2213
+ "links": {
2214
+ "read_only": true,
2215
+ "required": false,
2216
+ "type": "links",
2217
+ "links": [
2218
+ {
2219
+ "type": "detail",
2220
+ "name": "self"
2221
+ }
2222
+ ]
2223
+ },
2224
+ "updated_at": {
2225
+ "read_only": true,
2226
+ "required": false,
2227
+ "type": "datetime",
2228
+ "label": "updated at"
2229
+ }
2230
+ },
2231
+ "query_fields": [
2232
+ "id",
2233
+ "created_at",
2234
+ "updated_at",
2235
+ "revision"
2236
+ ],
2237
+ "order_fields": [
2238
+ "created_at",
2239
+ "updated_at",
2240
+ "id"
2241
+ ],
2242
+ "path": "/v1/instances/{instance_name}/classes/{class_name}/objects/",
2243
+ "properties": [
2244
+ "instance_name",
2245
+ "class_name"
2246
+ ]
2247
+ },
2248
+ "detail": {
2249
+ "methods": [
2250
+ "delete",
2251
+ "post",
2252
+ "patch",
2253
+ "get"
2254
+ ],
2255
+ "fields": {
2256
+ "expected_revision": {
2257
+ "read_only": false,
2258
+ "required": false,
2259
+ "type": "integer",
2260
+ "label": "Expected revision"
2261
+ },
2262
+ "links": {
2263
+ "read_only": true,
2264
+ "required": false,
2265
+ "type": "links",
2266
+ "links": [
2267
+ {
2268
+ "type": "detail",
2269
+ "name": "self"
2270
+ }
2271
+ ]
2272
+ },
2273
+ "created_at": {
2274
+ "read_only": true,
2275
+ "required": false,
2276
+ "type": "datetime",
2277
+ "label": "created at"
2278
+ },
2279
+ "updated_at": {
2280
+ "read_only": true,
2281
+ "required": false,
2282
+ "type": "datetime",
2283
+ "label": "updated at"
2284
+ },
2285
+ "id": {
2286
+ "read_only": true,
2287
+ "required": false,
2288
+ "type": "integer",
2289
+ "primary_key": true,
2290
+ "label": "ID"
2291
+ },
2292
+ "revision": {
2293
+ "read_only": true,
2294
+ "required": true,
2295
+ "type": "integer",
2296
+ "label": "revision"
2297
+ }
2298
+ },
2299
+ "properties": [
2300
+ "instance_name",
2301
+ "class_name",
2302
+ "id"
2303
+ ],
2304
+ "path": "/v1/instances/{instance_name}/classes/{class_name}/objects/{id}/"
2305
+ }
2306
+ },
2307
+ "name": "Object"
2308
+ },
2309
+ {
2310
+ "endpoints": {
2311
+ "list": {
2312
+ "methods": [
2313
+ "get"
2314
+ ],
2315
+ "fields": {
2316
+ "name": {
2317
+ "read_only": false,
2318
+ "required": true,
2319
+ "type": "string"
2320
+ },
2321
+ "links": {
2322
+ "read_only": true,
2323
+ "required": false,
2324
+ "type": "links",
2325
+ "links": [
2326
+ {
2327
+ "type": "detail",
2328
+ "name": "self"
2329
+ }
2330
+ ]
2331
+ }
2332
+ },
2333
+ "properties": [],
2334
+ "path": "/v1/billing/plans/"
2335
+ },
2336
+ "detail": {
2337
+ "methods": [
2338
+ "get"
2339
+ ],
2340
+ "fields": {
2341
+ "name": {
2342
+ "read_only": false,
2343
+ "required": true,
2344
+ "type": "string"
2345
+ },
2346
+ "links": {
2347
+ "read_only": true,
2348
+ "required": false,
2349
+ "type": "links",
2350
+ "links": [
2351
+ {
2352
+ "type": "detail",
2353
+ "name": "self"
2354
+ }
2355
+ ]
2356
+ }
2357
+ },
2358
+ "properties": [
2359
+ "id"
2360
+ ],
2361
+ "path": "/v1/billing/plans/{id}/"
2362
+ }
2363
+ },
2364
+ "name": "PricingPlan"
2365
+ },
2366
+ {
2367
+ "endpoints": {
2368
+ "list": {
2369
+ "methods": [
2370
+ "get"
2371
+ ],
2372
+ "fields": {},
2373
+ "properties": [
2374
+ "instance_name"
2375
+ ],
2376
+ "path": "/v1/instances/{instance_name}/codeboxes/runtimes/"
2377
+ }
2378
+ },
2379
+ "name": "Runtime"
2380
+ },
2381
+ {
2382
+ "endpoints": {
2383
+ "list": {
2384
+ "methods": [
2385
+ "get"
2386
+ ],
2387
+ "fields": {
2388
+ "status": {
2389
+ "read_only": false,
2390
+ "choices": [
2391
+ {
2392
+ "display_name": "Pending",
2393
+ "value": "pending"
2394
+ },
2395
+ {
2396
+ "display_name": "Success",
2397
+ "value": "success"
2398
+ },
2399
+ {
2400
+ "display_name": "Failure",
2401
+ "value": "failure"
2402
+ },
2403
+ {
2404
+ "display_name": "Timeout",
2405
+ "value": "timeout"
2406
+ }
2407
+ ],
2408
+ "required": true,
2409
+ "type": "choice",
2410
+ "label": "status"
2411
+ },
2412
+ "links": {
2413
+ "read_only": true,
2414
+ "required": false,
2415
+ "type": "links",
2416
+ "links": [
2417
+ {
2418
+ "type": "detail",
2419
+ "name": "self"
2420
+ }
2421
+ ]
2422
+ },
2423
+ "executed_at": {
2424
+ "read_only": false,
2425
+ "required": false,
2426
+ "type": "datetime",
2427
+ "label": "executed at"
2428
+ },
2429
+ "result": {
2430
+ "read_only": false,
2431
+ "required": false,
2432
+ "type": "string",
2433
+ "label": "result"
2434
+ },
2435
+ "duration": {
2436
+ "read_only": false,
2437
+ "required": false,
2438
+ "type": "integer",
2439
+ "label": "duration"
2440
+ },
2441
+ "id": {
2442
+ "read_only": true,
2443
+ "required": false,
2444
+ "type": "integer",
2445
+ "primary_key": true,
2446
+ "label": "ID"
2447
+ }
2448
+ },
2449
+ "properties": [
2450
+ "instance_name",
2451
+ "schedule_id"
2452
+ ],
2453
+ "path": "/v1/instances/{instance_name}/schedules/{schedule_id}/traces/"
2454
+ },
2455
+ "detail": {
2456
+ "methods": [
2457
+ "get"
2458
+ ],
2459
+ "fields": {
2460
+ "status": {
2461
+ "read_only": false,
2462
+ "choices": [
2463
+ {
2464
+ "display_name": "Pending",
2465
+ "value": "pending"
2466
+ },
2467
+ {
2468
+ "display_name": "Success",
2469
+ "value": "success"
2470
+ },
2471
+ {
2472
+ "display_name": "Failure",
2473
+ "value": "failure"
2474
+ },
2475
+ {
2476
+ "display_name": "Timeout",
2477
+ "value": "timeout"
2478
+ }
2479
+ ],
2480
+ "required": true,
2481
+ "type": "choice",
2482
+ "label": "status"
2483
+ },
2484
+ "links": {
2485
+ "read_only": true,
2486
+ "required": false,
2487
+ "type": "links",
2488
+ "links": [
2489
+ {
2490
+ "type": "detail",
2491
+ "name": "self"
2492
+ }
2493
+ ]
2494
+ },
2495
+ "executed_at": {
2496
+ "read_only": false,
2497
+ "required": false,
2498
+ "type": "datetime",
2499
+ "label": "executed at"
2500
+ },
2501
+ "result": {
2502
+ "read_only": false,
2503
+ "required": false,
2504
+ "type": "string",
2505
+ "label": "result"
2506
+ },
2507
+ "duration": {
2508
+ "read_only": false,
2509
+ "required": false,
2510
+ "type": "integer",
2511
+ "label": "duration"
2512
+ },
2513
+ "id": {
2514
+ "read_only": true,
2515
+ "required": false,
2516
+ "type": "integer",
2517
+ "primary_key": true,
2518
+ "label": "ID"
2519
+ }
2520
+ },
2521
+ "properties": [
2522
+ "instance_name",
2523
+ "schedule_id",
2524
+ "id"
2525
+ ],
2526
+ "path": "/v1/instances/{instance_name}/schedules/{schedule_id}/traces/{id}/"
2527
+ }
2528
+ },
2529
+ "name": "ScheduleTrace"
2530
+ },
2531
+ {
2532
+ "endpoints": {
2533
+ "list": {
2534
+ "methods": [
2535
+ "post",
2536
+ "get"
2537
+ ],
2538
+ "fields": {
2539
+ "codebox": {
2540
+ "read_only": false,
2541
+ "required": true,
2542
+ "type": "field",
2543
+ "label": "codebox"
2544
+ },
2545
+ "name": {
2546
+ "read_only": false,
2547
+ "max_length": 80,
2548
+ "required": true,
2549
+ "type": "string",
2550
+ "label": "name"
2551
+ },
2552
+ "links": {
2553
+ "read_only": true,
2554
+ "required": false,
2555
+ "type": "links",
2556
+ "links": [
2557
+ {
2558
+ "type": "detail",
2559
+ "name": "self"
2560
+ },
2561
+ {
2562
+ "type": "list",
2563
+ "name": "traces"
2564
+ },
2565
+ {
2566
+ "type": "detail",
2567
+ "name": "codebox"
2568
+ }
2569
+ ]
2570
+ },
2571
+ "scheduled_next": {
2572
+ "read_only": true,
2573
+ "required": false,
2574
+ "type": "datetime",
2575
+ "label": "scheduled next"
2576
+ },
2577
+ "created_at": {
2578
+ "read_only": true,
2579
+ "required": false,
2580
+ "type": "datetime",
2581
+ "label": "created at"
2582
+ },
2583
+ "interval_sec": {
2584
+ "read_only": false,
2585
+ "required": false,
2586
+ "type": "integer",
2587
+ "label": "interval sec"
2588
+ },
2589
+ "crontab": {
2590
+ "read_only": false,
2591
+ "max_length": 40,
2592
+ "required": false,
2593
+ "type": "string",
2594
+ "label": "crontab"
2595
+ },
2596
+ "id": {
2597
+ "read_only": true,
2598
+ "required": false,
2599
+ "type": "integer",
2600
+ "primary_key": true,
2601
+ "label": "ID"
2602
+ }
2603
+ },
2604
+ "properties": [
2605
+ "instance_name"
2606
+ ],
2607
+ "path": "/v1/instances/{instance_name}/schedules/"
2608
+ },
2609
+ "detail": {
2610
+ "methods": [
2611
+ "get",
2612
+ "delete"
2613
+ ],
2614
+ "fields": {
2615
+ "codebox": {
2616
+ "read_only": false,
2617
+ "required": true,
2618
+ "type": "field",
2619
+ "label": "codebox"
2620
+ },
2621
+ "name": {
2622
+ "read_only": false,
2623
+ "max_length": 80,
2624
+ "required": true,
2625
+ "type": "string",
2626
+ "label": "name"
2627
+ },
2628
+ "links": {
2629
+ "read_only": true,
2630
+ "required": false,
2631
+ "type": "links",
2632
+ "links": [
2633
+ {
2634
+ "type": "detail",
2635
+ "name": "self"
2636
+ },
2637
+ {
2638
+ "type": "list",
2639
+ "name": "traces"
2640
+ },
2641
+ {
2642
+ "type": "detail",
2643
+ "name": "codebox"
2644
+ }
2645
+ ]
2646
+ },
2647
+ "scheduled_next": {
2648
+ "read_only": true,
2649
+ "required": false,
2650
+ "type": "datetime",
2651
+ "label": "scheduled next"
2652
+ },
2653
+ "created_at": {
2654
+ "read_only": true,
2655
+ "required": false,
2656
+ "type": "datetime",
2657
+ "label": "created at"
2658
+ },
2659
+ "interval_sec": {
2660
+ "read_only": false,
2661
+ "required": false,
2662
+ "type": "integer",
2663
+ "label": "interval sec"
2664
+ },
2665
+ "crontab": {
2666
+ "read_only": false,
2667
+ "max_length": 40,
2668
+ "required": false,
2669
+ "type": "string",
2670
+ "label": "crontab"
2671
+ },
2672
+ "id": {
2673
+ "read_only": true,
2674
+ "required": false,
2675
+ "type": "integer",
2676
+ "primary_key": true,
2677
+ "label": "ID"
2678
+ }
2679
+ },
2680
+ "properties": [
2681
+ "instance_name",
2682
+ "id"
2683
+ ],
2684
+ "path": "/v1/instances/{instance_name}/schedules/{id}/"
2685
+ }
2686
+ },
2687
+ "name": "Schedule"
2688
+ },
2689
+ {
2690
+ "endpoints": {
2691
+ "list": {
2692
+ "methods": [
2693
+ "get"
2694
+ ],
2695
+ "fields": {
2696
+ "pricing_plan": {
2697
+ "read_only": false,
2698
+ "required": true,
2699
+ "type": "field",
2700
+ "label": "pricing plan"
2701
+ },
2702
+ "start": {
2703
+ "read_only": false,
2704
+ "required": true,
2705
+ "type": "date",
2706
+ "label": "start"
2707
+ },
2708
+ "links": {
2709
+ "read_only": true,
2710
+ "required": false,
2711
+ "type": "links",
2712
+ "links": [
2713
+ {
2714
+ "type": "detail",
2715
+ "name": "self"
2716
+ },
2717
+ {
2718
+ "type": "detail",
2719
+ "name": "pricing_plan"
2720
+ }
2721
+ ]
2722
+ }
2723
+ },
2724
+ "properties": [],
2725
+ "path": "/v1/billing/subscriptions/"
2726
+ },
2727
+ "detail": {
2728
+ "methods": [
2729
+ "get"
2730
+ ],
2731
+ "fields": {
2732
+ "pricing_plan": {
2733
+ "read_only": false,
2734
+ "required": true,
2735
+ "type": "field",
2736
+ "label": "pricing plan"
2737
+ },
2738
+ "start": {
2739
+ "read_only": false,
2740
+ "required": true,
2741
+ "type": "date",
2742
+ "label": "start"
2743
+ },
2744
+ "links": {
2745
+ "read_only": true,
2746
+ "required": false,
2747
+ "type": "links",
2748
+ "links": [
2749
+ {
2750
+ "type": "detail",
2751
+ "name": "self"
2752
+ },
2753
+ {
2754
+ "type": "detail",
2755
+ "name": "pricing_plan"
2756
+ }
2757
+ ]
2758
+ }
2759
+ },
2760
+ "properties": [
2761
+ "id"
2762
+ ],
2763
+ "path": "/v1/billing/subscriptions/{id}/"
2764
+ }
2765
+ },
2766
+ "name": "Subscription"
2767
+ },
2768
+ {
2769
+ "endpoints": {
2770
+ "tabular_trend": {
2771
+ "methods": [
2772
+ "get"
2773
+ ],
2774
+ "fields": {
2775
+ "end": {
2776
+ "read_only": false,
2777
+ "required": true,
2778
+ "type": "datetime"
2779
+ },
2780
+ "instance": {
2781
+ "read_only": false,
2782
+ "required": false,
2783
+ "type": "field",
2784
+ "label": "Instance"
2785
+ },
2786
+ "start": {
2787
+ "read_only": false,
2788
+ "required": true,
2789
+ "type": "datetime"
2790
+ },
2791
+ "step": {
2792
+ "read_only": false,
2793
+ "required": true,
2794
+ "type": "choice",
2795
+ "choices": [
2796
+ {
2797
+ "display_name": 60,
2798
+ "value": 60
2799
+ },
2800
+ {
2801
+ "display_name": 3600,
2802
+ "value": 3600
2803
+ },
2804
+ {
2805
+ "display_name": 86400,
2806
+ "value": 86400
2807
+ }
2808
+ ]
2809
+ },
2810
+ "group_by": {
2811
+ "read_only": false,
2812
+ "required": false,
2813
+ "type": "field"
2814
+ },
2815
+ "samples": {
2816
+ "read_only": true,
2817
+ "required": false,
2818
+ "type": "field"
2819
+ },
2820
+ "browser_family": {
2821
+ "read_only": false,
2822
+ "required": false,
2823
+ "type": "field",
2824
+ "label": "Browser family"
2825
+ }
2826
+ },
2827
+ "properties": [
2828
+ "indicator_name"
2829
+ ],
2830
+ "path": "/v1/metrics/trend/{indicator_name}/"
2831
+ }
2832
+ },
2833
+ "name": "TabularTrendView"
2834
+ },
2835
+ {
2836
+ "endpoints": {
2837
+ "tech_tabular_trend": {
2838
+ "methods": [
2839
+ "get"
2840
+ ],
2841
+ "fields": {
2842
+ "end": {
2843
+ "read_only": false,
2844
+ "required": true,
2845
+ "type": "integer"
2846
+ },
2847
+ "instance": {
2848
+ "read_only": false,
2849
+ "required": false,
2850
+ "type": "field",
2851
+ "label": "Instance"
2852
+ },
2853
+ "start": {
2854
+ "read_only": false,
2855
+ "required": true,
2856
+ "type": "integer"
2857
+ },
2858
+ "step": {
2859
+ "read_only": false,
2860
+ "required": true,
2861
+ "type": "choice",
2862
+ "choices": [
2863
+ {
2864
+ "display_name": 60,
2865
+ "value": 60
2866
+ },
2867
+ {
2868
+ "display_name": 3600,
2869
+ "value": 3600
2870
+ },
2871
+ {
2872
+ "display_name": 86400,
2873
+ "value": 86400
2874
+ }
2875
+ ]
2876
+ },
2877
+ "group_by": {
2878
+ "read_only": false,
2879
+ "required": false,
2880
+ "type": "field"
2881
+ },
2882
+ "samples": {
2883
+ "read_only": true,
2884
+ "required": false,
2885
+ "type": "field"
2886
+ },
2887
+ "browser_family": {
2888
+ "read_only": false,
2889
+ "required": false,
2890
+ "type": "field",
2891
+ "label": "Browser family"
2892
+ }
2893
+ },
2894
+ "properties": [
2895
+ "indicator_name"
2896
+ ],
2897
+ "path": "/v1/metrics/tech/trend/{indicator_name}/"
2898
+ }
2899
+ },
2900
+ "name": "TechTabularTrendView"
2901
+ },
2902
+ {
2903
+ "endpoints": {
2904
+ "list": {
2905
+ "methods": [
2906
+ "get"
2907
+ ],
2908
+ "fields": {
2909
+ "status": {
2910
+ "read_only": false,
2911
+ "choices": [
2912
+ {
2913
+ "display_name": "Pending",
2914
+ "value": "pending"
2915
+ },
2916
+ {
2917
+ "display_name": "Success",
2918
+ "value": "success"
2919
+ },
2920
+ {
2921
+ "display_name": "Failure",
2922
+ "value": "failure"
2923
+ },
2924
+ {
2925
+ "display_name": "Timeout",
2926
+ "value": "timeout"
2927
+ }
2928
+ ],
2929
+ "required": true,
2930
+ "type": "choice",
2931
+ "label": "status"
2932
+ },
2933
+ "links": {
2934
+ "read_only": true,
2935
+ "required": false,
2936
+ "type": "links",
2937
+ "links": [
2938
+ {
2939
+ "type": "detail",
2940
+ "name": "self"
2941
+ }
2942
+ ]
2943
+ },
2944
+ "executed_at": {
2945
+ "read_only": false,
2946
+ "required": false,
2947
+ "type": "datetime",
2948
+ "label": "executed at"
2949
+ },
2950
+ "result": {
2951
+ "read_only": false,
2952
+ "required": false,
2953
+ "type": "string",
2954
+ "label": "result"
2955
+ },
2956
+ "duration": {
2957
+ "read_only": false,
2958
+ "required": false,
2959
+ "type": "integer",
2960
+ "label": "duration"
2961
+ },
2962
+ "id": {
2963
+ "read_only": true,
2964
+ "required": false,
2965
+ "type": "integer",
2966
+ "primary_key": true,
2967
+ "label": "ID"
2968
+ }
2969
+ },
2970
+ "properties": [
2971
+ "instance_name",
2972
+ "trigger_id"
2973
+ ],
2974
+ "path": "/v1/instances/{instance_name}/triggers/{trigger_id}/traces/"
2975
+ },
2976
+ "detail": {
2977
+ "methods": [
2978
+ "get"
2979
+ ],
2980
+ "fields": {
2981
+ "status": {
2982
+ "read_only": false,
2983
+ "choices": [
2984
+ {
2985
+ "display_name": "Pending",
2986
+ "value": "pending"
2987
+ },
2988
+ {
2989
+ "display_name": "Success",
2990
+ "value": "success"
2991
+ },
2992
+ {
2993
+ "display_name": "Failure",
2994
+ "value": "failure"
2995
+ },
2996
+ {
2997
+ "display_name": "Timeout",
2998
+ "value": "timeout"
2999
+ }
3000
+ ],
3001
+ "required": true,
3002
+ "type": "choice",
3003
+ "label": "status"
3004
+ },
3005
+ "links": {
3006
+ "read_only": true,
3007
+ "required": false,
3008
+ "type": "links",
3009
+ "links": [
3010
+ {
3011
+ "type": "detail",
3012
+ "name": "self"
3013
+ }
3014
+ ]
3015
+ },
3016
+ "executed_at": {
3017
+ "read_only": false,
3018
+ "required": false,
3019
+ "type": "datetime",
3020
+ "label": "executed at"
3021
+ },
3022
+ "result": {
3023
+ "read_only": false,
3024
+ "required": false,
3025
+ "type": "string",
3026
+ "label": "result"
3027
+ },
3028
+ "duration": {
3029
+ "read_only": false,
3030
+ "required": false,
3031
+ "type": "integer",
3032
+ "label": "duration"
3033
+ },
3034
+ "id": {
3035
+ "read_only": true,
3036
+ "required": false,
3037
+ "type": "integer",
3038
+ "primary_key": true,
3039
+ "label": "ID"
3040
+ }
3041
+ },
3042
+ "properties": [
3043
+ "instance_name",
3044
+ "trigger_id",
3045
+ "id"
3046
+ ],
3047
+ "path": "/v1/instances/{instance_name}/triggers/{trigger_id}/traces/{id}/"
3048
+ }
3049
+ },
3050
+ "name": "TriggerTrace"
3051
+ },
3052
+ {
3053
+ "endpoints": {
3054
+ "list": {
3055
+ "methods": [
3056
+ "post",
3057
+ "get"
3058
+ ],
3059
+ "fields": {
3060
+ "codebox": {
3061
+ "read_only": false,
3062
+ "required": true,
3063
+ "type": "field",
3064
+ "label": "codebox"
3065
+ },
3066
+ "name": {
3067
+ "read_only": false,
3068
+ "max_length": 80,
3069
+ "required": true,
3070
+ "type": "string",
3071
+ "label": "name"
3072
+ },
3073
+ "links": {
3074
+ "read_only": true,
3075
+ "required": false,
3076
+ "type": "links",
3077
+ "links": [
3078
+ {
3079
+ "type": "detail",
3080
+ "name": "self"
3081
+ },
3082
+ {
3083
+ "type": "detail",
3084
+ "name": "codebox"
3085
+ },
3086
+ {
3087
+ "type": "detail",
3088
+ "name": "klass"
3089
+ },
3090
+ {
3091
+ "type": "list",
3092
+ "name": "traces"
3093
+ }
3094
+ ]
3095
+ },
3096
+ "created_at": {
3097
+ "read_only": true,
3098
+ "required": false,
3099
+ "type": "datetime",
3100
+ "label": "created at"
3101
+ },
3102
+ "updated_at": {
3103
+ "read_only": true,
3104
+ "required": false,
3105
+ "type": "datetime",
3106
+ "label": "updated at"
3107
+ },
3108
+ "id": {
3109
+ "read_only": true,
3110
+ "required": false,
3111
+ "type": "integer",
3112
+ "primary_key": true,
3113
+ "label": "ID"
3114
+ },
3115
+ "klass": {
3116
+ "read_only": false,
3117
+ "required": true,
3118
+ "type": "field",
3119
+ "label": "class"
3120
+ },
3121
+ "signal": {
3122
+ "read_only": false,
3123
+ "choices": [
3124
+ {
3125
+ "display_name": "post_update",
3126
+ "value": "post_update"
3127
+ },
3128
+ {
3129
+ "display_name": "post_create",
3130
+ "value": "post_create"
3131
+ },
3132
+ {
3133
+ "display_name": "post_delete",
3134
+ "value": "post_delete"
3135
+ }
3136
+ ],
3137
+ "required": true,
3138
+ "type": "choice",
3139
+ "label": "signal"
3140
+ }
3141
+ },
3142
+ "properties": [
3143
+ "instance_name"
3144
+ ],
3145
+ "path": "/v1/instances/{instance_name}/triggers/"
3146
+ },
3147
+ "detail": {
3148
+ "methods": [
3149
+ "put",
3150
+ "get",
3151
+ "patch",
3152
+ "delete"
3153
+ ],
3154
+ "fields": {
3155
+ "codebox": {
3156
+ "read_only": false,
3157
+ "required": true,
3158
+ "type": "field",
3159
+ "label": "codebox"
3160
+ },
3161
+ "name": {
3162
+ "read_only": false,
3163
+ "max_length": 80,
3164
+ "required": true,
3165
+ "type": "string",
3166
+ "label": "name"
3167
+ },
3168
+ "links": {
3169
+ "read_only": true,
3170
+ "required": false,
3171
+ "type": "links",
3172
+ "links": [
3173
+ {
3174
+ "type": "detail",
3175
+ "name": "self"
3176
+ },
3177
+ {
3178
+ "type": "detail",
3179
+ "name": "codebox"
3180
+ },
3181
+ {
3182
+ "type": "detail",
3183
+ "name": "klass"
3184
+ },
3185
+ {
3186
+ "type": "list",
3187
+ "name": "traces"
3188
+ }
3189
+ ]
3190
+ },
3191
+ "created_at": {
3192
+ "read_only": true,
3193
+ "required": false,
3194
+ "type": "datetime",
3195
+ "label": "created at"
3196
+ },
3197
+ "updated_at": {
3198
+ "read_only": true,
3199
+ "required": false,
3200
+ "type": "datetime",
3201
+ "label": "updated at"
3202
+ },
3203
+ "id": {
3204
+ "read_only": true,
3205
+ "required": false,
3206
+ "type": "integer",
3207
+ "primary_key": true,
3208
+ "label": "ID"
3209
+ },
3210
+ "klass": {
3211
+ "read_only": false,
3212
+ "required": true,
3213
+ "type": "field",
3214
+ "label": "class"
3215
+ },
3216
+ "signal": {
3217
+ "read_only": false,
3218
+ "choices": [
3219
+ {
3220
+ "display_name": "post_update",
3221
+ "value": "post_update"
3222
+ },
3223
+ {
3224
+ "display_name": "post_create",
3225
+ "value": "post_create"
3226
+ },
3227
+ {
3228
+ "display_name": "post_delete",
3229
+ "value": "post_delete"
3230
+ }
3231
+ ],
3232
+ "required": true,
3233
+ "type": "choice",
3234
+ "label": "signal"
3235
+ }
3236
+ },
3237
+ "properties": [
3238
+ "instance_name",
3239
+ "id"
3240
+ ],
3241
+ "path": "/v1/instances/{instance_name}/triggers/{id}/"
3242
+ }
3243
+ },
3244
+ "name": "Trigger"
3245
+ },
3246
+ {
3247
+ "endpoints": {
3248
+ "run": {
3249
+ "methods": [
3250
+ "get"
3251
+ ],
3252
+ "fields": {
3253
+ "public_link": {
3254
+ "read_only": false,
3255
+ "primary_key": true,
3256
+ "required": false,
3257
+ "label": "public link",
3258
+ "max_length": 40,
3259
+ "type": "string"
3260
+ },
3261
+ "codebox": {
3262
+ "read_only": false,
3263
+ "required": true,
3264
+ "type": "field",
3265
+ "label": "codebox"
3266
+ },
3267
+ "slug": {
3268
+ "read_only": false,
3269
+ "max_length": 50,
3270
+ "required": true,
3271
+ "type": "slug",
3272
+ "label": "slug"
3273
+ },
3274
+ "public": {
3275
+ "read_only": false,
3276
+ "required": false,
3277
+ "type": "boolean",
3278
+ "label": "public"
3279
+ }
3280
+ },
3281
+ "properties": [
3282
+ "instance_name",
3283
+ "public_link"
3284
+ ],
3285
+ "path": "/v1/instances/{instance_name}/webhooks/p/{public_link}/"
3286
+ }
3287
+ },
3288
+ "name": "WebhookPublicView"
3289
+ },
3290
+ {
3291
+ "endpoints": {
3292
+ "link": {
3293
+ "methods": [
3294
+ "post"
3295
+ ],
3296
+ "fields": {
3297
+ "codebox": {
3298
+ "read_only": false,
3299
+ "required": true,
3300
+ "type": "field",
3301
+ "label": "codebox"
3302
+ },
3303
+ "public": {
3304
+ "read_only": false,
3305
+ "required": false,
3306
+ "type": "boolean",
3307
+ "label": "public"
3308
+ },
3309
+ "slug": {
3310
+ "read_only": false,
3311
+ "primary_key": true,
3312
+ "required": true,
3313
+ "label": "slug",
3314
+ "max_length": 50,
3315
+ "type": "slug"
3316
+ },
3317
+ "links": {
3318
+ "read_only": true,
3319
+ "required": false,
3320
+ "type": "links",
3321
+ "links": [
3322
+ {
3323
+ "type": "detail",
3324
+ "name": "self"
3325
+ },
3326
+ {
3327
+ "type": "run",
3328
+ "name": "run"
3329
+ },
3330
+ {
3331
+ "type": "detail",
3332
+ "name": "codebox"
3333
+ }
3334
+ ]
3335
+ },
3336
+ "public_link": {
3337
+ "read_only": true,
3338
+ "max_length": 40,
3339
+ "required": false,
3340
+ "type": "string",
3341
+ "label": "public link"
3342
+ }
3343
+ },
3344
+ "properties": [
3345
+ "instance_name",
3346
+ "id"
3347
+ ],
3348
+ "path": "/v1/instances/{instance_name}/webhooks/{id}/reset_link/"
3349
+ },
3350
+ "run": {
3351
+ "methods": [
3352
+ "get"
3353
+ ],
3354
+ "fields": {
3355
+ "codebox": {
3356
+ "read_only": false,
3357
+ "required": true,
3358
+ "type": "field",
3359
+ "label": "codebox"
3360
+ },
3361
+ "public": {
3362
+ "read_only": false,
3363
+ "required": false,
3364
+ "type": "boolean",
3365
+ "label": "public"
3366
+ },
3367
+ "slug": {
3368
+ "read_only": false,
3369
+ "primary_key": true,
3370
+ "required": true,
3371
+ "label": "slug",
3372
+ "max_length": 50,
3373
+ "type": "slug"
3374
+ },
3375
+ "links": {
3376
+ "read_only": true,
3377
+ "required": false,
3378
+ "type": "links",
3379
+ "links": [
3380
+ {
3381
+ "type": "detail",
3382
+ "name": "self"
3383
+ },
3384
+ {
3385
+ "type": "run",
3386
+ "name": "run"
3387
+ },
3388
+ {
3389
+ "type": "detail",
3390
+ "name": "codebox"
3391
+ }
3392
+ ]
3393
+ },
3394
+ "public_link": {
3395
+ "read_only": true,
3396
+ "max_length": 40,
3397
+ "required": false,
3398
+ "type": "string",
3399
+ "label": "public link"
3400
+ }
3401
+ },
3402
+ "properties": [
3403
+ "instance_name",
3404
+ "id"
3405
+ ],
3406
+ "path": "/v1/instances/{instance_name}/webhooks/{id}/run/"
3407
+ },
3408
+ "list": {
3409
+ "methods": [
3410
+ "post",
3411
+ "get"
3412
+ ],
3413
+ "fields": {
3414
+ "codebox": {
3415
+ "read_only": false,
3416
+ "required": true,
3417
+ "type": "field",
3418
+ "label": "codebox"
3419
+ },
3420
+ "public": {
3421
+ "read_only": false,
3422
+ "required": false,
3423
+ "type": "boolean",
3424
+ "label": "public"
3425
+ },
3426
+ "slug": {
3427
+ "read_only": false,
3428
+ "primary_key": true,
3429
+ "required": true,
3430
+ "label": "slug",
3431
+ "max_length": 50,
3432
+ "type": "slug"
3433
+ },
3434
+ "links": {
3435
+ "read_only": true,
3436
+ "required": false,
3437
+ "type": "links",
3438
+ "links": [
3439
+ {
3440
+ "type": "detail",
3441
+ "name": "self"
3442
+ },
3443
+ {
3444
+ "type": "run",
3445
+ "name": "run"
3446
+ },
3447
+ {
3448
+ "type": "detail",
3449
+ "name": "codebox"
3450
+ }
3451
+ ]
3452
+ },
3453
+ "public_link": {
3454
+ "read_only": true,
3455
+ "max_length": 40,
3456
+ "required": false,
3457
+ "type": "string",
3458
+ "label": "public link"
3459
+ }
3460
+ },
3461
+ "properties": [
3462
+ "instance_name"
3463
+ ],
3464
+ "path": "/v1/instances/{instance_name}/webhooks/"
3465
+ },
3466
+ "detail": {
3467
+ "methods": [
3468
+ "put",
3469
+ "get",
3470
+ "patch",
3471
+ "delete"
3472
+ ],
3473
+ "fields": {
3474
+ "codebox": {
3475
+ "read_only": false,
3476
+ "required": true,
3477
+ "type": "field",
3478
+ "label": "codebox"
3479
+ },
3480
+ "public": {
3481
+ "read_only": false,
3482
+ "required": false,
3483
+ "type": "boolean",
3484
+ "label": "public"
3485
+ },
3486
+ "slug": {
3487
+ "read_only": true,
3488
+ "primary_key": true,
3489
+ "required": true,
3490
+ "label": "slug",
3491
+ "max_length": 50,
3492
+ "type": "slug"
3493
+ },
3494
+ "links": {
3495
+ "read_only": true,
3496
+ "required": false,
3497
+ "type": "links",
3498
+ "links": [
3499
+ {
3500
+ "type": "detail",
3501
+ "name": "self"
3502
+ },
3503
+ {
3504
+ "type": "run",
3505
+ "name": "run"
3506
+ },
3507
+ {
3508
+ "type": "detail",
3509
+ "name": "codebox"
3510
+ }
3511
+ ]
3512
+ },
3513
+ "public_link": {
3514
+ "read_only": true,
3515
+ "max_length": 40,
3516
+ "required": false,
3517
+ "type": "string",
3518
+ "label": "public link"
3519
+ }
3520
+ },
3521
+ "properties": [
3522
+ "instance_name",
3523
+ "id"
3524
+ ],
3525
+ "path": "/v1/instances/{instance_name}/webhooks/{id}/"
3526
+ }
3527
+ },
3528
+ "name": "Webhook"
3529
+ }
3530
+ ] ')
3531
+ end
3532
+ end