datacontract-cli 0.10.2__py3-none-any.whl → 0.10.4__py3-none-any.whl
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.
Potentially problematic release.
This version of datacontract-cli might be problematic. Click here for more details.
- datacontract/breaking/breaking.py +12 -0
- datacontract/breaking/breaking_rules.py +4 -0
- datacontract/catalog/catalog.py +3 -0
- datacontract/cli.py +36 -8
- datacontract/data_contract.py +62 -128
- datacontract/export/avro_converter.py +16 -2
- datacontract/export/bigquery_converter.py +106 -0
- datacontract/export/go_converter.py +98 -0
- datacontract/export/html_export.py +6 -1
- datacontract/export/jsonschema_converter.py +45 -5
- datacontract/export/sql_converter.py +1 -0
- datacontract/export/sql_type_converter.py +42 -1
- datacontract/imports/avro_importer.py +14 -1
- datacontract/imports/bigquery_importer.py +166 -0
- datacontract/imports/jsonschema_importer.py +150 -0
- datacontract/model/data_contract_specification.py +55 -1
- datacontract/publish/publish.py +32 -0
- datacontract/templates/datacontract.html +37 -346
- datacontract/templates/index.html +233 -0
- datacontract/templates/partials/datacontract_information.html +66 -0
- datacontract/templates/partials/datacontract_servicelevels.html +253 -0
- datacontract/templates/partials/datacontract_terms.html +44 -0
- datacontract/templates/partials/definition.html +99 -0
- datacontract/templates/partials/example.html +27 -0
- datacontract/templates/partials/model_field.html +97 -0
- datacontract/templates/partials/server.html +144 -0
- datacontract/templates/style/output.css +94 -13
- {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/METADATA +139 -96
- {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/RECORD +33 -20
- {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/LICENSE +0 -0
- {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/WHEEL +0 -0
- {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/entry_points.txt +0 -0
- {datacontract_cli-0.10.2.dist-info → datacontract_cli-0.10.4.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
<div class="mt-3 flow-root">
|
|
2
|
+
<div class="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
|
|
3
|
+
<div class="inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8">
|
|
4
|
+
<div class="overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg">
|
|
5
|
+
|
|
6
|
+
<table class="min-w-full divide-y divide-gray-300">
|
|
7
|
+
<thead class="bg-gray-50">
|
|
8
|
+
<tr>
|
|
9
|
+
<th scope="colgroup" colspan="3" class="py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6">
|
|
10
|
+
<span>{{ definition_name }}</span>
|
|
11
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10">{{ definition.domain }}</span>
|
|
12
|
+
<div class="text-sm font-medium text-gray-500">{{ definition.description }}</div>
|
|
13
|
+
</th>
|
|
14
|
+
</tr>
|
|
15
|
+
</thead>
|
|
16
|
+
<tbody class="divide-y divide-gray-200 bg-white">
|
|
17
|
+
<tr>
|
|
18
|
+
<td class="whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12">
|
|
19
|
+
<div class="py-2 text-sm">
|
|
20
|
+
{% if definition.title %}
|
|
21
|
+
<div>{{ definition.title }}</div>
|
|
22
|
+
{% endif %}
|
|
23
|
+
<div class="font-mono">{{ definition.name }}</div>
|
|
24
|
+
</div>
|
|
25
|
+
</td>
|
|
26
|
+
<td class="whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12">
|
|
27
|
+
<div class="py-2 text-sm">
|
|
28
|
+
{{ definition.type }}
|
|
29
|
+
{% if definition.format %}
|
|
30
|
+
<span class="inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1">{{ definition.format }}</span>
|
|
31
|
+
{% endif %}
|
|
32
|
+
</div>
|
|
33
|
+
</td>
|
|
34
|
+
<td class="px-3 py-2 text-sm text-gray-500 w-9/12">
|
|
35
|
+
{% if definition.example %}
|
|
36
|
+
<div class="mt-1">
|
|
37
|
+
<span class="text-gray-600 font-medium">Example:</span> <span class="font-mono">{{ definition.example }}</span>
|
|
38
|
+
</div>
|
|
39
|
+
{% endif %}
|
|
40
|
+
{% if definition.tags %}
|
|
41
|
+
<div>
|
|
42
|
+
<span class="text-gray-600 font-medium">Tags:</span>
|
|
43
|
+
{% for tag in definition.tags %}
|
|
44
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">{{ tag }}</span>
|
|
45
|
+
{% endfor %}
|
|
46
|
+
</div>
|
|
47
|
+
{% endif %}
|
|
48
|
+
{% if definition.enum %}
|
|
49
|
+
<div class="py-2 text-sm">
|
|
50
|
+
<span class="text-gray-600 font-medium">Enum:</span>
|
|
51
|
+
{% for value in definition.enum %}
|
|
52
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">{{ value }}</span>
|
|
53
|
+
{% endfor %}
|
|
54
|
+
</div>
|
|
55
|
+
{% endif %}
|
|
56
|
+
<div>
|
|
57
|
+
{% if definition.minLength %}
|
|
58
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">minLength:{{ definition.minLength }}</span>
|
|
59
|
+
{% endif %}
|
|
60
|
+
{% if definition.maxLength %}
|
|
61
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">maxLength:{{ definition.maxLength }}</span>
|
|
62
|
+
{% endif %}
|
|
63
|
+
{% if definition.pattern %}
|
|
64
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">pattern:{{ definition.pattern }}</span>
|
|
65
|
+
{% endif %}
|
|
66
|
+
{% if definition.precision %}
|
|
67
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">precision:{{ definition.precision }}</span>
|
|
68
|
+
{% endif %}
|
|
69
|
+
{% if definition.scale %}
|
|
70
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">scale:{{ definition.scale }}</span>
|
|
71
|
+
{% endif %}
|
|
72
|
+
{% if definition.minimum %}
|
|
73
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">minimum:{{ definition.minimum }}</span>
|
|
74
|
+
{% endif %}
|
|
75
|
+
{% if definition.exclusiveMinimum %}
|
|
76
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">exclusiveMinimum:{{ definition.exclusiveMinimum }}</span>
|
|
77
|
+
{% endif %}
|
|
78
|
+
{% if definition.maximum %}
|
|
79
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">maximum:{{ definition.maximum }}</span>
|
|
80
|
+
{% endif %}
|
|
81
|
+
{% if definition.exclusiveMaximum %}
|
|
82
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">exclusiveMaximum:{{ definition.exclusiveMaximum }}</span>
|
|
83
|
+
{% endif %}
|
|
84
|
+
{% if definition.classification %}
|
|
85
|
+
<span class="inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1">{{ definition.classification }}</span>
|
|
86
|
+
{% endif %}
|
|
87
|
+
{% if definition.pii %}
|
|
88
|
+
<span class="inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1">PII</span>
|
|
89
|
+
{% endif %}
|
|
90
|
+
</div>
|
|
91
|
+
</td>
|
|
92
|
+
|
|
93
|
+
</tr>
|
|
94
|
+
</tbody>
|
|
95
|
+
</table>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<div class="mt-3 flow-root">
|
|
2
|
+
<div class="-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8">
|
|
3
|
+
<div class="inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8">
|
|
4
|
+
<div class="overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg">
|
|
5
|
+
|
|
6
|
+
<table class="min-w-full divide-y divide-gray-300">
|
|
7
|
+
<thead class="bg-gray-50">
|
|
8
|
+
<tr>
|
|
9
|
+
<th scope="colgroup" colspan="3" class="py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6">
|
|
10
|
+
<span>{{ example.model }}</span>
|
|
11
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10">{{ example.type }}</span>
|
|
12
|
+
<div class="text-sm font-medium text-gray-500">{{ example.description }}</div>
|
|
13
|
+
</th>
|
|
14
|
+
</tr>
|
|
15
|
+
</thead>
|
|
16
|
+
<tbody class="divide-y divide-gray-200 bg-white">
|
|
17
|
+
<tr>
|
|
18
|
+
<td class="whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-12/12">
|
|
19
|
+
<pre>{{ example.data }}</pre>
|
|
20
|
+
</td>
|
|
21
|
+
</tr>
|
|
22
|
+
</tbody>
|
|
23
|
+
</table>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{% if nested %}
|
|
2
|
+
<tr class="bg-gray-50">
|
|
3
|
+
<td class="whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12 flex items-center gap-x-4">
|
|
4
|
+
{# poor mans approach to indenting things a bit #}
|
|
5
|
+
{% for i in range(0,level)%}
|
|
6
|
+
<div class="w-2"> </div>
|
|
7
|
+
{% endfor %}
|
|
8
|
+
<div>
|
|
9
|
+
↳
|
|
10
|
+
</div>
|
|
11
|
+
{% else %}
|
|
12
|
+
<tr>
|
|
13
|
+
<td class="whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12">
|
|
14
|
+
{% endif %}
|
|
15
|
+
<div class="py-2 text-sm">
|
|
16
|
+
{% if field.title %}
|
|
17
|
+
<div>{{ field.title }}</div>
|
|
18
|
+
{% endif %}
|
|
19
|
+
<div class="font-mono">{{ field_name }}</div>
|
|
20
|
+
</div>
|
|
21
|
+
</td>
|
|
22
|
+
<td class="whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12">
|
|
23
|
+
{% if field.type %}
|
|
24
|
+
{{ field.type }}
|
|
25
|
+
{% endif %}
|
|
26
|
+
</td>
|
|
27
|
+
<td class="px-3 py-2 text-sm text-gray-500 w-7/12">
|
|
28
|
+
{% if field.description %}
|
|
29
|
+
<div class="text-gray-500">{{ field.description }}</div>
|
|
30
|
+
{% else %}
|
|
31
|
+
<div class="text-gray-400">No description</div>
|
|
32
|
+
{% endif %}
|
|
33
|
+
|
|
34
|
+
{% if field.example %}
|
|
35
|
+
<div class="mt-1 italic">
|
|
36
|
+
Example: <span class="font-mono">{{ field.example }}</span>
|
|
37
|
+
</div>
|
|
38
|
+
{% endif %}
|
|
39
|
+
|
|
40
|
+
<div>
|
|
41
|
+
{% if field.primary %}
|
|
42
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">primary</span>
|
|
43
|
+
{% endif %}
|
|
44
|
+
{% if field.required %}
|
|
45
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">required</span>
|
|
46
|
+
{% endif %}
|
|
47
|
+
{% if field.unique %}
|
|
48
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">unique</span>
|
|
49
|
+
{% endif %}
|
|
50
|
+
{% if field.format %}
|
|
51
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">format:{{ field.format }}</span>
|
|
52
|
+
{% endif %}
|
|
53
|
+
{% if field.minLength %}
|
|
54
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">minLength:{{ field.minLength }}</span>
|
|
55
|
+
{% endif %}
|
|
56
|
+
{% if field.maxLength %}
|
|
57
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">maxLength:{{ field.maxLength }}</span>
|
|
58
|
+
{% endif %}
|
|
59
|
+
{% if field.pattern %}
|
|
60
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">pattern:{{ field.pattern }}</span>
|
|
61
|
+
{% endif %}
|
|
62
|
+
{% if field.precision %}
|
|
63
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">precision:{{ field.precision }}</span>
|
|
64
|
+
{% endif %}
|
|
65
|
+
{% if field.scale %}
|
|
66
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">scale:{{ field.scale }}</span>
|
|
67
|
+
{% endif %}
|
|
68
|
+
{% if field.minimum %}
|
|
69
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">minimum:{{ field.minimum }}</span>
|
|
70
|
+
{% endif %}
|
|
71
|
+
{% if field.exclusiveMinimum %}
|
|
72
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">exclusiveMinimum:{{ field.exclusiveMinimum }}</span>
|
|
73
|
+
{% endif %}
|
|
74
|
+
{% if field.maximum %}
|
|
75
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">maximum:{{ field.maximum }}</span>
|
|
76
|
+
{% endif %}
|
|
77
|
+
{% if field.exclusiveMaximum %}
|
|
78
|
+
<span class="inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1">exclusiveMaximum:{{ field.exclusiveMaximum }}</span>
|
|
79
|
+
{% endif %}
|
|
80
|
+
{% if field.classification %}
|
|
81
|
+
<span class="inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1">{{ field.classification }}</span>
|
|
82
|
+
{% endif %}
|
|
83
|
+
{% if field.pii %}
|
|
84
|
+
<span class="inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1">PII</span>
|
|
85
|
+
{% endif %}
|
|
86
|
+
</div>
|
|
87
|
+
</td>
|
|
88
|
+
</tr>
|
|
89
|
+
|
|
90
|
+
{% if field.fields %}
|
|
91
|
+
{% for field_name, field in field.fields.items() %}
|
|
92
|
+
{{ render_partial('partials/model_field.html', nested = True, field_name=field_name, field = field, level = level + 1) }}
|
|
93
|
+
{% endfor %}
|
|
94
|
+
<!-- Mark the end of the contained fields -->
|
|
95
|
+
<tr style="--tw-divide-y-reverse: 2">
|
|
96
|
+
</tr>
|
|
97
|
+
{% endif %}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
<li class="relative flex gap-x-6 px-4 py-5 sm:px-6">
|
|
2
|
+
<div class="flex items-center gap-x-4">
|
|
3
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
4
|
+
<dt class="text-sm font-medium text-gray-500">Server</dt>
|
|
5
|
+
<dd class="mt-1 text-sm text-gray-900">{{server_name}}</dd>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
{% if server.type %}
|
|
10
|
+
<div class="flex items-center gap-x-4">
|
|
11
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
12
|
+
<dt class="text-sm font-medium text-gray-500">Type</dt>
|
|
13
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.type}}</dd>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
{% endif %}
|
|
17
|
+
|
|
18
|
+
{% if server.project %}
|
|
19
|
+
<div class="flex items-center gap-x-4">
|
|
20
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
21
|
+
<dt class="text-sm font-medium text-gray-500">Project</dt>
|
|
22
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.project}}</dd>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
{% endif %}
|
|
26
|
+
|
|
27
|
+
{% if server.dataset %}
|
|
28
|
+
<div class="flex items-center gap-x-4">
|
|
29
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
30
|
+
<dt class="text-sm font-medium text-gray-500">Dataset</dt>
|
|
31
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.dataset}}</dd>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
{% endif %}
|
|
35
|
+
|
|
36
|
+
{% if server.location %}
|
|
37
|
+
<div class="flex items-center gap-x-4">
|
|
38
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
39
|
+
<dt class="text-sm font-medium text-gray-500">Location</dt>
|
|
40
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.location}}</dd>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
{% endif %}
|
|
44
|
+
|
|
45
|
+
{% if server.endpointUrl %}
|
|
46
|
+
<div class="flex items-center gap-x-4">
|
|
47
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
48
|
+
<dt class="text-sm font-medium text-gray-500">Endpoint URL</dt>
|
|
49
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.endpointUrl}}</dd>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
{% endif %}
|
|
53
|
+
|
|
54
|
+
{% if server.account %}
|
|
55
|
+
<div class="flex items-center gap-x-4">
|
|
56
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
57
|
+
<dt class="text-sm font-medium text-gray-500">Account</dt>
|
|
58
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.account}}</dd>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
{% endif %}
|
|
62
|
+
|
|
63
|
+
{% if server.host %}
|
|
64
|
+
<div class="flex items-center gap-x-4">
|
|
65
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
66
|
+
<dt class="text-sm font-medium text-gray-500">Host</dt>
|
|
67
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.host}}</dd>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
{% endif %}
|
|
71
|
+
|
|
72
|
+
{% if server.port %}
|
|
73
|
+
<div class="flex items-center gap-x-4">
|
|
74
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
75
|
+
<dt class="text-sm font-medium text-gray-500">Port</dt>
|
|
76
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.port}}</dd>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
{% endif %}
|
|
80
|
+
|
|
81
|
+
{% if server.catalog %}
|
|
82
|
+
<div class="flex items-center gap-x-4">
|
|
83
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
84
|
+
<dt class="text-sm font-medium text-gray-500">Catalog</dt>
|
|
85
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.catalog}}</dd>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
{% endif %}
|
|
89
|
+
|
|
90
|
+
{% if server.database %}
|
|
91
|
+
<div class="flex items-center gap-x-4">
|
|
92
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
93
|
+
<dt class="text-sm font-medium text-gray-500">Database</dt>
|
|
94
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.database}}</dd>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
{% endif %}
|
|
98
|
+
|
|
99
|
+
{% if server.schema_ %}
|
|
100
|
+
<div class="flex items-center gap-x-4">
|
|
101
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
102
|
+
<dt class="text-sm font-medium text-gray-500">Schema</dt>
|
|
103
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.schema_}}</dd>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
{% endif %}
|
|
107
|
+
|
|
108
|
+
{% if server.topic %}
|
|
109
|
+
<div class="flex items-center gap-x-4">
|
|
110
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
111
|
+
<dt class="text-sm font-medium text-gray-500">Topic</dt>
|
|
112
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.topic}}</dd>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
{% endif %}
|
|
116
|
+
|
|
117
|
+
{% if server.path %}
|
|
118
|
+
<div class="flex items-center gap-x-4">
|
|
119
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
120
|
+
<dt class="text-sm font-medium text-gray-500">Path</dt>
|
|
121
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.path}}</dd>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
{% endif %}
|
|
125
|
+
|
|
126
|
+
{% if server.format %}
|
|
127
|
+
<div class="flex items-center gap-x-4">
|
|
128
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
129
|
+
<dt class="text-sm font-medium text-gray-500">Format</dt>
|
|
130
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.format}}</dd>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
{% endif %}
|
|
134
|
+
|
|
135
|
+
{% if server.delimiter %}
|
|
136
|
+
<div class="flex items-center gap-x-4">
|
|
137
|
+
<div class="hidden sm:flex sm:flex-col">
|
|
138
|
+
<dt class="text-sm font-medium text-gray-500">Delimiter</dt>
|
|
139
|
+
<dd class="mt-1 text-sm text-gray-900">{{server.delimiter}}</dd>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
{% endif %}
|
|
143
|
+
|
|
144
|
+
</li>
|
|
@@ -566,6 +566,14 @@ video {
|
|
|
566
566
|
border-width: 0;
|
|
567
567
|
}
|
|
568
568
|
|
|
569
|
+
.pointer-events-none {
|
|
570
|
+
pointer-events: none;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
.visible {
|
|
574
|
+
visibility: visible;
|
|
575
|
+
}
|
|
576
|
+
|
|
569
577
|
.fixed {
|
|
570
578
|
position: fixed;
|
|
571
579
|
}
|
|
@@ -582,6 +590,15 @@ video {
|
|
|
582
590
|
inset: 0px;
|
|
583
591
|
}
|
|
584
592
|
|
|
593
|
+
.inset-y-0 {
|
|
594
|
+
top: 0px;
|
|
595
|
+
bottom: 0px;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
.left-0 {
|
|
599
|
+
left: 0px;
|
|
600
|
+
}
|
|
601
|
+
|
|
585
602
|
.right-0 {
|
|
586
603
|
right: 0px;
|
|
587
604
|
}
|
|
@@ -672,6 +689,10 @@ video {
|
|
|
672
689
|
-webkit-line-clamp: 3;
|
|
673
690
|
}
|
|
674
691
|
|
|
692
|
+
.block {
|
|
693
|
+
display: block;
|
|
694
|
+
}
|
|
695
|
+
|
|
675
696
|
.inline-block {
|
|
676
697
|
display: inline-block;
|
|
677
698
|
}
|
|
@@ -736,6 +757,10 @@ video {
|
|
|
736
757
|
width: 2.5rem;
|
|
737
758
|
}
|
|
738
759
|
|
|
760
|
+
.w-2 {
|
|
761
|
+
width: 0.5rem;
|
|
762
|
+
}
|
|
763
|
+
|
|
739
764
|
.w-2\/12 {
|
|
740
765
|
width: 16.666667%;
|
|
741
766
|
}
|
|
@@ -756,6 +781,14 @@ video {
|
|
|
756
781
|
width: 58.333333%;
|
|
757
782
|
}
|
|
758
783
|
|
|
784
|
+
.w-72 {
|
|
785
|
+
width: 18rem;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
.w-9\/12 {
|
|
789
|
+
width: 75%;
|
|
790
|
+
}
|
|
791
|
+
|
|
759
792
|
.w-full {
|
|
760
793
|
width: 100%;
|
|
761
794
|
}
|
|
@@ -833,11 +866,6 @@ video {
|
|
|
833
866
|
column-gap: 1rem;
|
|
834
867
|
}
|
|
835
868
|
|
|
836
|
-
.gap-x-6 {
|
|
837
|
-
-moz-column-gap: 1.5rem;
|
|
838
|
-
column-gap: 1.5rem;
|
|
839
|
-
}
|
|
840
|
-
|
|
841
869
|
.gap-y-6 {
|
|
842
870
|
row-gap: 1.5rem;
|
|
843
871
|
}
|
|
@@ -925,6 +953,10 @@ video {
|
|
|
925
953
|
border-radius: 0.375rem;
|
|
926
954
|
}
|
|
927
955
|
|
|
956
|
+
.border-0 {
|
|
957
|
+
border-width: 0px;
|
|
958
|
+
}
|
|
959
|
+
|
|
928
960
|
.bg-blue-50 {
|
|
929
961
|
--tw-bg-opacity: 1;
|
|
930
962
|
background-color: rgb(239 246 255 / var(--tw-bg-opacity));
|
|
@@ -1002,6 +1034,11 @@ video {
|
|
|
1002
1034
|
padding-bottom: 0.25rem;
|
|
1003
1035
|
}
|
|
1004
1036
|
|
|
1037
|
+
.py-1\.5 {
|
|
1038
|
+
padding-top: 0.375rem;
|
|
1039
|
+
padding-bottom: 0.375rem;
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1005
1042
|
.py-2 {
|
|
1006
1043
|
padding-top: 0.5rem;
|
|
1007
1044
|
padding-bottom: 0.5rem;
|
|
@@ -1024,6 +1061,14 @@ video {
|
|
|
1024
1061
|
padding-bottom: 1.75rem;
|
|
1025
1062
|
}
|
|
1026
1063
|
|
|
1064
|
+
.pl-10 {
|
|
1065
|
+
padding-left: 2.5rem;
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
.pl-3 {
|
|
1069
|
+
padding-left: 0.75rem;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1027
1072
|
.pl-4 {
|
|
1028
1073
|
padding-left: 1rem;
|
|
1029
1074
|
}
|
|
@@ -1215,10 +1260,6 @@ video {
|
|
|
1215
1260
|
--tw-ring-opacity: 0.05;
|
|
1216
1261
|
}
|
|
1217
1262
|
|
|
1218
|
-
.filter {
|
|
1219
|
-
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
|
1220
|
-
}
|
|
1221
|
-
|
|
1222
1263
|
.transition-all {
|
|
1223
1264
|
transition-property: all;
|
|
1224
1265
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
@@ -1231,6 +1272,16 @@ video {
|
|
|
1231
1272
|
transition-duration: 150ms;
|
|
1232
1273
|
}
|
|
1233
1274
|
|
|
1275
|
+
.placeholder\:text-gray-400::-moz-placeholder {
|
|
1276
|
+
--tw-text-opacity: 1;
|
|
1277
|
+
color: rgb(156 163 175 / var(--tw-text-opacity));
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
.placeholder\:text-gray-400::placeholder {
|
|
1281
|
+
--tw-text-opacity: 1;
|
|
1282
|
+
color: rgb(156 163 175 / var(--tw-text-opacity));
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1234
1285
|
.hover\:bg-gray-50:hover {
|
|
1235
1286
|
--tw-bg-opacity: 1;
|
|
1236
1287
|
background-color: rgb(249 250 251 / var(--tw-bg-opacity));
|
|
@@ -1251,6 +1302,21 @@ video {
|
|
|
1251
1302
|
color: rgb(55 65 81 / var(--tw-text-opacity));
|
|
1252
1303
|
}
|
|
1253
1304
|
|
|
1305
|
+
.focus\:ring-2:focus {
|
|
1306
|
+
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
|
|
1307
|
+
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
|
|
1308
|
+
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
.focus\:ring-inset:focus {
|
|
1312
|
+
--tw-ring-inset: inset;
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1315
|
+
.focus\:ring-indigo-600:focus {
|
|
1316
|
+
--tw-ring-opacity: 1;
|
|
1317
|
+
--tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1254
1320
|
.focus-visible\:outline:focus-visible {
|
|
1255
1321
|
outline-style: solid;
|
|
1256
1322
|
}
|
|
@@ -1318,10 +1384,6 @@ video {
|
|
|
1318
1384
|
flex-direction: row;
|
|
1319
1385
|
}
|
|
1320
1386
|
|
|
1321
|
-
.sm\:flex-col {
|
|
1322
|
-
flex-direction: column;
|
|
1323
|
-
}
|
|
1324
|
-
|
|
1325
1387
|
.sm\:flex-wrap {
|
|
1326
1388
|
flex-wrap: wrap;
|
|
1327
1389
|
}
|
|
@@ -1330,12 +1392,22 @@ video {
|
|
|
1330
1392
|
align-items: center;
|
|
1331
1393
|
}
|
|
1332
1394
|
|
|
1395
|
+
.sm\:items-baseline {
|
|
1396
|
+
align-items: baseline;
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1333
1399
|
.sm\:space-x-6 > :not([hidden]) ~ :not([hidden]) {
|
|
1334
1400
|
--tw-space-x-reverse: 0;
|
|
1335
1401
|
margin-right: calc(1.5rem * var(--tw-space-x-reverse));
|
|
1336
1402
|
margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));
|
|
1337
1403
|
}
|
|
1338
1404
|
|
|
1405
|
+
.sm\:space-x-8 > :not([hidden]) ~ :not([hidden]) {
|
|
1406
|
+
--tw-space-x-reverse: 0;
|
|
1407
|
+
margin-right: calc(2rem * var(--tw-space-x-reverse));
|
|
1408
|
+
margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1339
1411
|
.sm\:truncate {
|
|
1340
1412
|
overflow: hidden;
|
|
1341
1413
|
text-overflow: ellipsis;
|
|
@@ -1373,6 +1445,15 @@ video {
|
|
|
1373
1445
|
line-height: 2.25rem;
|
|
1374
1446
|
}
|
|
1375
1447
|
|
|
1448
|
+
.sm\:text-sm {
|
|
1449
|
+
font-size: 0.875rem;
|
|
1450
|
+
line-height: 1.25rem;
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
.sm\:leading-6 {
|
|
1454
|
+
line-height: 1.5rem;
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1376
1457
|
.sm\:tracking-tight {
|
|
1377
1458
|
letter-spacing: -0.025em;
|
|
1378
1459
|
}
|