summaryrefslogtreecommitdiff
path: root/python-car-connector-framework.spec
blob: 7a4ffa45f4656de35e73f8a930fb2a2b68c1d492 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
%global _empty_manifest_terminate_build 0
Name:		python-car-connector-framework
Version:	4.0.0
Release:	1
Summary:	CAR service connector framework
License:	Apache License 2.0
URL:		https://github.com/IBM/cp4s-car-connector-framework
Source0:	https://mirrors.aliyun.com/pypi/web/packages/2b/c2/677c4d9aee08d0e3bc5ff244130d0cc5208eefacdb9572c1973b3029e4cb/car-connector-framework-4.0.0.tar.gz
BuildArch:	noarch

Requires:	python3-jwcrypto
Requires:	python3-json-logger
Requires:	python3-jschon
Requires:	python3-urllib3
Requires:	python3-requests

%description
# Car Connector Framework

## Develop a connector

Use connectors/reference_connector from [cp4s-car-connectors](https://github.com/IBM/cp4s-car-connectors) project as an example of how this framework is to be used.

A CAR connector project will need to extend the framework classes: [BaseFullImport](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/full_import.py), [BaseIncrementalImport](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/inc_import.py), [BaseApp](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/app.py), [BaseAssetServer](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/server_access.py) and [BaseDataHandler](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/data_handler.py), and implement abstract methods of those classes.

Things to note:

* All communications with CAR digestion microservice are managed by the framework. Connector code normally does not need to access CAR digestion microservice directly

* The framework is trying to make some intelligent choice for whether to run full vs incremental import. Normally, for performance reasons we would always prefer to run incremental import if one is possible. Some examples of when it is not possible are:
  * The model states for generating delta are not available
  * The model on the CAR side is empty
  * The previous incremental import session failed and a new incremental import session can potentially create a gap in the model data

* Because of the above the the connector code should properly use (throw/raise) one of three following exceptions when detecting failures:
  * [RecoverableFailure](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L77) is to be used when the failure cannot potentially create a data gap and we can attempt an incremental import session when running next time. One example of a recoverable failure is a connectivity problem.
  * [UnrecoverableFailure](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L81) is to be used when the failure can potentially create a data gap and we must run full import session to recover.
  * [DatasourceFailure](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L92) is to be used when there is datasource API issues.

RecoverableFailure and UnrecoverableFailure are mostly handled in the framework. DatasourceFailure is to be used in the connector code with [a corresponding error code](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L35). Example: `return ErrorCode.TRANSMISSION_AUTH_CREDENTIALS.value`. 
If none of the Failure classes is used, the framework will raise a [GENERAL_APPLICATION_FAILURE](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/app.py#L106) (Unknown error) and print the error stack. 

For more information use guides
* https://github.com/IBM/cp4s-car-connectors/blob/develop/README.md
* https://github.com/IBM/cp4s-car-connectors/blob/develop/guide-build-connectors.md
* https://github.com/IBM/cp4s-car-connectors/tree/develop/connectors/reference_connector
* https://github.com/IBM/cp4s-car-connectors/blob/develop/best-practices.md


## Test deploy
https://github.com/IBM/cp4s-car-connectors/blob/develop/deployment/README.md


## Publish

Use the guide from [PUBLISH.md](./PUBLISH.md)


%package -n python3-car-connector-framework
Summary:	CAR service connector framework
Provides:	python-car-connector-framework
BuildRequires:	python3-devel
BuildRequires:	python3-setuptools
BuildRequires:	python3-pip
%description -n python3-car-connector-framework
# Car Connector Framework

## Develop a connector

Use connectors/reference_connector from [cp4s-car-connectors](https://github.com/IBM/cp4s-car-connectors) project as an example of how this framework is to be used.

A CAR connector project will need to extend the framework classes: [BaseFullImport](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/full_import.py), [BaseIncrementalImport](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/inc_import.py), [BaseApp](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/app.py), [BaseAssetServer](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/server_access.py) and [BaseDataHandler](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/data_handler.py), and implement abstract methods of those classes.

Things to note:

* All communications with CAR digestion microservice are managed by the framework. Connector code normally does not need to access CAR digestion microservice directly

* The framework is trying to make some intelligent choice for whether to run full vs incremental import. Normally, for performance reasons we would always prefer to run incremental import if one is possible. Some examples of when it is not possible are:
  * The model states for generating delta are not available
  * The model on the CAR side is empty
  * The previous incremental import session failed and a new incremental import session can potentially create a gap in the model data

* Because of the above the the connector code should properly use (throw/raise) one of three following exceptions when detecting failures:
  * [RecoverableFailure](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L77) is to be used when the failure cannot potentially create a data gap and we can attempt an incremental import session when running next time. One example of a recoverable failure is a connectivity problem.
  * [UnrecoverableFailure](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L81) is to be used when the failure can potentially create a data gap and we must run full import session to recover.
  * [DatasourceFailure](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L92) is to be used when there is datasource API issues.

RecoverableFailure and UnrecoverableFailure are mostly handled in the framework. DatasourceFailure is to be used in the connector code with [a corresponding error code](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L35). Example: `return ErrorCode.TRANSMISSION_AUTH_CREDENTIALS.value`. 
If none of the Failure classes is used, the framework will raise a [GENERAL_APPLICATION_FAILURE](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/app.py#L106) (Unknown error) and print the error stack. 

For more information use guides
* https://github.com/IBM/cp4s-car-connectors/blob/develop/README.md
* https://github.com/IBM/cp4s-car-connectors/blob/develop/guide-build-connectors.md
* https://github.com/IBM/cp4s-car-connectors/tree/develop/connectors/reference_connector
* https://github.com/IBM/cp4s-car-connectors/blob/develop/best-practices.md


## Test deploy
https://github.com/IBM/cp4s-car-connectors/blob/develop/deployment/README.md


## Publish

Use the guide from [PUBLISH.md](./PUBLISH.md)


%package help
Summary:	Development documents and examples for car-connector-framework
Provides:	python3-car-connector-framework-doc
%description help
# Car Connector Framework

## Develop a connector

Use connectors/reference_connector from [cp4s-car-connectors](https://github.com/IBM/cp4s-car-connectors) project as an example of how this framework is to be used.

A CAR connector project will need to extend the framework classes: [BaseFullImport](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/full_import.py), [BaseIncrementalImport](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/inc_import.py), [BaseApp](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/app.py), [BaseAssetServer](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/server_access.py) and [BaseDataHandler](https://github.com/IBM/cp4s-car-connector-framework/blob/develop/car_framework/data_handler.py), and implement abstract methods of those classes.

Things to note:

* All communications with CAR digestion microservice are managed by the framework. Connector code normally does not need to access CAR digestion microservice directly

* The framework is trying to make some intelligent choice for whether to run full vs incremental import. Normally, for performance reasons we would always prefer to run incremental import if one is possible. Some examples of when it is not possible are:
  * The model states for generating delta are not available
  * The model on the CAR side is empty
  * The previous incremental import session failed and a new incremental import session can potentially create a gap in the model data

* Because of the above the the connector code should properly use (throw/raise) one of three following exceptions when detecting failures:
  * [RecoverableFailure](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L77) is to be used when the failure cannot potentially create a data gap and we can attempt an incremental import session when running next time. One example of a recoverable failure is a connectivity problem.
  * [UnrecoverableFailure](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L81) is to be used when the failure can potentially create a data gap and we must run full import session to recover.
  * [DatasourceFailure](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L92) is to be used when there is datasource API issues.

RecoverableFailure and UnrecoverableFailure are mostly handled in the framework. DatasourceFailure is to be used in the connector code with [a corresponding error code](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/util.py#L35). Example: `return ErrorCode.TRANSMISSION_AUTH_CREDENTIALS.value`. 
If none of the Failure classes is used, the framework will raise a [GENERAL_APPLICATION_FAILURE](https://github.com/IBM/cp4s-car-connector-framework/blob/99554ac2cfa0732af090c46be9e356beb015934e/car_framework/app.py#L106) (Unknown error) and print the error stack. 

For more information use guides
* https://github.com/IBM/cp4s-car-connectors/blob/develop/README.md
* https://github.com/IBM/cp4s-car-connectors/blob/develop/guide-build-connectors.md
* https://github.com/IBM/cp4s-car-connectors/tree/develop/connectors/reference_connector
* https://github.com/IBM/cp4s-car-connectors/blob/develop/best-practices.md


## Test deploy
https://github.com/IBM/cp4s-car-connectors/blob/develop/deployment/README.md


## Publish

Use the guide from [PUBLISH.md](./PUBLISH.md)


%prep
%autosetup -n car-connector-framework-4.0.0

%build
%py3_build

%install
%py3_install
install -d -m755 %{buildroot}/%{_pkgdocdir}
if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
pushd %{buildroot}
if [ -d usr/lib ]; then
	find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst
fi
if [ -d usr/lib64 ]; then
	find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst
fi
if [ -d usr/bin ]; then
	find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
fi
if [ -d usr/sbin ]; then
	find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
fi
touch doclist.lst
if [ -d usr/share/man ]; then
	find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst
fi
popd
mv %{buildroot}/filelist.lst .
mv %{buildroot}/doclist.lst .

%files -n python3-car-connector-framework -f filelist.lst
%dir %{python3_sitelib}/*

%files help -f doclist.lst
%{_docdir}/*

%changelog
* Thu Jun 08 2023 Python_Bot <Python_Bot@openeuler.org> - 4.0.0-1
- Package Spec generated