├── .github
└── workflows
│ ├── deutschland_generator.yaml
│ └── openapi_check.yaml
├── CNAME
├── README.md
├── generator_config.yaml
├── index.html
├── openapi.yaml
└── python-client
├── .openapi-generator-ignore
├── .openapi-generator
├── FILES
└── VERSION
├── README.md
├── deutschland
└── destatis
│ ├── __init__.py
│ ├── api
│ ├── __init__.py
│ └── default_api.py
│ ├── api_client.py
│ ├── apis
│ └── __init__.py
│ ├── configuration.py
│ ├── exceptions.py
│ ├── model
│ └── __init__.py
│ ├── model_utils.py
│ ├── models
│ └── __init__.py
│ └── rest.py
├── docs
└── DefaultApi.md
├── pyproject.toml
├── requirements.txt
├── sphinx-docs
├── Makefile
├── conf.py
├── index.rst
├── make.bat
└── source
│ ├── destatis.api.rst
│ ├── destatis.apis.rst
│ ├── destatis.model.rst
│ ├── destatis.models.rst
│ ├── destatis.rst
│ └── modules.rst
├── test-requirements.txt
├── test
├── __init__.py
└── test_default_api.py
└── tox.ini
/.github/workflows/deutschland_generator.yaml:
--------------------------------------------------------------------------------
1 | on: [push]
2 | jobs:
3 | deutschland_generation:
4 | name: "Deutschland Generation"
5 | runs-on: ubuntu-latest
6 | strategy:
7 | fail-fast: false
8 | matrix:
9 | python-version: ['3.11.1' ]
10 | steps:
11 | - uses: actions/checkout@v3
12 |
13 | # Create default .spectral.yaml file used for linting if its not existing already
14 | - name: "Create spectral file if it not exists"
15 | continue-on-error: true
16 | run: |
17 | set -C; echo "extends: spectral:oas" > .spectral.yaml
18 |
19 | # Runs a single command using the runners shell
20 | - name: "Lint file"
21 | uses: stoplightio/spectral-action@latest
22 | with:
23 | file_glob: "openapi.yaml"
24 |
25 | - name: "Generate deutschland code"
26 | uses: wirthual/deutschland-generator-action@latest
27 | with:
28 | openapi-file: ${{ github.workspace }}/openapi.yaml
29 | commit-to-git: true
30 | upload-to-pypi: true
31 | upload-to-testpypi: false
32 | pypi-token: ${{ secrets.PYPI_PRODUCTION }}
33 | testpypi-token: ${{ secrets.PYPI_TEST }}
34 | python-version: ${{ matrix.python-version }}
35 |
--------------------------------------------------------------------------------
/.github/workflows/openapi_check.yaml:
--------------------------------------------------------------------------------
1 | on: [push, pull_request]
2 | jobs:
3 | openapi_check:
4 | name: "OpenAPI check"
5 | runs-on: ubuntu-latest
6 | steps:
7 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
8 | - uses: actions/checkout@v3
9 |
10 | # Create default .spectral.yaml file used for linting if its not existing already
11 | - name: "Create spectral file if it not exists"
12 | continue-on-error: true
13 | run: |
14 | set -C; echo "extends: spectral:oas" > .spectral.yaml
15 |
16 | # Run Spectral
17 | - uses: stoplightio/spectral-action@latest
18 | with:
19 | file_glob: openapi.yaml
20 | spectral_ruleset: .spectral.yaml
21 |
--------------------------------------------------------------------------------
/CNAME:
--------------------------------------------------------------------------------
1 | destatis.api.bund.dev
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # destatis-api
2 |
3 |
4 | Note: Obwohl die Website des DESTATIS behauptet die Nutzung sei kostenfrei und ohne Registrierung möglich, scheint es dennoch nötig ein login für die API anzugeben. Das default login, was die Spezifikation vorgibt funktioniert leider nicht.
--------------------------------------------------------------------------------
/generator_config.yaml:
--------------------------------------------------------------------------------
1 | templateDir: deutschland_templates # For local use: ./local/deutschland_templates
2 | additionalProperties:
3 | packageName: "destatis"
4 | infoName: "BundesAPI"
5 | infoEmail: "kontakt@bund.dev"
6 | packageVersion: 0.1.0
7 | packageUrl: "https://github.com/bundesAPI/destatis-api"
8 | namespace: "deutschland"
9 | docLanguage: "de"
10 | gitHost: "github.com"
11 | gitUserId: "bundesAPI"
12 | gitRepoId: "destatis-api"
13 | files:
14 | pyproject.mustache:
15 | destinationFilename: pyproject.toml
16 | templateType: SupportingFiles
17 | requirements.txt: {}
18 | create_doc.mustache:
19 | destinationFilename: create_doc.py
20 | templateType: SupportingFiles
21 | rename_generated_code.mustache:
22 | destinationFilename: rename_generated_code.py
23 | templateType: SupportingFiles
24 | README.mustache:
25 | destinationFilename: README.md
26 | templateType: SupportingFiles
27 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Destatis API - Statistisches Bundesamt - OpenAPI Documentation
8 |
9 |
10 |
11 |
12 |
13 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/openapi.yaml:
--------------------------------------------------------------------------------
1 | swagger: '2.0'
2 | info:
3 | version: '1.0'
4 | title: Destatis-API
5 | host: www-genesis.destatis.de
6 | basePath: /genesisWS/rest/2020/
7 | schemes:
8 | - https
9 | paths:
10 | /catalogue/cubes:
11 | parameters: []
12 | get:
13 | parameters:
14 | - default: GAST
15 | in: query
16 | name: username
17 | required: false
18 | type: string
19 | - default: GAST
20 | in: query
21 | name: password
22 | required: false
23 | type: string
24 | - default: ''
25 | in: query
26 | name: selection
27 | required: false
28 | type: string
29 | - default: free
30 | in: query
31 | name: area
32 | required: false
33 | type: string
34 | - default: '100'
35 | in: query
36 | name: pagelength
37 | required: false
38 | type: string
39 | - default: de
40 | in: query
41 | name: language
42 | required: false
43 | type: string
44 | responses:
45 | '200':
46 | description: Successful Response
47 | operationId: cubes
48 | /catalogue/cubes2statistic:
49 | parameters: []
50 | get:
51 | parameters:
52 | - default: GAST
53 | in: query
54 | name: username
55 | required: false
56 | type: string
57 | - default: GAST
58 | in: query
59 | name: password
60 | required: false
61 | type: string
62 | - default: ''
63 | in: query
64 | name: name
65 | required: false
66 | type: string
67 | - default: ''
68 | in: query
69 | name: selection
70 | required: false
71 | type: string
72 | - default: free
73 | in: query
74 | name: area
75 | required: false
76 | type: string
77 | - default: '100'
78 | in: query
79 | name: pagelength
80 | required: false
81 | type: string
82 | - default: de
83 | in: query
84 | name: language
85 | required: false
86 | type: string
87 | responses:
88 | '200':
89 | description: Successful Response
90 | operationId: cubes2statistic
91 | /catalogue/cubes2variable:
92 | parameters: []
93 | get:
94 | parameters:
95 | - default: GAST
96 | in: query
97 | name: username
98 | required: false
99 | type: string
100 | - default: GAST
101 | in: query
102 | name: password
103 | required: false
104 | type: string
105 | - default: ''
106 | in: query
107 | name: name
108 | required: false
109 | type: string
110 | - default: ''
111 | in: query
112 | name: selection
113 | required: false
114 | type: string
115 | - default: free
116 | in: query
117 | name: area
118 | required: false
119 | type: string
120 | - default: '100'
121 | in: query
122 | name: pagelength
123 | required: false
124 | type: string
125 | - default: de
126 | in: query
127 | name: language
128 | required: false
129 | type: string
130 | responses:
131 | '200':
132 | description: Successful Response
133 | operationId: cubes2variable
134 | /catalogue/jobs:
135 | parameters: []
136 | get:
137 | parameters:
138 | - default: GAST
139 | in: query
140 | name: username
141 | required: false
142 | type: string
143 | - default: GAST
144 | in: query
145 | name: password
146 | required: false
147 | type: string
148 | - default: ''
149 | in: query
150 | name: selection
151 | required: false
152 | type: string
153 | - default: Code
154 | in: query
155 | name: searchcriterion
156 | required: false
157 | type: string
158 | - default: Name
159 | in: query
160 | name: sortcriterion
161 | required: false
162 | type: string
163 | - default: Alle
164 | in: query
165 | name: type
166 | required: false
167 | type: string
168 | - default: '100'
169 | in: query
170 | name: pagelength
171 | required: false
172 | type: string
173 | - default: de
174 | in: query
175 | name: language
176 | required: false
177 | type: string
178 | responses:
179 | '200':
180 | description: Successful Response
181 | operationId: jobs
182 | /catalogue/modifieddata:
183 | parameters: []
184 | get:
185 | parameters:
186 | - default: GAST
187 | in: query
188 | name: username
189 | required: false
190 | type: string
191 | - default: GAST
192 | in: query
193 | name: password
194 | required: false
195 | type: string
196 | - default: ''
197 | in: query
198 | name: selection
199 | required: false
200 | type: string
201 | - default: Alle
202 | in: query
203 | name: type
204 | required: false
205 | type: string
206 | - default: 01.01.1970 01:00
207 | in: query
208 | name: date
209 | required: false
210 | type: string
211 | - default: '100'
212 | in: query
213 | name: pagelength
214 | required: false
215 | type: string
216 | - default: de
217 | in: query
218 | name: language
219 | required: false
220 | type: string
221 | responses:
222 | '200':
223 | description: Successful Response
224 | operationId: modifieddata
225 | /catalogue/qualitysigns:
226 | parameters: []
227 | get:
228 | parameters:
229 | - default: de
230 | in: query
231 | name: language
232 | required: false
233 | type: string
234 | responses:
235 | '200':
236 | description: Successful Response
237 | operationId: qualitysigns
238 | /catalogue/results:
239 | parameters: []
240 | get:
241 | parameters:
242 | - default: GAST
243 | in: query
244 | name: username
245 | required: false
246 | type: string
247 | - default: GAST
248 | in: query
249 | name: password
250 | required: false
251 | type: string
252 | - default: ''
253 | in: query
254 | name: selection
255 | required: false
256 | type: string
257 | - default: free
258 | in: query
259 | name: area
260 | required: false
261 | type: string
262 | - default: '100'
263 | in: query
264 | name: pagelength
265 | required: false
266 | type: string
267 | - default: de
268 | in: query
269 | name: language
270 | required: false
271 | type: string
272 | responses:
273 | '200':
274 | description: Successful Response
275 | operationId: results
276 | /catalogue/statistics:
277 | parameters: []
278 | get:
279 | parameters:
280 | - default: GAST
281 | in: query
282 | name: username
283 | required: false
284 | type: string
285 | - default: GAST
286 | in: query
287 | name: password
288 | required: false
289 | type: string
290 | - default: ''
291 | in: query
292 | name: selection
293 | required: false
294 | type: string
295 | - default: Code
296 | in: query
297 | name: searchcriterion
298 | required: false
299 | type: string
300 | - default: Name
301 | in: query
302 | name: sortcriterion
303 | required: false
304 | type: string
305 | - default: '100'
306 | in: query
307 | name: pagelength
308 | required: false
309 | type: string
310 | - default: de
311 | in: query
312 | name: language
313 | required: false
314 | type: string
315 | responses:
316 | '200':
317 | description: Successful Response
318 | operationId: statistics
319 | /catalogue/statistics2variable:
320 | parameters: []
321 | get:
322 | parameters:
323 | - default: GAST
324 | in: query
325 | name: username
326 | required: false
327 | type: string
328 | - default: GAST
329 | in: query
330 | name: password
331 | required: false
332 | type: string
333 | - default: ''
334 | in: query
335 | name: name
336 | required: false
337 | type: string
338 | - default: ''
339 | in: query
340 | name: selection
341 | required: false
342 | type: string
343 | - default: free
344 | in: query
345 | name: area
346 | required: false
347 | type: string
348 | - default: Code
349 | in: query
350 | name: searchcriterion
351 | required: false
352 | type: string
353 | - default: Name
354 | in: query
355 | name: sortcriterion
356 | required: false
357 | type: string
358 | - default: '100'
359 | in: query
360 | name: pagelength
361 | required: false
362 | type: string
363 | - default: de
364 | in: query
365 | name: language
366 | required: false
367 | type: string
368 | responses:
369 | '200':
370 | description: Successful Response
371 | operationId: statistics2variable
372 | /catalogue/tables:
373 | parameters: []
374 | get:
375 | parameters:
376 | - default: GAST
377 | in: query
378 | name: username
379 | required: false
380 | type: string
381 | - default: GAST
382 | in: query
383 | name: password
384 | required: false
385 | type: string
386 | - default: ''
387 | in: query
388 | name: selection
389 | required: false
390 | type: string
391 | - default: free
392 | in: query
393 | name: area
394 | required: false
395 | type: string
396 | - default: Code
397 | in: query
398 | name: searchcriterion
399 | required: false
400 | type: string
401 | - default: Code
402 | in: query
403 | name: sortcriterion
404 | required: false
405 | type: string
406 | - default: '100'
407 | in: query
408 | name: pagelength
409 | required: false
410 | type: string
411 | - default: de
412 | in: query
413 | name: language
414 | required: false
415 | type: string
416 | responses:
417 | '200':
418 | description: Successful Response
419 | operationId: tables
420 | /catalogue/tables2statistic:
421 | parameters: []
422 | get:
423 | parameters:
424 | - default: GAST
425 | in: query
426 | name: username
427 | required: false
428 | type: string
429 | - default: GAST
430 | in: query
431 | name: password
432 | required: false
433 | type: string
434 | - default: ''
435 | in: query
436 | name: name
437 | required: false
438 | type: string
439 | - default: ''
440 | in: query
441 | name: selection
442 | required: false
443 | type: string
444 | - default: free
445 | in: query
446 | name: area
447 | required: false
448 | type: string
449 | - default: '100'
450 | in: query
451 | name: pagelength
452 | required: false
453 | type: string
454 | - default: de
455 | in: query
456 | name: language
457 | required: false
458 | type: string
459 | responses:
460 | '200':
461 | description: Successful Response
462 | operationId: tables2statistic
463 | /catalogue/tables2variable:
464 | parameters: []
465 | get:
466 | parameters:
467 | - default: GAST
468 | in: query
469 | name: username
470 | required: false
471 | type: string
472 | - default: GAST
473 | in: query
474 | name: password
475 | required: false
476 | type: string
477 | - default: ''
478 | in: query
479 | name: name
480 | required: false
481 | type: string
482 | - default: ''
483 | in: query
484 | name: selection
485 | required: false
486 | type: string
487 | - default: free
488 | in: query
489 | name: area
490 | required: false
491 | type: string
492 | - default: '100'
493 | in: query
494 | name: pagelength
495 | required: false
496 | type: string
497 | - default: de
498 | in: query
499 | name: language
500 | required: false
501 | type: string
502 | responses:
503 | '200':
504 | description: Successful Response
505 | operationId: tables2variable
506 | /catalogue/terms:
507 | parameters: []
508 | get:
509 | parameters:
510 | - default: GAST
511 | in: query
512 | name: username
513 | required: false
514 | type: string
515 | - default: GAST
516 | in: query
517 | name: password
518 | required: false
519 | type: string
520 | - default: ''
521 | in: query
522 | name: selection
523 | required: false
524 | type: string
525 | - default: '100'
526 | in: query
527 | name: pagelength
528 | required: false
529 | type: string
530 | - default: de
531 | in: query
532 | name: language
533 | required: false
534 | type: string
535 | responses:
536 | '200':
537 | description: Successful Response
538 | operationId: terms
539 | /catalogue/timeseries:
540 | parameters: []
541 | get:
542 | parameters:
543 | - default: GAST
544 | in: query
545 | name: username
546 | required: false
547 | type: string
548 | - default: GAST
549 | in: query
550 | name: password
551 | required: false
552 | type: string
553 | - default: ''
554 | in: query
555 | name: selection
556 | required: false
557 | type: string
558 | - default: free
559 | in: query
560 | name: area
561 | required: false
562 | type: string
563 | - default: '100'
564 | in: query
565 | name: pagelength
566 | required: false
567 | type: string
568 | - default: de
569 | in: query
570 | name: language
571 | required: false
572 | type: string
573 | responses:
574 | '200':
575 | description: Successful Response
576 | operationId: timeseries
577 | /catalogue/timeseries2statistic:
578 | parameters: []
579 | get:
580 | parameters:
581 | - default: GAST
582 | in: query
583 | name: username
584 | required: false
585 | type: string
586 | - default: GAST
587 | in: query
588 | name: password
589 | required: false
590 | type: string
591 | - default: ''
592 | in: query
593 | name: name
594 | required: false
595 | type: string
596 | - default: ''
597 | in: query
598 | name: selection
599 | required: false
600 | type: string
601 | - default: free
602 | in: query
603 | name: area
604 | required: false
605 | type: string
606 | - default: '100'
607 | in: query
608 | name: pagelength
609 | required: false
610 | type: string
611 | - default: de
612 | in: query
613 | name: language
614 | required: false
615 | type: string
616 | responses:
617 | '200':
618 | description: Successful Response
619 | operationId: timeseries2statistic
620 | /catalogue/timeseries2variable:
621 | parameters: []
622 | get:
623 | parameters:
624 | - default: GAST
625 | in: query
626 | name: username
627 | required: false
628 | type: string
629 | - default: GAST
630 | in: query
631 | name: password
632 | required: false
633 | type: string
634 | - default: ''
635 | in: query
636 | name: name
637 | required: false
638 | type: string
639 | - default: ''
640 | in: query
641 | name: selection
642 | required: false
643 | type: string
644 | - default: free
645 | in: query
646 | name: area
647 | required: false
648 | type: string
649 | - default: '100'
650 | in: query
651 | name: pagelength
652 | required: false
653 | type: string
654 | - default: de
655 | in: query
656 | name: language
657 | required: false
658 | type: string
659 | responses:
660 | '200':
661 | description: Successful Response
662 | operationId: timeseries2variable
663 | /catalogue/values:
664 | parameters: []
665 | get:
666 | parameters:
667 | - default: GAST
668 | in: query
669 | name: username
670 | required: false
671 | type: string
672 | - default: GAST
673 | in: query
674 | name: password
675 | required: false
676 | type: string
677 | - default: ''
678 | in: query
679 | name: selection
680 | required: false
681 | type: string
682 | - default: free
683 | in: query
684 | name: area
685 | required: false
686 | type: string
687 | - default: Code
688 | in: query
689 | name: searchcriterion
690 | required: false
691 | type: string
692 | - default: Name
693 | in: query
694 | name: sortcriterion
695 | required: false
696 | type: string
697 | - default: '100'
698 | in: query
699 | name: pagelength
700 | required: false
701 | type: string
702 | - default: de
703 | in: query
704 | name: language
705 | required: false
706 | type: string
707 | responses:
708 | '200':
709 | description: Successful Response
710 | operationId: values
711 | /catalogue/values2variable:
712 | parameters: []
713 | get:
714 | parameters:
715 | - default: GAST
716 | in: query
717 | name: username
718 | required: false
719 | type: string
720 | - default: GAST
721 | in: query
722 | name: password
723 | required: false
724 | type: string
725 | - default: ''
726 | in: query
727 | name: name
728 | required: false
729 | type: string
730 | - default: ''
731 | in: query
732 | name: selection
733 | required: false
734 | type: string
735 | - default: free
736 | in: query
737 | name: area
738 | required: false
739 | type: string
740 | - default: Code
741 | in: query
742 | name: searchcriterion
743 | required: false
744 | type: string
745 | - default: Name
746 | in: query
747 | name: sortcriterion
748 | required: false
749 | type: string
750 | - default: '100'
751 | in: query
752 | name: pagelength
753 | required: false
754 | type: string
755 | - default: de
756 | in: query
757 | name: language
758 | required: false
759 | type: string
760 | responses:
761 | '200':
762 | description: Successful Response
763 | operationId: values2variable
764 | /catalogue/variables:
765 | parameters: []
766 | get:
767 | parameters:
768 | - default: GAST
769 | in: query
770 | name: username
771 | required: false
772 | type: string
773 | - default: GAST
774 | in: query
775 | name: password
776 | required: false
777 | type: string
778 | - default: ''
779 | in: query
780 | name: selection
781 | required: false
782 | type: string
783 | - default: free
784 | in: query
785 | name: area
786 | required: false
787 | type: string
788 | - default: Code
789 | in: query
790 | name: searchcriterion
791 | required: false
792 | type: string
793 | - default: Name
794 | in: query
795 | name: sortcriterion
796 | required: false
797 | type: string
798 | - default: Alle
799 | in: query
800 | name: type
801 | required: false
802 | type: string
803 | - default: '100'
804 | in: query
805 | name: pagelength
806 | required: false
807 | type: string
808 | - default: de
809 | in: query
810 | name: language
811 | required: false
812 | type: string
813 | responses:
814 | '200':
815 | description: Successful Response
816 | operationId: variables
817 | /catalogue/variables2statistic:
818 | parameters: []
819 | get:
820 | parameters:
821 | - default: GAST
822 | in: query
823 | name: username
824 | required: false
825 | type: string
826 | - default: GAST
827 | in: query
828 | name: password
829 | required: false
830 | type: string
831 | - default: ''
832 | in: query
833 | name: name
834 | required: false
835 | type: string
836 | - default: ''
837 | in: query
838 | name: selection
839 | required: false
840 | type: string
841 | - default: free
842 | in: query
843 | name: area
844 | required: false
845 | type: string
846 | - default: Code
847 | in: query
848 | name: searchcriterion
849 | required: false
850 | type: string
851 | - default: Name
852 | in: query
853 | name: sortcriterion
854 | required: false
855 | type: string
856 | - default: Alle
857 | in: query
858 | name: type
859 | required: false
860 | type: string
861 | - default: '100'
862 | in: query
863 | name: pagelength
864 | required: false
865 | type: string
866 | - default: de
867 | in: query
868 | name: language
869 | required: false
870 | type: string
871 | responses:
872 | '200':
873 | description: Successful Response
874 | operationId: variables2statistic
875 | /data/chart2result:
876 | parameters: []
877 | get:
878 | parameters:
879 | - default: GAST
880 | in: query
881 | name: username
882 | required: false
883 | type: string
884 | - default: GAST
885 | in: query
886 | name: password
887 | required: false
888 | type: string
889 | - default: ''
890 | in: query
891 | name: name
892 | required: false
893 | type: string
894 | - default: free
895 | in: query
896 | name: area
897 | required: false
898 | type: string
899 | - default: '0'
900 | in: query
901 | name: charttype
902 | required: false
903 | type: string
904 | - default: 'false'
905 | in: query
906 | name: drawpoints
907 | required: false
908 | type: string
909 | - default: '2'
910 | in: query
911 | name: zoom
912 | required: false
913 | type: string
914 | - default: 'false'
915 | in: query
916 | name: focus
917 | required: false
918 | type: string
919 | - default: 'false'
920 | in: query
921 | name: tops
922 | required: false
923 | type: string
924 | - default: png
925 | in: query
926 | name: format
927 | required: false
928 | type: string
929 | - default: de
930 | in: query
931 | name: language
932 | required: false
933 | type: string
934 | responses:
935 | '200':
936 | description: Successful Response
937 | operationId: chart2result
938 | /data/chart2table:
939 | parameters: []
940 | get:
941 | parameters:
942 | - default: GAST
943 | in: query
944 | name: username
945 | required: false
946 | type: string
947 | - default: GAST
948 | in: query
949 | name: password
950 | required: false
951 | type: string
952 | - default: ''
953 | in: query
954 | name: name
955 | required: false
956 | type: string
957 | - default: free
958 | in: query
959 | name: area
960 | required: false
961 | type: string
962 | - default: '0'
963 | in: query
964 | name: charttype
965 | required: false
966 | type: string
967 | - default: 'false'
968 | in: query
969 | name: drawpoints
970 | required: false
971 | type: string
972 | - default: '2'
973 | in: query
974 | name: zoom
975 | required: false
976 | type: string
977 | - default: 'false'
978 | in: query
979 | name: focus
980 | required: false
981 | type: string
982 | - default: 'false'
983 | in: query
984 | name: tops
985 | required: false
986 | type: string
987 | - default: ''
988 | in: query
989 | name: startyear
990 | required: false
991 | type: string
992 | - default: ''
993 | in: query
994 | name: endyear
995 | required: false
996 | type: string
997 | - default: ''
998 | in: query
999 | name: timeslices
1000 | required: false
1001 | type: string
1002 | - default: ''
1003 | in: query
1004 | name: regionalvariable
1005 | required: false
1006 | type: string
1007 | - default: ''
1008 | in: query
1009 | name: regionalkey
1010 | required: false
1011 | type: string
1012 | - default: ''
1013 | in: query
1014 | name: classifyingvariable1
1015 | required: false
1016 | type: string
1017 | - default: ''
1018 | in: query
1019 | name: classifyingkey1
1020 | required: false
1021 | type: string
1022 | - default: ''
1023 | in: query
1024 | name: classifyingvariable2
1025 | required: false
1026 | type: string
1027 | - default: ''
1028 | in: query
1029 | name: classifyingkey2
1030 | required: false
1031 | type: string
1032 | - default: ''
1033 | in: query
1034 | name: classifyingvariable3
1035 | required: false
1036 | type: string
1037 | - default: ''
1038 | in: query
1039 | name: classifyingkey3
1040 | required: false
1041 | type: string
1042 | - default: png
1043 | in: query
1044 | name: format
1045 | required: false
1046 | type: string
1047 | - default: 01.01.1970 01:00
1048 | in: query
1049 | name: stand
1050 | required: false
1051 | type: string
1052 | - default: de
1053 | in: query
1054 | name: language
1055 | required: false
1056 | type: string
1057 | responses:
1058 | '200':
1059 | description: Successful Response
1060 | operationId: chart2table
1061 | /data/chart2timeseries:
1062 | parameters: []
1063 | get:
1064 | parameters:
1065 | - default: GAST
1066 | in: query
1067 | name: username
1068 | required: false
1069 | type: string
1070 | - default: GAST
1071 | in: query
1072 | name: password
1073 | required: false
1074 | type: string
1075 | - default: ''
1076 | in: query
1077 | name: name
1078 | required: false
1079 | type: string
1080 | - default: free
1081 | in: query
1082 | name: area
1083 | required: false
1084 | type: string
1085 | - default: '0'
1086 | in: query
1087 | name: charttype
1088 | required: false
1089 | type: string
1090 | - default: 'false'
1091 | in: query
1092 | name: drawpoints
1093 | required: false
1094 | type: string
1095 | - default: '2'
1096 | in: query
1097 | name: zoom
1098 | required: false
1099 | type: string
1100 | - default: 'false'
1101 | in: query
1102 | name: focus
1103 | required: false
1104 | type: string
1105 | - default: 'false'
1106 | in: query
1107 | name: tops
1108 | required: false
1109 | type: string
1110 | - default: ''
1111 | in: query
1112 | name: contents
1113 | required: false
1114 | type: string
1115 | - default: ''
1116 | in: query
1117 | name: startyear
1118 | required: false
1119 | type: string
1120 | - default: ''
1121 | in: query
1122 | name: endyear
1123 | required: false
1124 | type: string
1125 | - default: ''
1126 | in: query
1127 | name: timeslices
1128 | required: false
1129 | type: string
1130 | - default: ''
1131 | in: query
1132 | name: regionalvariable
1133 | required: false
1134 | type: string
1135 | - default: ''
1136 | in: query
1137 | name: regionalkey
1138 | required: false
1139 | type: string
1140 | - default: ''
1141 | in: query
1142 | name: classifyingvariable1
1143 | required: false
1144 | type: string
1145 | - default: ''
1146 | in: query
1147 | name: classifyingkey1
1148 | required: false
1149 | type: string
1150 | - default: ''
1151 | in: query
1152 | name: classifyingvariable2
1153 | required: false
1154 | type: string
1155 | - default: ''
1156 | in: query
1157 | name: classifyingkey2
1158 | required: false
1159 | type: string
1160 | - default: ''
1161 | in: query
1162 | name: classifyingvariable3
1163 | required: false
1164 | type: string
1165 | - default: ''
1166 | in: query
1167 | name: classifyingkey3
1168 | required: false
1169 | type: string
1170 | - default: png
1171 | in: query
1172 | name: format
1173 | required: false
1174 | type: string
1175 | - default: 01.01.1970 01:00
1176 | in: query
1177 | name: stand
1178 | required: false
1179 | type: string
1180 | - default: de
1181 | in: query
1182 | name: language
1183 | required: false
1184 | type: string
1185 | responses:
1186 | '200':
1187 | description: Successful Response
1188 | operationId: chart2timeseries
1189 | /data/cube:
1190 | parameters: []
1191 | get:
1192 | parameters:
1193 | - default: GAST
1194 | in: query
1195 | name: username
1196 | required: false
1197 | type: string
1198 | - default: GAST
1199 | in: query
1200 | name: password
1201 | required: false
1202 | type: string
1203 | - default: ''
1204 | in: query
1205 | name: name
1206 | required: false
1207 | type: string
1208 | - default: free
1209 | in: query
1210 | name: area
1211 | required: false
1212 | type: string
1213 | - default: 'true'
1214 | in: query
1215 | name: values
1216 | required: false
1217 | type: string
1218 | - default: 'false'
1219 | in: query
1220 | name: metadata
1221 | required: false
1222 | type: string
1223 | - default: 'false'
1224 | in: query
1225 | name: additionals
1226 | required: false
1227 | type: string
1228 | - default: ''
1229 | in: query
1230 | name: contents
1231 | required: false
1232 | type: string
1233 | - default: ''
1234 | in: query
1235 | name: startyear
1236 | required: false
1237 | type: string
1238 | - default: ''
1239 | in: query
1240 | name: endyear
1241 | required: false
1242 | type: string
1243 | - default: ''
1244 | in: query
1245 | name: timeslices
1246 | required: false
1247 | type: string
1248 | - default: ''
1249 | in: query
1250 | name: regionalvariable
1251 | required: false
1252 | type: string
1253 | - default: ''
1254 | in: query
1255 | name: regionalkey
1256 | required: false
1257 | type: string
1258 | - default: ''
1259 | in: query
1260 | name: classifyingvariable1
1261 | required: false
1262 | type: string
1263 | - default: ''
1264 | in: query
1265 | name: classifyingkey1
1266 | required: false
1267 | type: string
1268 | - default: ''
1269 | in: query
1270 | name: classifyingvariable2
1271 | required: false
1272 | type: string
1273 | - default: ''
1274 | in: query
1275 | name: classifyingkey2
1276 | required: false
1277 | type: string
1278 | - default: ''
1279 | in: query
1280 | name: classifyingvariable3
1281 | required: false
1282 | type: string
1283 | - default: ''
1284 | in: query
1285 | name: classifyingkey3
1286 | required: false
1287 | type: string
1288 | - default: csv
1289 | in: query
1290 | name: format
1291 | required: false
1292 | type: string
1293 | - default: 01.01.1970 01:00
1294 | in: query
1295 | name: stand
1296 | required: false
1297 | type: string
1298 | - default: de
1299 | in: query
1300 | name: language
1301 | required: false
1302 | type: string
1303 | responses:
1304 | '200':
1305 | description: Successful Response
1306 | operationId: cube
1307 | /data/cubefile:
1308 | parameters: []
1309 | get:
1310 | parameters:
1311 | - default: GAST
1312 | in: query
1313 | name: username
1314 | required: false
1315 | type: string
1316 | - default: GAST
1317 | in: query
1318 | name: password
1319 | required: false
1320 | type: string
1321 | - default: ''
1322 | in: query
1323 | name: name
1324 | required: false
1325 | type: string
1326 | - default: free
1327 | in: query
1328 | name: area
1329 | required: false
1330 | type: string
1331 | - default: 'true'
1332 | in: query
1333 | name: values
1334 | required: false
1335 | type: string
1336 | - default: 'false'
1337 | in: query
1338 | name: metadata
1339 | required: false
1340 | type: string
1341 | - default: 'false'
1342 | in: query
1343 | name: additionals
1344 | required: false
1345 | type: string
1346 | - default: ''
1347 | in: query
1348 | name: contents
1349 | required: false
1350 | type: string
1351 | - default: ''
1352 | in: query
1353 | name: startyear
1354 | required: false
1355 | type: string
1356 | - default: ''
1357 | in: query
1358 | name: endyear
1359 | required: false
1360 | type: string
1361 | - default: ''
1362 | in: query
1363 | name: timeslices
1364 | required: false
1365 | type: string
1366 | - default: ''
1367 | in: query
1368 | name: regionalvariable
1369 | required: false
1370 | type: string
1371 | - default: ''
1372 | in: query
1373 | name: regionalkey
1374 | required: false
1375 | type: string
1376 | - default: ''
1377 | in: query
1378 | name: classifyingvariable1
1379 | required: false
1380 | type: string
1381 | - default: ''
1382 | in: query
1383 | name: classifyingkey1
1384 | required: false
1385 | type: string
1386 | - default: ''
1387 | in: query
1388 | name: classifyingvariable2
1389 | required: false
1390 | type: string
1391 | - default: ''
1392 | in: query
1393 | name: classifyingkey2
1394 | required: false
1395 | type: string
1396 | - default: ''
1397 | in: query
1398 | name: classifyingvariable3
1399 | required: false
1400 | type: string
1401 | - default: ''
1402 | in: query
1403 | name: classifyingkey3
1404 | required: false
1405 | type: string
1406 | - default: csv
1407 | in: query
1408 | name: format
1409 | required: false
1410 | type: string
1411 | - default: 01.01.1970 01:00
1412 | in: query
1413 | name: stand
1414 | required: false
1415 | type: string
1416 | - default: de
1417 | in: query
1418 | name: language
1419 | required: false
1420 | type: string
1421 | responses:
1422 | '200':
1423 | description: Successful Response
1424 | operationId: cubefile
1425 | /data/map2result:
1426 | parameters: []
1427 | get:
1428 | parameters:
1429 | - default: GAST
1430 | in: query
1431 | name: username
1432 | required: false
1433 | type: string
1434 | - default: GAST
1435 | in: query
1436 | name: password
1437 | required: false
1438 | type: string
1439 | - default: ''
1440 | in: query
1441 | name: name
1442 | required: false
1443 | type: string
1444 | - default: free
1445 | in: query
1446 | name: area
1447 | required: false
1448 | type: string
1449 | - default: '0'
1450 | in: query
1451 | name: maptype
1452 | required: false
1453 | type: string
1454 | - default: '5'
1455 | in: query
1456 | name: classes
1457 | required: false
1458 | type: string
1459 | - default: '0'
1460 | in: query
1461 | name: classification
1462 | required: false
1463 | type: string
1464 | - default: '2'
1465 | in: query
1466 | name: zoom
1467 | required: false
1468 | type: string
1469 | - default: png
1470 | in: query
1471 | name: format
1472 | required: false
1473 | type: string
1474 | - default: de
1475 | in: query
1476 | name: language
1477 | required: false
1478 | type: string
1479 | responses:
1480 | '200':
1481 | description: Successful Response
1482 | operationId: map2result
1483 | /data/map2table:
1484 | parameters: []
1485 | get:
1486 | parameters:
1487 | - default: GAST
1488 | in: query
1489 | name: username
1490 | required: false
1491 | type: string
1492 | - default: GAST
1493 | in: query
1494 | name: password
1495 | required: false
1496 | type: string
1497 | - default: ''
1498 | in: query
1499 | name: name
1500 | required: false
1501 | type: string
1502 | - default: free
1503 | in: query
1504 | name: area
1505 | required: false
1506 | type: string
1507 | - default: '0'
1508 | in: query
1509 | name: maptype
1510 | required: false
1511 | type: string
1512 | - default: '5'
1513 | in: query
1514 | name: classes
1515 | required: false
1516 | type: string
1517 | - default: '0'
1518 | in: query
1519 | name: classification
1520 | required: false
1521 | type: string
1522 | - default: '2'
1523 | in: query
1524 | name: zoom
1525 | required: false
1526 | type: string
1527 | - default: ''
1528 | in: query
1529 | name: startyear
1530 | required: false
1531 | type: string
1532 | - default: ''
1533 | in: query
1534 | name: endyear
1535 | required: false
1536 | type: string
1537 | - default: ''
1538 | in: query
1539 | name: timeslices
1540 | required: false
1541 | type: string
1542 | - default: ''
1543 | in: query
1544 | name: regionalvariable
1545 | required: false
1546 | type: string
1547 | - default: ''
1548 | in: query
1549 | name: regionalkey
1550 | required: false
1551 | type: string
1552 | - default: ''
1553 | in: query
1554 | name: classifyingvariable1
1555 | required: false
1556 | type: string
1557 | - default: ''
1558 | in: query
1559 | name: classifyingkey1
1560 | required: false
1561 | type: string
1562 | - default: ''
1563 | in: query
1564 | name: classifyingvariable2
1565 | required: false
1566 | type: string
1567 | - default: ''
1568 | in: query
1569 | name: classifyingkey2
1570 | required: false
1571 | type: string
1572 | - default: ''
1573 | in: query
1574 | name: classifyingvariable3
1575 | required: false
1576 | type: string
1577 | - default: ''
1578 | in: query
1579 | name: classifyingkey3
1580 | required: false
1581 | type: string
1582 | - default: png
1583 | in: query
1584 | name: format
1585 | required: false
1586 | type: string
1587 | - default: 01.01.1970 01:00
1588 | in: query
1589 | name: stand
1590 | required: false
1591 | type: string
1592 | - default: de
1593 | in: query
1594 | name: language
1595 | required: false
1596 | type: string
1597 | responses:
1598 | '200':
1599 | description: Successful Response
1600 | operationId: map2table
1601 | /data/map2timeseries:
1602 | parameters: []
1603 | get:
1604 | parameters:
1605 | - default: GAST
1606 | in: query
1607 | name: username
1608 | required: false
1609 | type: string
1610 | - default: GAST
1611 | in: query
1612 | name: password
1613 | required: false
1614 | type: string
1615 | - default: ''
1616 | in: query
1617 | name: name
1618 | required: false
1619 | type: string
1620 | - default: free
1621 | in: query
1622 | name: area
1623 | required: false
1624 | type: string
1625 | - default: '0'
1626 | in: query
1627 | name: maptype
1628 | required: false
1629 | type: string
1630 | - default: '5'
1631 | in: query
1632 | name: classes
1633 | required: false
1634 | type: string
1635 | - default: '0'
1636 | in: query
1637 | name: classification
1638 | required: false
1639 | type: string
1640 | - default: '2'
1641 | in: query
1642 | name: zoom
1643 | required: false
1644 | type: string
1645 | - default: ''
1646 | in: query
1647 | name: contents
1648 | required: false
1649 | type: string
1650 | - default: ''
1651 | in: query
1652 | name: startyear
1653 | required: false
1654 | type: string
1655 | - default: ''
1656 | in: query
1657 | name: endyear
1658 | required: false
1659 | type: string
1660 | - default: ''
1661 | in: query
1662 | name: timeslices
1663 | required: false
1664 | type: string
1665 | - default: ''
1666 | in: query
1667 | name: regionalvariable
1668 | required: false
1669 | type: string
1670 | - default: ''
1671 | in: query
1672 | name: regionalkey
1673 | required: false
1674 | type: string
1675 | - default: ''
1676 | in: query
1677 | name: classifyingvariable1
1678 | required: false
1679 | type: string
1680 | - default: ''
1681 | in: query
1682 | name: classifyingkey1
1683 | required: false
1684 | type: string
1685 | - default: ''
1686 | in: query
1687 | name: classifyingvariable2
1688 | required: false
1689 | type: string
1690 | - default: ''
1691 | in: query
1692 | name: classifyingkey2
1693 | required: false
1694 | type: string
1695 | - default: ''
1696 | in: query
1697 | name: classifyingvariable3
1698 | required: false
1699 | type: string
1700 | - default: ''
1701 | in: query
1702 | name: classifyingkey3
1703 | required: false
1704 | type: string
1705 | - default: png
1706 | in: query
1707 | name: format
1708 | required: false
1709 | type: string
1710 | - default: 01.01.1970 01:00
1711 | in: query
1712 | name: stand
1713 | required: false
1714 | type: string
1715 | - default: de
1716 | in: query
1717 | name: language
1718 | required: false
1719 | type: string
1720 | responses:
1721 | '200':
1722 | description: Successful Response
1723 | operationId: map2timeseries
1724 | /data/result:
1725 | parameters: []
1726 | get:
1727 | parameters:
1728 | - default: GAST
1729 | in: query
1730 | name: username
1731 | required: false
1732 | type: string
1733 | - default: GAST
1734 | in: query
1735 | name: password
1736 | required: false
1737 | type: string
1738 | - default: ''
1739 | in: query
1740 | name: name
1741 | required: false
1742 | type: string
1743 | - default: free
1744 | in: query
1745 | name: area
1746 | required: false
1747 | type: string
1748 | - default: 'false'
1749 | in: query
1750 | name: compress
1751 | required: false
1752 | type: string
1753 | - default: de
1754 | in: query
1755 | name: language
1756 | required: false
1757 | type: string
1758 | responses:
1759 | '200':
1760 | description: Successful Response
1761 | operationId: result
1762 | /data/resultfile:
1763 | parameters: []
1764 | get:
1765 | parameters:
1766 | - default: GAST
1767 | in: query
1768 | name: username
1769 | required: false
1770 | type: string
1771 | - default: GAST
1772 | in: query
1773 | name: password
1774 | required: false
1775 | type: string
1776 | - default: ''
1777 | in: query
1778 | name: name
1779 | required: false
1780 | type: string
1781 | - default: free
1782 | in: query
1783 | name: area
1784 | required: false
1785 | type: string
1786 | - default: 'false'
1787 | in: query
1788 | name: compress
1789 | required: false
1790 | type: string
1791 | - default: csv
1792 | in: query
1793 | name: format
1794 | required: false
1795 | type: string
1796 | - default: de
1797 | in: query
1798 | name: language
1799 | required: false
1800 | type: string
1801 | responses:
1802 | '200':
1803 | description: Successful Response
1804 | operationId: resultfile
1805 | /data/table:
1806 | parameters: []
1807 | get:
1808 | parameters:
1809 | - default: GAST
1810 | in: query
1811 | name: username
1812 | required: false
1813 | type: string
1814 | - default: GAST
1815 | in: query
1816 | name: password
1817 | required: false
1818 | type: string
1819 | - default: ''
1820 | in: query
1821 | name: name
1822 | required: false
1823 | type: string
1824 | - default: free
1825 | in: query
1826 | name: area
1827 | required: false
1828 | type: string
1829 | - default: 'false'
1830 | in: query
1831 | name: compress
1832 | required: false
1833 | type: string
1834 | - default: 'false'
1835 | in: query
1836 | name: transpose
1837 | required: false
1838 | type: string
1839 | - default: ''
1840 | in: query
1841 | name: startyear
1842 | required: false
1843 | type: string
1844 | - default: ''
1845 | in: query
1846 | name: endyear
1847 | required: false
1848 | type: string
1849 | - default: ''
1850 | in: query
1851 | name: timeslices
1852 | required: false
1853 | type: string
1854 | - default: ''
1855 | in: query
1856 | name: regionalvariable
1857 | required: false
1858 | type: string
1859 | - default: ''
1860 | in: query
1861 | name: regionalkey
1862 | required: false
1863 | type: string
1864 | - default: ''
1865 | in: query
1866 | name: classifyingvariable1
1867 | required: false
1868 | type: string
1869 | - default: ''
1870 | in: query
1871 | name: classifyingkey1
1872 | required: false
1873 | type: string
1874 | - default: ''
1875 | in: query
1876 | name: classifyingvariable2
1877 | required: false
1878 | type: string
1879 | - default: ''
1880 | in: query
1881 | name: classifyingkey2
1882 | required: false
1883 | type: string
1884 | - default: ''
1885 | in: query
1886 | name: classifyingvariable3
1887 | required: false
1888 | type: string
1889 | - default: ''
1890 | in: query
1891 | name: classifyingkey3
1892 | required: false
1893 | type: string
1894 | - default: 'false'
1895 | in: query
1896 | name: job
1897 | required: false
1898 | type: string
1899 | - default: 01.01.1970 01:00
1900 | in: query
1901 | name: stand
1902 | required: false
1903 | type: string
1904 | - default: de
1905 | in: query
1906 | name: language
1907 | required: false
1908 | type: string
1909 | responses:
1910 | '200':
1911 | description: Successful Response
1912 | operationId: table
1913 | /data/tablefile:
1914 | parameters: []
1915 | get:
1916 | parameters:
1917 | - default: GAST
1918 | in: query
1919 | name: username
1920 | required: false
1921 | type: string
1922 | - default: GAST
1923 | in: query
1924 | name: password
1925 | required: false
1926 | type: string
1927 | - default: ''
1928 | in: query
1929 | name: name
1930 | required: false
1931 | type: string
1932 | - default: free
1933 | in: query
1934 | name: area
1935 | required: false
1936 | type: string
1937 | - default: 'false'
1938 | in: query
1939 | name: compress
1940 | required: false
1941 | type: string
1942 | - default: 'false'
1943 | in: query
1944 | name: transpose
1945 | required: false
1946 | type: string
1947 | - default: ''
1948 | in: query
1949 | name: startyear
1950 | required: false
1951 | type: string
1952 | - default: ''
1953 | in: query
1954 | name: endyear
1955 | required: false
1956 | type: string
1957 | - default: ''
1958 | in: query
1959 | name: timeslices
1960 | required: false
1961 | type: string
1962 | - default: ''
1963 | in: query
1964 | name: regionalvariable
1965 | required: false
1966 | type: string
1967 | - default: ''
1968 | in: query
1969 | name: regionalkey
1970 | required: false
1971 | type: string
1972 | - default: ''
1973 | in: query
1974 | name: classifyingvariable1
1975 | required: false
1976 | type: string
1977 | - default: ''
1978 | in: query
1979 | name: classifyingkey1
1980 | required: false
1981 | type: string
1982 | - default: ''
1983 | in: query
1984 | name: classifyingvariable2
1985 | required: false
1986 | type: string
1987 | - default: ''
1988 | in: query
1989 | name: classifyingkey2
1990 | required: false
1991 | type: string
1992 | - default: ''
1993 | in: query
1994 | name: classifyingvariable3
1995 | required: false
1996 | type: string
1997 | - default: ''
1998 | in: query
1999 | name: classifyingkey3
2000 | required: false
2001 | type: string
2002 | - default: csv
2003 | in: query
2004 | name: format
2005 | required: false
2006 | type: string
2007 | - default: 'false'
2008 | in: query
2009 | name: job
2010 | required: false
2011 | type: string
2012 | - default: 01.01.1970 01:00
2013 | in: query
2014 | name: stand
2015 | required: false
2016 | type: string
2017 | - default: de
2018 | in: query
2019 | name: language
2020 | required: false
2021 | type: string
2022 | responses:
2023 | '200':
2024 | description: Successful Response
2025 | operationId: tablefile
2026 | /data/timeseries:
2027 | parameters: []
2028 | get:
2029 | parameters:
2030 | - default: GAST
2031 | in: query
2032 | name: username
2033 | required: false
2034 | type: string
2035 | - default: GAST
2036 | in: query
2037 | name: password
2038 | required: false
2039 | type: string
2040 | - default: ''
2041 | in: query
2042 | name: name
2043 | required: false
2044 | type: string
2045 | - default: free
2046 | in: query
2047 | name: area
2048 | required: false
2049 | type: string
2050 | - default: 'false'
2051 | in: query
2052 | name: compress
2053 | required: false
2054 | type: string
2055 | - default: 'false'
2056 | in: query
2057 | name: transpose
2058 | required: false
2059 | type: string
2060 | - default: ''
2061 | in: query
2062 | name: contents
2063 | required: false
2064 | type: string
2065 | - default: ''
2066 | in: query
2067 | name: startyear
2068 | required: false
2069 | type: string
2070 | - default: ''
2071 | in: query
2072 | name: endyear
2073 | required: false
2074 | type: string
2075 | - default: ''
2076 | in: query
2077 | name: timeslices
2078 | required: false
2079 | type: string
2080 | - default: ''
2081 | in: query
2082 | name: regionalvariable
2083 | required: false
2084 | type: string
2085 | - default: ''
2086 | in: query
2087 | name: regionalkey
2088 | required: false
2089 | type: string
2090 | - default: ''
2091 | in: query
2092 | name: regionalkeycode
2093 | required: false
2094 | type: string
2095 | - default: ''
2096 | in: query
2097 | name: classifyingvariable1
2098 | required: false
2099 | type: string
2100 | - default: ''
2101 | in: query
2102 | name: classifyingkey1
2103 | required: false
2104 | type: string
2105 | - default: ''
2106 | in: query
2107 | name: classifyingkeycode1
2108 | required: false
2109 | type: string
2110 | - default: ''
2111 | in: query
2112 | name: classifyingvariable2
2113 | required: false
2114 | type: string
2115 | - default: ''
2116 | in: query
2117 | name: classifyingkey2
2118 | required: false
2119 | type: string
2120 | - default: ''
2121 | in: query
2122 | name: classifyingkeycode2
2123 | required: false
2124 | type: string
2125 | - default: ''
2126 | in: query
2127 | name: classifyingvariable3
2128 | required: false
2129 | type: string
2130 | - default: ''
2131 | in: query
2132 | name: classifyingkey3
2133 | required: false
2134 | type: string
2135 | - default: ''
2136 | in: query
2137 | name: classifyingkeycode3
2138 | required: false
2139 | type: string
2140 | - default: 'false'
2141 | in: query
2142 | name: job
2143 | required: false
2144 | type: string
2145 | - default: 01.01.1970 01:00
2146 | in: query
2147 | name: stand
2148 | required: false
2149 | type: string
2150 | - default: de
2151 | in: query
2152 | name: language
2153 | required: false
2154 | type: string
2155 | responses:
2156 | '200':
2157 | description: Successful Response
2158 | operationId: timeseriesData
2159 | /data/timeseriesfile:
2160 | parameters: []
2161 | get:
2162 | parameters:
2163 | - default: GAST
2164 | in: query
2165 | name: username
2166 | required: false
2167 | type: string
2168 | - default: GAST
2169 | in: query
2170 | name: password
2171 | required: false
2172 | type: string
2173 | - default: ''
2174 | in: query
2175 | name: name
2176 | required: false
2177 | type: string
2178 | - default: free
2179 | in: query
2180 | name: area
2181 | required: false
2182 | type: string
2183 | - default: 'false'
2184 | in: query
2185 | name: compress
2186 | required: false
2187 | type: string
2188 | - default: 'false'
2189 | in: query
2190 | name: transpose
2191 | required: false
2192 | type: string
2193 | - default: ''
2194 | in: query
2195 | name: contents
2196 | required: false
2197 | type: string
2198 | - default: ''
2199 | in: query
2200 | name: startyear
2201 | required: false
2202 | type: string
2203 | - default: ''
2204 | in: query
2205 | name: endyear
2206 | required: false
2207 | type: string
2208 | - default: ''
2209 | in: query
2210 | name: timeslices
2211 | required: false
2212 | type: string
2213 | - default: ''
2214 | in: query
2215 | name: regionalvariable
2216 | required: false
2217 | type: string
2218 | - default: ''
2219 | in: query
2220 | name: regionalkey
2221 | required: false
2222 | type: string
2223 | - default: ''
2224 | in: query
2225 | name: regionalkeycode
2226 | required: false
2227 | type: string
2228 | - default: ''
2229 | in: query
2230 | name: classifyingvariable1
2231 | required: false
2232 | type: string
2233 | - default: ''
2234 | in: query
2235 | name: classifyingkey1
2236 | required: false
2237 | type: string
2238 | - default: ''
2239 | in: query
2240 | name: classifyingkeycode1
2241 | required: false
2242 | type: string
2243 | - default: ''
2244 | in: query
2245 | name: classifyingvariable2
2246 | required: false
2247 | type: string
2248 | - default: ''
2249 | in: query
2250 | name: classifyingkey2
2251 | required: false
2252 | type: string
2253 | - default: ''
2254 | in: query
2255 | name: classifyingkeycode2
2256 | required: false
2257 | type: string
2258 | - default: ''
2259 | in: query
2260 | name: classifyingvariable3
2261 | required: false
2262 | type: string
2263 | - default: ''
2264 | in: query
2265 | name: classifyingkey3
2266 | required: false
2267 | type: string
2268 | - default: ''
2269 | in: query
2270 | name: classifyingkeycode3
2271 | required: false
2272 | type: string
2273 | - default: csv
2274 | in: query
2275 | name: format
2276 | required: false
2277 | type: string
2278 | - default: 'false'
2279 | in: query
2280 | name: job
2281 | required: false
2282 | type: string
2283 | - default: 01.01.1970 01:00
2284 | in: query
2285 | name: stand
2286 | required: false
2287 | type: string
2288 | - default: de
2289 | in: query
2290 | name: language
2291 | required: false
2292 | type: string
2293 | responses:
2294 | '200':
2295 | description: Successful Response
2296 | operationId: timeseriesfile
2297 | /find/find:
2298 | parameters: []
2299 | get:
2300 | parameters:
2301 | - default: GAST
2302 | in: query
2303 | name: username
2304 | required: false
2305 | type: string
2306 | - default: GAST
2307 | in: query
2308 | name: password
2309 | required: false
2310 | type: string
2311 | - in: query
2312 | name: term
2313 | required: false
2314 | type: string
2315 | - default: all
2316 | in: query
2317 | name: category
2318 | required: false
2319 | type: string
2320 | - default: '100'
2321 | in: query
2322 | name: pagelength
2323 | required: false
2324 | type: string
2325 | - default: de
2326 | in: query
2327 | name: language
2328 | required: false
2329 | type: string
2330 | responses:
2331 | '200':
2332 | description: Successful Response
2333 | operationId: find
2334 | /helloworld/logincheck:
2335 | parameters: []
2336 | get:
2337 | parameters:
2338 | - in: query
2339 | name: username
2340 | required: false
2341 | type: string
2342 | - in: query
2343 | name: password
2344 | required: false
2345 | type: string
2346 | - default: de
2347 | in: query
2348 | name: language
2349 | required: false
2350 | type: string
2351 | responses:
2352 | '200':
2353 | description: Successful Response
2354 | operationId: logincheck
2355 | /helloworld/whoami:
2356 | parameters: []
2357 | get:
2358 | parameters:
2359 | - in: header
2360 | name: user-agent
2361 | required: false
2362 | type: string
2363 | responses:
2364 | '200':
2365 | description: Successful Response
2366 | operationId: whoami
2367 | /metadata/cube:
2368 | parameters: []
2369 | get:
2370 | parameters:
2371 | - default: GAST
2372 | in: query
2373 | name: username
2374 | required: false
2375 | type: string
2376 | - default: GAST
2377 | in: query
2378 | name: password
2379 | required: false
2380 | type: string
2381 | - default: ''
2382 | in: query
2383 | name: name
2384 | required: false
2385 | type: string
2386 | - default: free
2387 | in: query
2388 | name: area
2389 | required: false
2390 | type: string
2391 | - default: de
2392 | in: query
2393 | name: language
2394 | required: false
2395 | type: string
2396 | responses:
2397 | '200':
2398 | description: Successful Response
2399 | operationId: cubeMeta
2400 | /metadata/statistic:
2401 | parameters: []
2402 | get:
2403 | parameters:
2404 | - default: GAST
2405 | in: query
2406 | name: username
2407 | required: false
2408 | type: string
2409 | - default: GAST
2410 | in: query
2411 | name: password
2412 | required: false
2413 | type: string
2414 | - default: ''
2415 | in: query
2416 | name: name
2417 | required: false
2418 | type: string
2419 | - default: free
2420 | in: query
2421 | name: area
2422 | required: false
2423 | type: string
2424 | - default: de
2425 | in: query
2426 | name: language
2427 | required: false
2428 | type: string
2429 | responses:
2430 | '200':
2431 | description: Successful Response
2432 | operationId: statistic
2433 | /metadata/table:
2434 | parameters: []
2435 | get:
2436 | parameters:
2437 | - default: GAST
2438 | in: query
2439 | name: username
2440 | required: false
2441 | type: string
2442 | - default: GAST
2443 | in: query
2444 | name: password
2445 | required: false
2446 | type: string
2447 | - default: ''
2448 | in: query
2449 | name: name
2450 | required: false
2451 | type: string
2452 | - default: free
2453 | in: query
2454 | name: area
2455 | required: false
2456 | type: string
2457 | - default: de
2458 | in: query
2459 | name: language
2460 | required: false
2461 | type: string
2462 | responses:
2463 | '200':
2464 | description: Successful Response
2465 | operationId: tableMeta
2466 | /metadata/timeseries:
2467 | parameters: []
2468 | get:
2469 | parameters:
2470 | - default: GAST
2471 | in: query
2472 | name: username
2473 | required: false
2474 | type: string
2475 | - default: GAST
2476 | in: query
2477 | name: password
2478 | required: false
2479 | type: string
2480 | - default: ''
2481 | in: query
2482 | name: name
2483 | required: false
2484 | type: string
2485 | - default: free
2486 | in: query
2487 | name: area
2488 | required: false
2489 | type: string
2490 | - default: de
2491 | in: query
2492 | name: language
2493 | required: false
2494 | type: string
2495 | responses:
2496 | '200':
2497 | description: Successful Response
2498 | operationId: timeseriesMeta
2499 | /metadata/value:
2500 | parameters: []
2501 | get:
2502 | parameters:
2503 | - default: GAST
2504 | in: query
2505 | name: username
2506 | required: false
2507 | type: string
2508 | - default: GAST
2509 | in: query
2510 | name: password
2511 | required: false
2512 | type: string
2513 | - default: ''
2514 | in: query
2515 | name: name
2516 | required: false
2517 | type: string
2518 | - default: free
2519 | in: query
2520 | name: area
2521 | required: false
2522 | type: string
2523 | - default: de
2524 | in: query
2525 | name: language
2526 | required: false
2527 | type: string
2528 | responses:
2529 | '200':
2530 | description: Successful Response
2531 | operationId: value
2532 | /metadata/variable:
2533 | parameters: []
2534 | get:
2535 | parameters:
2536 | - default: GAST
2537 | in: query
2538 | name: username
2539 | required: false
2540 | type: string
2541 | - default: GAST
2542 | in: query
2543 | name: password
2544 | required: false
2545 | type: string
2546 | - default: ''
2547 | in: query
2548 | name: name
2549 | required: false
2550 | type: string
2551 | - default: free
2552 | in: query
2553 | name: area
2554 | required: false
2555 | type: string
2556 | - default: de
2557 | in: query
2558 | name: language
2559 | required: false
2560 | type: string
2561 | responses:
2562 | '200':
2563 | description: Successful Response
2564 | operationId: variable
2565 | /profile/password:
2566 | parameters: []
2567 | get:
2568 | parameters:
2569 | - in: query
2570 | name: username
2571 | required: false
2572 | type: string
2573 | - in: query
2574 | name: password
2575 | required: false
2576 | type: string
2577 | - in: query
2578 | name: new
2579 | required: false
2580 | type: string
2581 | - in: query
2582 | name: repeat
2583 | required: false
2584 | type: string
2585 | - default: de
2586 | in: query
2587 | name: language
2588 | required: false
2589 | type: string
2590 | responses:
2591 | '200':
2592 | description: Successful Response
2593 | operationId: password
2594 | /profile/removeResult:
2595 | parameters: []
2596 | get:
2597 | parameters:
2598 | - default: GAST
2599 | in: query
2600 | name: username
2601 | required: false
2602 | type: string
2603 | - default: GAST
2604 | in: query
2605 | name: password
2606 | required: false
2607 | type: string
2608 | - in: query
2609 | name: name
2610 | required: false
2611 | type: string
2612 | - default: free
2613 | in: query
2614 | name: area
2615 | required: false
2616 | type: string
2617 | - default: de
2618 | in: query
2619 | name: language
2620 | required: false
2621 | type: string
2622 | responses:
2623 | '200':
2624 | description: Successful Response
2625 | operationId: removeResult
2626 |
--------------------------------------------------------------------------------
/python-client/.openapi-generator-ignore:
--------------------------------------------------------------------------------
1 | # OpenAPI Generator Ignore
2 | # Generated by openapi-generator https://github.com/openapitools/openapi-generator
3 |
4 | # Use this file to prevent files from being overwritten by the generator.
5 | # The patterns follow closely to .gitignore or .dockerignore.
6 |
7 | # As an example, the C# client generator defines ApiClient.cs.
8 | # You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
9 | #ApiClient.cs
10 |
11 | # You can match any string of characters against a directory, file or extension with a single asterisk (*):
12 | #foo/*/qux
13 | # The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
14 |
15 | # You can recursively match patterns against a directory, file or extension with a double asterisk (**):
16 | #foo/**/qux
17 | # This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
18 |
19 | # You can also negate patterns with an exclamation (!).
20 | # For example, you can ignore all files in a docs folder with the file extension .md:
21 | #docs/*.md
22 | # Then explicitly reverse the ignore rule for a single file:
23 | #!docs/README.md
24 |
--------------------------------------------------------------------------------
/python-client/.openapi-generator/FILES:
--------------------------------------------------------------------------------
1 | .gitignore
2 | .gitlab-ci.yml
3 | .openapi-generator-ignore
4 | .travis.yml
5 | README.md
6 | create_doc.py
7 | destatis/__init__.py
8 | destatis/api/__init__.py
9 | destatis/api/default_api.py
10 | destatis/api_client.py
11 | destatis/apis/__init__.py
12 | destatis/configuration.py
13 | destatis/exceptions.py
14 | destatis/model/__init__.py
15 | destatis/model_utils.py
16 | destatis/models/__init__.py
17 | destatis/rest.py
18 | docs/DefaultApi.md
19 | git_push.sh
20 | pyproject.toml
21 | rename_generated_code.py
22 | requirements.txt
23 | requirements.txt
24 | setup.cfg
25 | setup.py
26 | test-requirements.txt
27 | test/__init__.py
28 | test/test_default_api.py
29 | tox.ini
30 |
--------------------------------------------------------------------------------
/python-client/.openapi-generator/VERSION:
--------------------------------------------------------------------------------
1 | 6.1.0
--------------------------------------------------------------------------------
/python-client/README.md:
--------------------------------------------------------------------------------
1 | # destatis
2 | No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
3 |
4 | This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
5 |
6 | - API version: 1.0
7 | - Package version: 0.1.0
8 | - Build package: org.openapitools.codegen.languages.PythonClientCodegen
9 |
10 | ## Requirements.
11 |
12 | Python >= 3.6
13 |
14 | ## Installation & Usage
15 | ### pip install
16 |
17 | ```sh
18 | pip install deutschland[destatis]
19 | ```
20 |
21 | ### poetry install
22 |
23 | ```sh
24 | poetry add deutschland -E destatis
25 | ```
26 |
27 | ### Setuptools
28 |
29 | Install via [Setuptools](http://pypi.python.org/pypi/setuptools).
30 |
31 | ```sh
32 | python setup.py install --user
33 | ```
34 | (or `sudo python setup.py install` to install the package for all users)
35 |
36 | ## Usage
37 |
38 | Import the package:
39 | ```python
40 | from deutschland import destatis
41 | ```
42 |
43 | ## Getting Started
44 |
45 | Please follow the [installation procedure](#installation--usage) and then run the following:
46 |
47 | ```python
48 |
49 | import time
50 | from deutschland import destatis
51 | from pprint import pprint
52 | from deutschland.destatis.api import default_api
53 | # Defining the host is optional and defaults to https://www-genesis.destatis.de/genesisWS/rest/2020
54 | # See configuration.py for a list of all supported configuration parameters.
55 | configuration = destatis.Configuration(
56 | host = "https://www-genesis.destatis.de/genesisWS/rest/2020"
57 | )
58 |
59 |
60 |
61 | # Enter a context with an instance of the API client
62 | with destatis.ApiClient(configuration) as api_client:
63 | # Create an instance of the API class
64 | api_instance = default_api.DefaultApi(api_client)
65 | username = "GAST" # str | (optional) (default to "GAST")
66 | password = "GAST" # str | (optional) (default to "GAST")
67 | name = "name_example" # str | (optional)
68 | area = "free" # str | (optional) (default to "free")
69 | charttype = "0" # str | (optional) (default to "0")
70 | drawpoints = "false" # str | (optional) (default to "false")
71 | zoom = "2" # str | (optional) (default to "2")
72 | focus = "false" # str | (optional) (default to "false")
73 | tops = "false" # str | (optional) (default to "false")
74 | format = "png" # str | (optional) (default to "png")
75 | language = "de" # str | (optional) (default to "de")
76 |
77 | try:
78 | api_instance.chart2result(username=username, password=password, name=name, area=area, charttype=charttype, drawpoints=drawpoints, zoom=zoom, focus=focus, tops=tops, format=format, language=language)
79 | except destatis.ApiException as e:
80 | print("Exception when calling DefaultApi->chart2result: %s\n" % e)
81 | ```
82 |
83 | ## Documentation for API Endpoints
84 |
85 | All URIs are relative to *https://www-genesis.destatis.de/genesisWS/rest/2020*
86 |
87 | Class | Method | HTTP request | Description
88 | ------------ | ------------- | ------------- | -------------
89 | *DefaultApi* | [**chart2result**](docs/DefaultApi.md#chart2result) | **GET** /data/chart2result |
90 | *DefaultApi* | [**chart2table**](docs/DefaultApi.md#chart2table) | **GET** /data/chart2table |
91 | *DefaultApi* | [**chart2timeseries**](docs/DefaultApi.md#chart2timeseries) | **GET** /data/chart2timeseries |
92 | *DefaultApi* | [**cube**](docs/DefaultApi.md#cube) | **GET** /data/cube |
93 | *DefaultApi* | [**cube_meta**](docs/DefaultApi.md#cube_meta) | **GET** /metadata/cube |
94 | *DefaultApi* | [**cubefile**](docs/DefaultApi.md#cubefile) | **GET** /data/cubefile |
95 | *DefaultApi* | [**cubes**](docs/DefaultApi.md#cubes) | **GET** /catalogue/cubes |
96 | *DefaultApi* | [**cubes2statistic**](docs/DefaultApi.md#cubes2statistic) | **GET** /catalogue/cubes2statistic |
97 | *DefaultApi* | [**cubes2variable**](docs/DefaultApi.md#cubes2variable) | **GET** /catalogue/cubes2variable |
98 | *DefaultApi* | [**find**](docs/DefaultApi.md#find) | **GET** /find/find |
99 | *DefaultApi* | [**jobs**](docs/DefaultApi.md#jobs) | **GET** /catalogue/jobs |
100 | *DefaultApi* | [**logincheck**](docs/DefaultApi.md#logincheck) | **GET** /helloworld/logincheck |
101 | *DefaultApi* | [**map2result**](docs/DefaultApi.md#map2result) | **GET** /data/map2result |
102 | *DefaultApi* | [**map2table**](docs/DefaultApi.md#map2table) | **GET** /data/map2table |
103 | *DefaultApi* | [**map2timeseries**](docs/DefaultApi.md#map2timeseries) | **GET** /data/map2timeseries |
104 | *DefaultApi* | [**modifieddata**](docs/DefaultApi.md#modifieddata) | **GET** /catalogue/modifieddata |
105 | *DefaultApi* | [**password**](docs/DefaultApi.md#password) | **GET** /profile/password |
106 | *DefaultApi* | [**qualitysigns**](docs/DefaultApi.md#qualitysigns) | **GET** /catalogue/qualitysigns |
107 | *DefaultApi* | [**remove_result**](docs/DefaultApi.md#remove_result) | **GET** /profile/removeResult |
108 | *DefaultApi* | [**result**](docs/DefaultApi.md#result) | **GET** /data/result |
109 | *DefaultApi* | [**resultfile**](docs/DefaultApi.md#resultfile) | **GET** /data/resultfile |
110 | *DefaultApi* | [**results**](docs/DefaultApi.md#results) | **GET** /catalogue/results |
111 | *DefaultApi* | [**statistic**](docs/DefaultApi.md#statistic) | **GET** /metadata/statistic |
112 | *DefaultApi* | [**statistics**](docs/DefaultApi.md#statistics) | **GET** /catalogue/statistics |
113 | *DefaultApi* | [**statistics2variable**](docs/DefaultApi.md#statistics2variable) | **GET** /catalogue/statistics2variable |
114 | *DefaultApi* | [**table**](docs/DefaultApi.md#table) | **GET** /data/table |
115 | *DefaultApi* | [**table_meta**](docs/DefaultApi.md#table_meta) | **GET** /metadata/table |
116 | *DefaultApi* | [**tablefile**](docs/DefaultApi.md#tablefile) | **GET** /data/tablefile |
117 | *DefaultApi* | [**tables**](docs/DefaultApi.md#tables) | **GET** /catalogue/tables |
118 | *DefaultApi* | [**tables2statistic**](docs/DefaultApi.md#tables2statistic) | **GET** /catalogue/tables2statistic |
119 | *DefaultApi* | [**tables2variable**](docs/DefaultApi.md#tables2variable) | **GET** /catalogue/tables2variable |
120 | *DefaultApi* | [**terms**](docs/DefaultApi.md#terms) | **GET** /catalogue/terms |
121 | *DefaultApi* | [**timeseries**](docs/DefaultApi.md#timeseries) | **GET** /catalogue/timeseries |
122 | *DefaultApi* | [**timeseries2statistic**](docs/DefaultApi.md#timeseries2statistic) | **GET** /catalogue/timeseries2statistic |
123 | *DefaultApi* | [**timeseries2variable**](docs/DefaultApi.md#timeseries2variable) | **GET** /catalogue/timeseries2variable |
124 | *DefaultApi* | [**timeseries_data**](docs/DefaultApi.md#timeseries_data) | **GET** /data/timeseries |
125 | *DefaultApi* | [**timeseries_meta**](docs/DefaultApi.md#timeseries_meta) | **GET** /metadata/timeseries |
126 | *DefaultApi* | [**timeseriesfile**](docs/DefaultApi.md#timeseriesfile) | **GET** /data/timeseriesfile |
127 | *DefaultApi* | [**value**](docs/DefaultApi.md#value) | **GET** /metadata/value |
128 | *DefaultApi* | [**values**](docs/DefaultApi.md#values) | **GET** /catalogue/values |
129 | *DefaultApi* | [**values2variable**](docs/DefaultApi.md#values2variable) | **GET** /catalogue/values2variable |
130 | *DefaultApi* | [**variable**](docs/DefaultApi.md#variable) | **GET** /metadata/variable |
131 | *DefaultApi* | [**variables**](docs/DefaultApi.md#variables) | **GET** /catalogue/variables |
132 | *DefaultApi* | [**variables2statistic**](docs/DefaultApi.md#variables2statistic) | **GET** /catalogue/variables2statistic |
133 | *DefaultApi* | [**whoami**](docs/DefaultApi.md#whoami) | **GET** /helloworld/whoami |
134 |
135 |
136 | ## Documentation For Models
137 |
138 |
139 |
140 | ## Documentation For Authorization
141 |
142 | All endpoints do not require authorization.
143 |
144 | ## Author
145 |
146 | kontakt@bund.dev
147 |
148 |
149 | ## Notes for Large OpenAPI documents
150 | If the OpenAPI document is large, imports in destatis.apis and destatis.models may fail with a
151 | RecursionError indicating the maximum recursion limit has been exceeded. In that case, there are a couple of solutions:
152 |
153 | Solution 1:
154 | Use specific imports for apis and models like:
155 | - `from deutschland.destatis.api.default_api import DefaultApi`
156 | - `from deutschland.destatis.model.pet import Pet`
157 |
158 | Solution 2:
159 | Before importing the package, adjust the maximum recursion limit as shown below:
160 | ```
161 | import sys
162 | sys.setrecursionlimit(1500)
163 | from deutschland import destatis
164 | from deutschland.destatis.apis import *
165 | from deutschland.destatis.models import *
166 | ```
167 |
168 |
--------------------------------------------------------------------------------
/python-client/deutschland/destatis/__init__.py:
--------------------------------------------------------------------------------
1 | # flake8: noqa
2 |
3 | """
4 | Destatis-API
5 |
6 | No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7 |
8 | The version of the OpenAPI document: 1.0
9 | Contact: kontakt@bund.dev
10 | Generated by: https://openapi-generator.tech
11 | """
12 |
13 |
14 | __version__ = "0.1.0"
15 |
16 | # import ApiClient
17 | from deutschland.destatis.api_client import ApiClient
18 |
19 | # import Configuration
20 | from deutschland.destatis.configuration import Configuration
21 |
22 | # import exceptions
23 | from deutschland.destatis.exceptions import (
24 | ApiAttributeError,
25 | ApiException,
26 | ApiKeyError,
27 | ApiTypeError,
28 | ApiValueError,
29 | OpenApiException,
30 | )
31 |
--------------------------------------------------------------------------------
/python-client/deutschland/destatis/api/__init__.py:
--------------------------------------------------------------------------------
1 | # do not import all apis into this module because that uses a lot of memory and stack frames
2 | # if you need the ability to import all apis from one package, import them with
3 | # from deutschland.destatis.apis import DefaultApi
4 |
--------------------------------------------------------------------------------
/python-client/deutschland/destatis/api_client.py:
--------------------------------------------------------------------------------
1 | """
2 | Destatis-API
3 |
4 | No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
5 |
6 | The version of the OpenAPI document: 1.0
7 | Contact: kontakt@bund.dev
8 | Generated by: https://openapi-generator.tech
9 | """
10 |
11 |
12 | import atexit
13 | import io
14 | import json
15 | import mimetypes
16 | import os
17 | import re
18 | import typing
19 | from multiprocessing.pool import ThreadPool
20 | from urllib.parse import quote
21 |
22 | from deutschland.destatis import rest
23 | from deutschland.destatis.configuration import Configuration
24 | from deutschland.destatis.exceptions import ApiException, ApiTypeError, ApiValueError
25 | from deutschland.destatis.model_utils import (
26 | ModelComposed,
27 | ModelNormal,
28 | ModelSimple,
29 | check_allowed_values,
30 | check_validations,
31 | date,
32 | datetime,
33 | deserialize_file,
34 | file_type,
35 | model_to_dict,
36 | none_type,
37 | validate_and_convert_types,
38 | )
39 | from urllib3.fields import RequestField
40 |
41 |
42 | class ApiClient(object):
43 | """Generic API client for OpenAPI client library builds.
44 |
45 | OpenAPI generic API client. This client handles the client-
46 | server communication, and is invariant across implementations. Specifics of
47 | the methods and models for each application are generated from the OpenAPI
48 | templates.
49 |
50 | NOTE: This class is auto generated by OpenAPI Generator.
51 | Ref: https://openapi-generator.tech
52 | Do not edit the class manually.
53 |
54 | :param configuration: .Configuration object for this client
55 | :param header_name: a header to pass when making calls to the API.
56 | :param header_value: a header value to pass when making calls to
57 | the API.
58 | :param cookie: a cookie to include in the header when making calls
59 | to the API
60 | :param pool_threads: The number of threads to use for async requests
61 | to the API. More threads means more concurrent API requests.
62 | """
63 |
64 | _pool = None
65 |
66 | def __init__(
67 | self,
68 | configuration=None,
69 | header_name=None,
70 | header_value=None,
71 | cookie=None,
72 | pool_threads=1,
73 | ):
74 | if configuration is None:
75 | configuration = Configuration.get_default_copy()
76 | self.configuration = configuration
77 | self.pool_threads = pool_threads
78 |
79 | self.rest_client = rest.RESTClientObject(configuration)
80 | self.default_headers = {}
81 | if header_name is not None:
82 | self.default_headers[header_name] = header_value
83 | self.cookie = cookie
84 | # Set default User-Agent.
85 | self.user_agent = "OpenAPI-Generator/0.1.0/python"
86 |
87 | def __enter__(self):
88 | return self
89 |
90 | def __exit__(self, exc_type, exc_value, traceback):
91 | self.close()
92 |
93 | def close(self):
94 | if self._pool:
95 | self._pool.close()
96 | self._pool.join()
97 | self._pool = None
98 | if hasattr(atexit, "unregister"):
99 | atexit.unregister(self.close)
100 |
101 | @property
102 | def pool(self):
103 | """Create thread pool on first request
104 | avoids instantiating unused threadpool for blocking clients.
105 | """
106 | if self._pool is None:
107 | atexit.register(self.close)
108 | self._pool = ThreadPool(self.pool_threads)
109 | return self._pool
110 |
111 | @property
112 | def user_agent(self):
113 | """User agent for this API client"""
114 | return self.default_headers["User-Agent"]
115 |
116 | @user_agent.setter
117 | def user_agent(self, value):
118 | self.default_headers["User-Agent"] = value
119 |
120 | def set_default_header(self, header_name, header_value):
121 | self.default_headers[header_name] = header_value
122 |
123 | def __call_api(
124 | self,
125 | resource_path: str,
126 | method: str,
127 | path_params: typing.Optional[typing.Dict[str, typing.Any]] = None,
128 | query_params: typing.Optional[
129 | typing.List[typing.Tuple[str, typing.Any]]
130 | ] = None,
131 | header_params: typing.Optional[typing.Dict[str, typing.Any]] = None,
132 | body: typing.Optional[typing.Any] = None,
133 | post_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None,
134 | files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None,
135 | response_type: typing.Optional[typing.Tuple[typing.Any]] = None,
136 | auth_settings: typing.Optional[typing.List[str]] = None,
137 | _return_http_data_only: typing.Optional[bool] = None,
138 | collection_formats: typing.Optional[typing.Dict[str, str]] = None,
139 | _preload_content: bool = True,
140 | _request_timeout: typing.Optional[
141 | typing.Union[int, float, typing.Tuple]
142 | ] = None,
143 | _host: typing.Optional[str] = None,
144 | _check_type: typing.Optional[bool] = None,
145 | _content_type: typing.Optional[str] = None,
146 | _request_auths: typing.Optional[
147 | typing.List[typing.Dict[str, typing.Any]]
148 | ] = None,
149 | ):
150 | config = self.configuration
151 |
152 | # header parameters
153 | header_params = header_params or {}
154 | header_params.update(self.default_headers)
155 | if self.cookie:
156 | header_params["Cookie"] = self.cookie
157 | if header_params:
158 | header_params = self.sanitize_for_serialization(header_params)
159 | header_params = dict(
160 | self.parameters_to_tuples(header_params, collection_formats)
161 | )
162 |
163 | # path parameters
164 | if path_params:
165 | path_params = self.sanitize_for_serialization(path_params)
166 | path_params = self.parameters_to_tuples(path_params, collection_formats)
167 | for k, v in path_params:
168 | # specified safe chars, encode everything
169 | resource_path = resource_path.replace(
170 | "{%s}" % k, quote(str(v), safe=config.safe_chars_for_path_param)
171 | )
172 |
173 | # query parameters
174 | if query_params:
175 | query_params = self.sanitize_for_serialization(query_params)
176 | query_params = self.parameters_to_tuples(query_params, collection_formats)
177 |
178 | # post parameters
179 | if post_params or files:
180 | post_params = post_params if post_params else []
181 | post_params = self.sanitize_for_serialization(post_params)
182 | post_params = self.parameters_to_tuples(post_params, collection_formats)
183 | post_params.extend(self.files_parameters(files))
184 | if header_params["Content-Type"].startswith("multipart"):
185 | post_params = self.parameters_to_multipart(post_params, (dict))
186 |
187 | # body
188 | if body:
189 | body = self.sanitize_for_serialization(body)
190 |
191 | # auth setting
192 | self.update_params_for_auth(
193 | header_params,
194 | query_params,
195 | auth_settings,
196 | resource_path,
197 | method,
198 | body,
199 | request_auths=_request_auths,
200 | )
201 |
202 | # request url
203 | if _host is None:
204 | url = self.configuration.host + resource_path
205 | else:
206 | # use server/host defined in path or operation instead
207 | url = _host + resource_path
208 |
209 | try:
210 | # perform request and return response
211 | response_data = self.request(
212 | method,
213 | url,
214 | query_params=query_params,
215 | headers=header_params,
216 | post_params=post_params,
217 | body=body,
218 | _preload_content=_preload_content,
219 | _request_timeout=_request_timeout,
220 | )
221 | except ApiException as e:
222 | e.body = e.body.decode("utf-8")
223 | raise e
224 |
225 | self.last_response = response_data
226 |
227 | return_data = response_data
228 |
229 | if not _preload_content:
230 | return return_data
231 | return return_data
232 |
233 | # deserialize response data
234 | if response_type:
235 | if response_type != (file_type,):
236 | encoding = "utf-8"
237 | content_type = response_data.getheader("content-type")
238 | if content_type is not None:
239 | match = re.search(r"charset=([a-zA-Z\-\d]+)[\s\;]?", content_type)
240 | if match:
241 | encoding = match.group(1)
242 | response_data.data = response_data.data.decode(encoding)
243 |
244 | return_data = self.deserialize(response_data, response_type, _check_type)
245 | else:
246 | return_data = None
247 |
248 | if _return_http_data_only:
249 | return return_data
250 | else:
251 | return (return_data, response_data.status, response_data.getheaders())
252 |
253 | def parameters_to_multipart(self, params, collection_types):
254 | """Get parameters as list of tuples, formatting as json if value is collection_types
255 |
256 | :param params: Parameters as list of two-tuples
257 | :param dict collection_types: Parameter collection types
258 | :return: Parameters as list of tuple or urllib3.fields.RequestField
259 | """
260 | new_params = []
261 | if collection_types is None:
262 | collection_types = dict
263 | for k, v in (
264 | params.items() if isinstance(params, dict) else params
265 | ): # noqa: E501
266 | if isinstance(
267 | v, collection_types
268 | ): # v is instance of collection_type, formatting as application/json
269 | v = json.dumps(v, ensure_ascii=False).encode("utf-8")
270 | field = RequestField(k, v)
271 | field.make_multipart(content_type="application/json; charset=utf-8")
272 | new_params.append(field)
273 | else:
274 | new_params.append((k, v))
275 | return new_params
276 |
277 | @classmethod
278 | def sanitize_for_serialization(cls, obj):
279 | """Prepares data for transmission before it is sent with the rest client
280 | If obj is None, return None.
281 | If obj is str, int, long, float, bool, return directly.
282 | If obj is datetime.datetime, datetime.date
283 | convert to string in iso8601 format.
284 | If obj is list, sanitize each element in the list.
285 | If obj is dict, return the dict.
286 | If obj is OpenAPI model, return the properties dict.
287 | If obj is io.IOBase, return the bytes
288 | :param obj: The data to serialize.
289 | :return: The serialized form of data.
290 | """
291 | if isinstance(obj, (ModelNormal, ModelComposed)):
292 | return {
293 | key: cls.sanitize_for_serialization(val)
294 | for key, val in model_to_dict(obj, serialize=True).items()
295 | }
296 | elif isinstance(obj, io.IOBase):
297 | return cls.get_file_data_and_close_file(obj)
298 | elif isinstance(obj, (str, int, float, none_type, bool)):
299 | return obj
300 | elif isinstance(obj, (datetime, date)):
301 | return obj.isoformat()
302 | elif isinstance(obj, ModelSimple):
303 | return cls.sanitize_for_serialization(obj.value)
304 | elif isinstance(obj, (list, tuple)):
305 | return [cls.sanitize_for_serialization(item) for item in obj]
306 | if isinstance(obj, dict):
307 | return {
308 | key: cls.sanitize_for_serialization(val) for key, val in obj.items()
309 | }
310 | raise ApiValueError(
311 | "Unable to prepare type {} for serialization".format(obj.__class__.__name__)
312 | )
313 |
314 | def deserialize(self, response, response_type, _check_type):
315 | """Deserializes response into an object.
316 |
317 | :param response: RESTResponse object to be deserialized.
318 | :param response_type: For the response, a tuple containing:
319 | valid classes
320 | a list containing valid classes (for list schemas)
321 | a dict containing a tuple of valid classes as the value
322 | Example values:
323 | (str,)
324 | (Pet,)
325 | (float, none_type)
326 | ([int, none_type],)
327 | ({str: (bool, str, int, float, date, datetime, str, none_type)},)
328 | :param _check_type: boolean, whether to check the types of the data
329 | received from the server
330 | :type _check_type: bool
331 |
332 | :return: deserialized object.
333 | """
334 | # handle file downloading
335 | # save response body into a tmp file and return the instance
336 | if response_type == (file_type,):
337 | content_disposition = response.getheader("Content-Disposition")
338 | return deserialize_file(
339 | response.data,
340 | self.configuration,
341 | content_disposition=content_disposition,
342 | )
343 |
344 | # fetch data from response object
345 | try:
346 | received_data = json.loads(response.data)
347 | except ValueError:
348 | received_data = response.data
349 |
350 | # store our data under the key of 'received_data' so users have some
351 | # context if they are deserializing a string and the data type is wrong
352 | deserialized_data = validate_and_convert_types(
353 | received_data,
354 | response_type,
355 | ["received_data"],
356 | True,
357 | _check_type,
358 | configuration=self.configuration,
359 | )
360 | return deserialized_data
361 |
362 | def call_api(
363 | self,
364 | resource_path: str,
365 | method: str,
366 | path_params: typing.Optional[typing.Dict[str, typing.Any]] = None,
367 | query_params: typing.Optional[
368 | typing.List[typing.Tuple[str, typing.Any]]
369 | ] = None,
370 | header_params: typing.Optional[typing.Dict[str, typing.Any]] = None,
371 | body: typing.Optional[typing.Any] = None,
372 | post_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None,
373 | files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None,
374 | response_type: typing.Optional[typing.Tuple[typing.Any]] = None,
375 | auth_settings: typing.Optional[typing.List[str]] = None,
376 | async_req: typing.Optional[bool] = None,
377 | _return_http_data_only: typing.Optional[bool] = None,
378 | collection_formats: typing.Optional[typing.Dict[str, str]] = None,
379 | _preload_content: bool = True,
380 | _request_timeout: typing.Optional[
381 | typing.Union[int, float, typing.Tuple]
382 | ] = None,
383 | _host: typing.Optional[str] = None,
384 | _check_type: typing.Optional[bool] = None,
385 | _request_auths: typing.Optional[
386 | typing.List[typing.Dict[str, typing.Any]]
387 | ] = None,
388 | ):
389 | """Makes the HTTP request (synchronous) and returns deserialized data.
390 |
391 | To make an async_req request, set the async_req parameter.
392 |
393 | :param resource_path: Path to method endpoint.
394 | :param method: Method to call.
395 | :param path_params: Path parameters in the url.
396 | :param query_params: Query parameters in the url.
397 | :param header_params: Header parameters to be
398 | placed in the request header.
399 | :param body: Request body.
400 | :param post_params dict: Request post form parameters,
401 | for `application/x-www-form-urlencoded`, `multipart/form-data`.
402 | :param auth_settings list: Auth Settings names for the request.
403 | :param response_type: For the response, a tuple containing:
404 | valid classes
405 | a list containing valid classes (for list schemas)
406 | a dict containing a tuple of valid classes as the value
407 | Example values:
408 | (str,)
409 | (Pet,)
410 | (float, none_type)
411 | ([int, none_type],)
412 | ({str: (bool, str, int, float, date, datetime, str, none_type)},)
413 | :param files: key -> field name, value -> a list of open file
414 | objects for `multipart/form-data`.
415 | :type files: dict
416 | :param async_req bool: execute request asynchronously
417 | :type async_req: bool, optional
418 | :param _return_http_data_only: response data without head status code
419 | and headers
420 | :type _return_http_data_only: bool, optional
421 | :param collection_formats: dict of collection formats for path, query,
422 | header, and post parameters.
423 | :type collection_formats: dict, optional
424 | :param _preload_content: if False, the urllib3.HTTPResponse object will
425 | be returned without reading/decoding response
426 | data. Default is True.
427 | :type _preload_content: bool, optional
428 | :param _request_timeout: timeout setting for this request. If one
429 | number provided, it will be total request
430 | timeout. It can also be a pair (tuple) of
431 | (connection, read) timeouts.
432 | :param _check_type: boolean describing if the data back from the server
433 | should have its type checked.
434 | :type _check_type: bool, optional
435 | :param _request_auths: set to override the auth_settings for an a single
436 | request; this effectively ignores the authentication
437 | in the spec for a single request.
438 | :type _request_auths: list, optional
439 | :return:
440 | If async_req parameter is True,
441 | the request will be called asynchronously.
442 | The method will return the request thread.
443 | If parameter async_req is False or missing,
444 | then the method will return the response directly.
445 | """
446 | if not async_req:
447 | return self.__call_api(
448 | resource_path,
449 | method,
450 | path_params,
451 | query_params,
452 | header_params,
453 | body,
454 | post_params,
455 | files,
456 | response_type,
457 | auth_settings,
458 | _return_http_data_only,
459 | collection_formats,
460 | _preload_content,
461 | _request_timeout,
462 | _host,
463 | _check_type,
464 | _request_auths=_request_auths,
465 | )
466 |
467 | return self.pool.apply_async(
468 | self.__call_api,
469 | (
470 | resource_path,
471 | method,
472 | path_params,
473 | query_params,
474 | header_params,
475 | body,
476 | post_params,
477 | files,
478 | response_type,
479 | auth_settings,
480 | _return_http_data_only,
481 | collection_formats,
482 | _preload_content,
483 | _request_timeout,
484 | _host,
485 | _check_type,
486 | None,
487 | _request_auths,
488 | ),
489 | )
490 |
491 | def request(
492 | self,
493 | method,
494 | url,
495 | query_params=None,
496 | headers=None,
497 | post_params=None,
498 | body=None,
499 | _preload_content=True,
500 | _request_timeout=None,
501 | ):
502 | """Makes the HTTP request using RESTClient."""
503 | if method == "GET":
504 | return self.rest_client.GET(
505 | url,
506 | query_params=query_params,
507 | _preload_content=_preload_content,
508 | _request_timeout=_request_timeout,
509 | headers=headers,
510 | )
511 | elif method == "HEAD":
512 | return self.rest_client.HEAD(
513 | url,
514 | query_params=query_params,
515 | _preload_content=_preload_content,
516 | _request_timeout=_request_timeout,
517 | headers=headers,
518 | )
519 | elif method == "OPTIONS":
520 | return self.rest_client.OPTIONS(
521 | url,
522 | query_params=query_params,
523 | headers=headers,
524 | post_params=post_params,
525 | _preload_content=_preload_content,
526 | _request_timeout=_request_timeout,
527 | body=body,
528 | )
529 | elif method == "POST":
530 | return self.rest_client.POST(
531 | url,
532 | query_params=query_params,
533 | headers=headers,
534 | post_params=post_params,
535 | _preload_content=_preload_content,
536 | _request_timeout=_request_timeout,
537 | body=body,
538 | )
539 | elif method == "PUT":
540 | return self.rest_client.PUT(
541 | url,
542 | query_params=query_params,
543 | headers=headers,
544 | post_params=post_params,
545 | _preload_content=_preload_content,
546 | _request_timeout=_request_timeout,
547 | body=body,
548 | )
549 | elif method == "PATCH":
550 | return self.rest_client.PATCH(
551 | url,
552 | query_params=query_params,
553 | headers=headers,
554 | post_params=post_params,
555 | _preload_content=_preload_content,
556 | _request_timeout=_request_timeout,
557 | body=body,
558 | )
559 | elif method == "DELETE":
560 | return self.rest_client.DELETE(
561 | url,
562 | query_params=query_params,
563 | headers=headers,
564 | _preload_content=_preload_content,
565 | _request_timeout=_request_timeout,
566 | body=body,
567 | )
568 | else:
569 | raise ApiValueError(
570 | "http method must be `GET`, `HEAD`, `OPTIONS`,"
571 | " `POST`, `PATCH`, `PUT` or `DELETE`."
572 | )
573 |
574 | def parameters_to_tuples(self, params, collection_formats):
575 | """Get parameters as list of tuples, formatting collections.
576 |
577 | :param params: Parameters as dict or list of two-tuples
578 | :param dict collection_formats: Parameter collection formats
579 | :return: Parameters as list of tuples, collections formatted
580 | """
581 | new_params = []
582 | if collection_formats is None:
583 | collection_formats = {}
584 | for k, v in (
585 | params.items() if isinstance(params, dict) else params
586 | ): # noqa: E501
587 | if k in collection_formats:
588 | collection_format = collection_formats[k]
589 | if collection_format == "multi":
590 | new_params.extend((k, value) for value in v)
591 | else:
592 | if collection_format == "ssv":
593 | delimiter = " "
594 | elif collection_format == "tsv":
595 | delimiter = "\t"
596 | elif collection_format == "pipes":
597 | delimiter = "|"
598 | else: # csv is the default
599 | delimiter = ","
600 | new_params.append((k, delimiter.join(str(value) for value in v)))
601 | else:
602 | new_params.append((k, v))
603 | return new_params
604 |
605 | @staticmethod
606 | def get_file_data_and_close_file(file_instance: io.IOBase) -> bytes:
607 | file_data = file_instance.read()
608 | file_instance.close()
609 | return file_data
610 |
611 | def files_parameters(
612 | self, files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None
613 | ):
614 | """Builds form parameters.
615 |
616 | :param files: None or a dict with key=param_name and
617 | value is a list of open file objects
618 | :return: List of tuples of form parameters with file data
619 | """
620 | if files is None:
621 | return []
622 |
623 | params = []
624 | for param_name, file_instances in files.items():
625 | if file_instances is None:
626 | # if the file field is nullable, skip None values
627 | continue
628 | for file_instance in file_instances:
629 | if file_instance is None:
630 | # if the file field is nullable, skip None values
631 | continue
632 | if file_instance.closed is True:
633 | raise ApiValueError(
634 | "Cannot read a closed file. The passed in file_type "
635 | "for %s must be open." % param_name
636 | )
637 | filename = os.path.basename(file_instance.name)
638 | filedata = self.get_file_data_and_close_file(file_instance)
639 | mimetype = (
640 | mimetypes.guess_type(filename)[0] or "application/octet-stream"
641 | )
642 | params.append(
643 | tuple([param_name, tuple([filename, filedata, mimetype])])
644 | )
645 |
646 | return params
647 |
648 | def select_header_accept(self, accepts):
649 | """Returns `Accept` based on an array of accepts provided.
650 |
651 | :param accepts: List of headers.
652 | :return: Accept (e.g. application/json).
653 | """
654 | if not accepts:
655 | return
656 |
657 | accepts = [x.lower() for x in accepts]
658 |
659 | if "application/json" in accepts:
660 | return "application/json"
661 | else:
662 | return ", ".join(accepts)
663 |
664 | def select_header_content_type(self, content_types, method=None, body=None):
665 | """Returns `Content-Type` based on an array of content_types provided.
666 |
667 | :param content_types: List of content-types.
668 | :param method: http method (e.g. POST, PATCH).
669 | :param body: http body to send.
670 | :return: Content-Type (e.g. application/json).
671 | """
672 | if not content_types:
673 | return None
674 |
675 | content_types = [x.lower() for x in content_types]
676 |
677 | if (
678 | method == "PATCH"
679 | and "application/json-patch+json" in content_types
680 | and isinstance(body, list)
681 | ):
682 | return "application/json-patch+json"
683 |
684 | if "application/json" in content_types or "*/*" in content_types:
685 | return "application/json"
686 | else:
687 | return content_types[0]
688 |
689 | def update_params_for_auth(
690 | self,
691 | headers,
692 | queries,
693 | auth_settings,
694 | resource_path,
695 | method,
696 | body,
697 | request_auths=None,
698 | ):
699 | """Updates header and query params based on authentication setting.
700 |
701 | :param headers: Header parameters dict to be updated.
702 | :param queries: Query parameters tuple list to be updated.
703 | :param auth_settings: Authentication setting identifiers list.
704 | :param resource_path: A string representation of the HTTP request resource path.
705 | :param method: A string representation of the HTTP request method.
706 | :param body: A object representing the body of the HTTP request.
707 | The object type is the return value of _encoder.default().
708 | :param request_auths: if set, the provided settings will
709 | override the token in the configuration.
710 | """
711 | if not auth_settings:
712 | return
713 |
714 | if request_auths:
715 | for auth_setting in request_auths:
716 | self._apply_auth_params(
717 | headers, queries, resource_path, method, body, auth_setting
718 | )
719 | return
720 |
721 | for auth in auth_settings:
722 | auth_setting = self.configuration.auth_settings().get(auth)
723 | if auth_setting:
724 | self._apply_auth_params(
725 | headers, queries, resource_path, method, body, auth_setting
726 | )
727 |
728 | def _apply_auth_params(
729 | self, headers, queries, resource_path, method, body, auth_setting
730 | ):
731 | if auth_setting["in"] == "cookie":
732 | headers["Cookie"] = auth_setting["key"] + "=" + auth_setting["value"]
733 | elif auth_setting["in"] == "header":
734 | if auth_setting["type"] != "http-signature":
735 | headers[auth_setting["key"]] = auth_setting["value"]
736 | elif auth_setting["in"] == "query":
737 | queries.append((auth_setting["key"], auth_setting["value"]))
738 | else:
739 | raise ApiValueError("Authentication token must be in `query` or `header`")
740 |
741 |
742 | class Endpoint(object):
743 | def __init__(
744 | self,
745 | settings=None,
746 | params_map=None,
747 | root_map=None,
748 | headers_map=None,
749 | api_client=None,
750 | callable=None,
751 | ):
752 | """Creates an endpoint
753 |
754 | Args:
755 | settings (dict): see below key value pairs
756 | 'response_type' (tuple/None): response type
757 | 'auth' (list): a list of auth type keys
758 | 'endpoint_path' (str): the endpoint path
759 | 'operation_id' (str): endpoint string identifier
760 | 'http_method' (str): POST/PUT/PATCH/GET etc
761 | 'servers' (list): list of str servers that this endpoint is at
762 | params_map (dict): see below key value pairs
763 | 'all' (list): list of str endpoint parameter names
764 | 'required' (list): list of required parameter names
765 | 'nullable' (list): list of nullable parameter names
766 | 'enum' (list): list of parameters with enum values
767 | 'validation' (list): list of parameters with validations
768 | root_map
769 | 'validations' (dict): the dict mapping endpoint parameter tuple
770 | paths to their validation dictionaries
771 | 'allowed_values' (dict): the dict mapping endpoint parameter
772 | tuple paths to their allowed_values (enum) dictionaries
773 | 'openapi_types' (dict): param_name to openapi type
774 | 'attribute_map' (dict): param_name to camelCase name
775 | 'location_map' (dict): param_name to 'body', 'file', 'form',
776 | 'header', 'path', 'query'
777 | collection_format_map (dict): param_name to `csv` etc.
778 | headers_map (dict): see below key value pairs
779 | 'accept' (list): list of Accept header strings
780 | 'content_type' (list): list of Content-Type header strings
781 | api_client (ApiClient) api client instance
782 | callable (function): the function which is invoked when the
783 | Endpoint is called
784 | """
785 | self.settings = settings
786 | self.params_map = params_map
787 | self.params_map["all"].extend(
788 | [
789 | "async_req",
790 | "_host_index",
791 | "_preload_content",
792 | "_request_timeout",
793 | "_return_http_data_only",
794 | "_check_input_type",
795 | "_check_return_type",
796 | "_content_type",
797 | "_spec_property_naming",
798 | "_request_auths",
799 | ]
800 | )
801 | self.params_map["nullable"].extend(["_request_timeout"])
802 | self.validations = root_map["validations"]
803 | self.allowed_values = root_map["allowed_values"]
804 | self.openapi_types = root_map["openapi_types"]
805 | extra_types = {
806 | "async_req": (bool,),
807 | "_host_index": (none_type, int),
808 | "_preload_content": (bool,),
809 | "_request_timeout": (
810 | none_type,
811 | float,
812 | (float,),
813 | [float],
814 | int,
815 | (int,),
816 | [int],
817 | ),
818 | "_return_http_data_only": (bool,),
819 | "_check_input_type": (bool,),
820 | "_check_return_type": (bool,),
821 | "_spec_property_naming": (bool,),
822 | "_content_type": (none_type, str),
823 | "_request_auths": (none_type, list),
824 | }
825 | self.openapi_types.update(extra_types)
826 | self.attribute_map = root_map["attribute_map"]
827 | self.location_map = root_map["location_map"]
828 | self.collection_format_map = root_map["collection_format_map"]
829 | self.headers_map = headers_map
830 | self.api_client = api_client
831 | self.callable = callable
832 |
833 | def __validate_inputs(self, kwargs):
834 | for param in self.params_map["enum"]:
835 | if param in kwargs:
836 | check_allowed_values(self.allowed_values, (param,), kwargs[param])
837 |
838 | for param in self.params_map["validation"]:
839 | if param in kwargs:
840 | check_validations(
841 | self.validations,
842 | (param,),
843 | kwargs[param],
844 | configuration=self.api_client.configuration,
845 | )
846 |
847 | if kwargs["_check_input_type"] is False:
848 | return
849 |
850 | for key, value in kwargs.items():
851 | fixed_val = validate_and_convert_types(
852 | value,
853 | self.openapi_types[key],
854 | [key],
855 | kwargs["_spec_property_naming"],
856 | kwargs["_check_input_type"],
857 | configuration=self.api_client.configuration,
858 | )
859 | kwargs[key] = fixed_val
860 |
861 | def __gather_params(self, kwargs):
862 | params = {
863 | "body": None,
864 | "collection_format": {},
865 | "file": {},
866 | "form": [],
867 | "header": {},
868 | "path": {},
869 | "query": [],
870 | }
871 |
872 | for param_name, param_value in kwargs.items():
873 | param_location = self.location_map.get(param_name)
874 | if param_location is None:
875 | continue
876 | if param_location:
877 | if param_location == "body":
878 | params["body"] = param_value
879 | continue
880 | base_name = self.attribute_map[param_name]
881 | if param_location == "form" and self.openapi_types[param_name] == (
882 | file_type,
883 | ):
884 | params["file"][base_name] = [param_value]
885 | elif param_location == "form" and self.openapi_types[param_name] == (
886 | [file_type],
887 | ):
888 | # param_value is already a list
889 | params["file"][base_name] = param_value
890 | elif param_location in {"form", "query"}:
891 | param_value_full = (base_name, param_value)
892 | params[param_location].append(param_value_full)
893 | if param_location not in {"form", "query"}:
894 | params[param_location][base_name] = param_value
895 | collection_format = self.collection_format_map.get(param_name)
896 | if collection_format:
897 | params["collection_format"][base_name] = collection_format
898 |
899 | return params
900 |
901 | def __call__(self, *args, **kwargs):
902 | """This method is invoked when endpoints are called
903 | Example:
904 |
905 | api_instance = DefaultApi()
906 | api_instance.chart2result # this is an instance of the class Endpoint
907 | api_instance.chart2result() # this invokes api_instance.chart2result.__call__()
908 | which then invokes the callable functions stored in that endpoint at
909 | api_instance.chart2result.callable or self.callable in this class
910 |
911 | """
912 | return self.callable(self, *args, **kwargs)
913 |
914 | def call_with_http_info(self, **kwargs):
915 | try:
916 | index = (
917 | self.api_client.configuration.server_operation_index.get(
918 | self.settings["operation_id"],
919 | self.api_client.configuration.server_index,
920 | )
921 | if kwargs["_host_index"] is None
922 | else kwargs["_host_index"]
923 | )
924 | server_variables = (
925 | self.api_client.configuration.server_operation_variables.get(
926 | self.settings["operation_id"],
927 | self.api_client.configuration.server_variables,
928 | )
929 | )
930 | _host = self.api_client.configuration.get_host_from_settings(
931 | index, variables=server_variables, servers=self.settings["servers"]
932 | )
933 | except IndexError:
934 | if self.settings["servers"]:
935 | raise ApiValueError(
936 | "Invalid host index. Must be 0 <= index < %s"
937 | % len(self.settings["servers"])
938 | )
939 | _host = None
940 |
941 | for key, value in kwargs.items():
942 | if key not in self.params_map["all"]:
943 | raise ApiTypeError(
944 | "Got an unexpected parameter '%s'"
945 | " to method `%s`" % (key, self.settings["operation_id"])
946 | )
947 | # only throw this nullable ApiValueError if _check_input_type
948 | # is False, if _check_input_type==True we catch this case
949 | # in self.__validate_inputs
950 | if (
951 | key not in self.params_map["nullable"]
952 | and value is None
953 | and kwargs["_check_input_type"] is False
954 | ):
955 | raise ApiValueError(
956 | "Value may not be None for non-nullable parameter `%s`"
957 | " when calling `%s`" % (key, self.settings["operation_id"])
958 | )
959 |
960 | for key in self.params_map["required"]:
961 | if key not in kwargs.keys():
962 | raise ApiValueError(
963 | "Missing the required parameter `%s` when calling "
964 | "`%s`" % (key, self.settings["operation_id"])
965 | )
966 |
967 | self.__validate_inputs(kwargs)
968 |
969 | params = self.__gather_params(kwargs)
970 |
971 | accept_headers_list = self.headers_map["accept"]
972 | if accept_headers_list:
973 | params["header"]["Accept"] = self.api_client.select_header_accept(
974 | accept_headers_list
975 | )
976 |
977 | if kwargs.get("_content_type"):
978 | params["header"]["Content-Type"] = kwargs["_content_type"]
979 | else:
980 | content_type_headers_list = self.headers_map["content_type"]
981 | if content_type_headers_list:
982 | if params["body"] != "":
983 | content_types_list = self.api_client.select_header_content_type(
984 | content_type_headers_list,
985 | self.settings["http_method"],
986 | params["body"],
987 | )
988 | if content_types_list:
989 | params["header"]["Content-Type"] = content_types_list
990 |
991 | return self.api_client.call_api(
992 | self.settings["endpoint_path"],
993 | self.settings["http_method"],
994 | params["path"],
995 | params["query"],
996 | params["header"],
997 | body=params["body"],
998 | post_params=params["form"],
999 | files=params["file"],
1000 | response_type=self.settings["response_type"],
1001 | auth_settings=self.settings["auth"],
1002 | async_req=kwargs["async_req"],
1003 | _check_type=kwargs["_check_return_type"],
1004 | _return_http_data_only=kwargs["_return_http_data_only"],
1005 | _preload_content=kwargs["_preload_content"],
1006 | _request_timeout=kwargs["_request_timeout"],
1007 | _host=_host,
1008 | _request_auths=kwargs["_request_auths"],
1009 | collection_formats=params["collection_format"],
1010 | )
1011 |
--------------------------------------------------------------------------------
/python-client/deutschland/destatis/apis/__init__.py:
--------------------------------------------------------------------------------
1 | # flake8: noqa
2 |
3 | # Import all APIs into this package.
4 | # If you have many APIs here with many many models used in each API this may
5 | # raise a `RecursionError`.
6 | # In order to avoid this, import only the API that you directly need like:
7 | #
8 | # from deutschland.destatis.api.default_api import DefaultApi
9 | #
10 | # or import this package, but before doing it, use:
11 | #
12 | # import sys
13 | # sys.setrecursionlimit(n)
14 |
15 | # Import APIs into API package:
16 | from deutschland.destatis.api.default_api import DefaultApi
17 |
--------------------------------------------------------------------------------
/python-client/deutschland/destatis/configuration.py:
--------------------------------------------------------------------------------
1 | """
2 | Destatis-API
3 |
4 | No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
5 |
6 | The version of the OpenAPI document: 1.0
7 | Contact: kontakt@bund.dev
8 | Generated by: https://openapi-generator.tech
9 | """
10 |
11 |
12 | import copy
13 | import logging
14 | import multiprocessing
15 | import sys
16 | from http import client as http_client
17 |
18 | import urllib3
19 | from deutschland.destatis.exceptions import ApiValueError
20 |
21 | JSON_SCHEMA_VALIDATION_KEYWORDS = {
22 | "multipleOf",
23 | "maximum",
24 | "exclusiveMaximum",
25 | "minimum",
26 | "exclusiveMinimum",
27 | "maxLength",
28 | "minLength",
29 | "pattern",
30 | "maxItems",
31 | "minItems",
32 | }
33 |
34 |
35 | class Configuration(object):
36 | """NOTE: This class is auto generated by OpenAPI Generator
37 |
38 | Ref: https://openapi-generator.tech
39 | Do not edit the class manually.
40 |
41 | :param host: Base url
42 | :param api_key: Dict to store API key(s).
43 | Each entry in the dict specifies an API key.
44 | The dict key is the name of the security scheme in the OAS specification.
45 | The dict value is the API key secret.
46 | :param api_key_prefix: Dict to store API prefix (e.g. Bearer)
47 | The dict key is the name of the security scheme in the OAS specification.
48 | The dict value is an API key prefix when generating the auth data.
49 | :param username: Username for HTTP basic authentication
50 | :param password: Password for HTTP basic authentication
51 | :param discard_unknown_keys: Boolean value indicating whether to discard
52 | unknown properties. A server may send a response that includes additional
53 | properties that are not known by the client in the following scenarios:
54 | 1. The OpenAPI document is incomplete, i.e. it does not match the server
55 | implementation.
56 | 2. The client was generated using an older version of the OpenAPI document
57 | and the server has been upgraded since then.
58 | If a schema in the OpenAPI document defines the additionalProperties attribute,
59 | then all undeclared properties received by the server are injected into the
60 | additional properties map. In that case, there are undeclared properties, and
61 | nothing to discard.
62 | :param disabled_client_side_validations (string): Comma-separated list of
63 | JSON schema validation keywords to disable JSON schema structural validation
64 | rules. The following keywords may be specified: multipleOf, maximum,
65 | exclusiveMaximum, minimum, exclusiveMinimum, maxLength, minLength, pattern,
66 | maxItems, minItems.
67 | By default, the validation is performed for data generated locally by the client
68 | and data received from the server, independent of any validation performed by
69 | the server side. If the input data does not satisfy the JSON schema validation
70 | rules specified in the OpenAPI document, an exception is raised.
71 | If disabled_client_side_validations is set, structural validation is
72 | disabled. This can be useful to troubleshoot data validation problem, such as
73 | when the OpenAPI document validation rules do not match the actual API data
74 | received by the server.
75 | :param server_index: Index to servers configuration.
76 | :param server_variables: Mapping with string values to replace variables in
77 | templated server configuration. The validation of enums is performed for
78 | variables with defined enum values before.
79 | :param server_operation_index: Mapping from operation ID to an index to server
80 | configuration.
81 | :param server_operation_variables: Mapping from operation ID to a mapping with
82 | string values to replace variables in templated server configuration.
83 | The validation of enums is performed for variables with defined enum values before.
84 | :param ssl_ca_cert: str - the path to a file of concatenated CA certificates
85 | in PEM format
86 |
87 | """
88 |
89 | _default = None
90 |
91 | def __init__(
92 | self,
93 | host=None,
94 | api_key=None,
95 | api_key_prefix=None,
96 | access_token=None,
97 | username=None,
98 | password=None,
99 | discard_unknown_keys=False,
100 | disabled_client_side_validations="",
101 | server_index=None,
102 | server_variables=None,
103 | server_operation_index=None,
104 | server_operation_variables=None,
105 | ssl_ca_cert=None,
106 | ):
107 | """Constructor"""
108 | self._base_path = (
109 | "https://www-genesis.destatis.de/genesisWS/rest/2020"
110 | if host is None
111 | else host
112 | )
113 | """Default Base url
114 | """
115 | self.server_index = 0 if server_index is None and host is None else server_index
116 | self.server_operation_index = server_operation_index or {}
117 | """Default server index
118 | """
119 | self.server_variables = server_variables or {}
120 | self.server_operation_variables = server_operation_variables or {}
121 | """Default server variables
122 | """
123 | self.temp_folder_path = None
124 | """Temp file folder for downloading files
125 | """
126 | # Authentication Settings
127 | self.access_token = access_token
128 | self.api_key = {}
129 | if api_key:
130 | self.api_key = api_key
131 | """dict to store API key(s)
132 | """
133 | self.api_key_prefix = {}
134 | if api_key_prefix:
135 | self.api_key_prefix = api_key_prefix
136 | """dict to store API prefix (e.g. Bearer)
137 | """
138 | self.refresh_api_key_hook = None
139 | """function hook to refresh API key if expired
140 | """
141 | self.username = username
142 | """Username for HTTP basic authentication
143 | """
144 | self.password = password
145 | """Password for HTTP basic authentication
146 | """
147 | self.discard_unknown_keys = discard_unknown_keys
148 | self.disabled_client_side_validations = disabled_client_side_validations
149 | self.logger = {}
150 | """Logging Settings
151 | """
152 | self.logger["package_logger"] = logging.getLogger("destatis")
153 | self.logger["urllib3_logger"] = logging.getLogger("urllib3")
154 | self.logger_format = "%(asctime)s %(levelname)s %(message)s"
155 | """Log format
156 | """
157 | self.logger_stream_handler = None
158 | """Log stream handler
159 | """
160 | self.logger_file_handler = None
161 | """Log file handler
162 | """
163 | self.logger_file = None
164 | """Debug file location
165 | """
166 | self.debug = False
167 | """Debug switch
168 | """
169 |
170 | self.verify_ssl = True
171 | """SSL/TLS verification
172 | Set this to false to skip verifying SSL certificate when calling API
173 | from https server.
174 | """
175 | self.ssl_ca_cert = ssl_ca_cert
176 | """Set this to customize the certificate file to verify the peer.
177 | """
178 | self.cert_file = None
179 | """client certificate file
180 | """
181 | self.key_file = None
182 | """client key file
183 | """
184 | self.assert_hostname = None
185 | """Set this to True/False to enable/disable SSL hostname verification.
186 | """
187 |
188 | self.connection_pool_maxsize = multiprocessing.cpu_count() * 5
189 | """urllib3 connection pool's maximum number of connections saved
190 | per pool. urllib3 uses 1 connection as default value, but this is
191 | not the best value when you are making a lot of possibly parallel
192 | requests to the same host, which is often the case here.
193 | cpu_count * 5 is used as default value to increase performance.
194 | """
195 |
196 | self.proxy = None
197 | """Proxy URL
198 | """
199 | self.no_proxy = None
200 | """bypass proxy for host in the no_proxy list.
201 | """
202 | self.proxy_headers = None
203 | """Proxy headers
204 | """
205 | self.safe_chars_for_path_param = ""
206 | """Safe chars for path_param
207 | """
208 | self.retries = None
209 | """Adding retries to override urllib3 default value 3
210 | """
211 | # Enable client side validation
212 | self.client_side_validation = True
213 |
214 | # Options to pass down to the underlying urllib3 socket
215 | self.socket_options = None
216 |
217 | def __deepcopy__(self, memo):
218 | cls = self.__class__
219 | result = cls.__new__(cls)
220 | memo[id(self)] = result
221 | for k, v in self.__dict__.items():
222 | if k not in ("logger", "logger_file_handler"):
223 | setattr(result, k, copy.deepcopy(v, memo))
224 | # shallow copy of loggers
225 | result.logger = copy.copy(self.logger)
226 | # use setters to configure loggers
227 | result.logger_file = self.logger_file
228 | result.debug = self.debug
229 | return result
230 |
231 | def __setattr__(self, name, value):
232 | object.__setattr__(self, name, value)
233 | if name == "disabled_client_side_validations":
234 | s = set(filter(None, value.split(",")))
235 | for v in s:
236 | if v not in JSON_SCHEMA_VALIDATION_KEYWORDS:
237 | raise ApiValueError("Invalid keyword: '{0}''".format(v))
238 | self._disabled_client_side_validations = s
239 |
240 | @classmethod
241 | def set_default(cls, default):
242 | """Set default instance of configuration.
243 |
244 | It stores default configuration, which can be
245 | returned by get_default_copy method.
246 |
247 | :param default: object of Configuration
248 | """
249 | cls._default = copy.deepcopy(default)
250 |
251 | @classmethod
252 | def get_default_copy(cls):
253 | """Return new instance of configuration.
254 |
255 | This method returns newly created, based on default constructor,
256 | object of Configuration class or returns a copy of default
257 | configuration passed by the set_default method.
258 |
259 | :return: The configuration object.
260 | """
261 | if cls._default is not None:
262 | return copy.deepcopy(cls._default)
263 | return Configuration()
264 |
265 | @property
266 | def logger_file(self):
267 | """The logger file.
268 |
269 | If the logger_file is None, then add stream handler and remove file
270 | handler. Otherwise, add file handler and remove stream handler.
271 |
272 | :param value: The logger_file path.
273 | :type: str
274 | """
275 | return self.__logger_file
276 |
277 | @logger_file.setter
278 | def logger_file(self, value):
279 | """The logger file.
280 |
281 | If the logger_file is None, then add stream handler and remove file
282 | handler. Otherwise, add file handler and remove stream handler.
283 |
284 | :param value: The logger_file path.
285 | :type: str
286 | """
287 | self.__logger_file = value
288 | if self.__logger_file:
289 | # If set logging file,
290 | # then add file handler and remove stream handler.
291 | self.logger_file_handler = logging.FileHandler(self.__logger_file)
292 | self.logger_file_handler.setFormatter(self.logger_formatter)
293 | for _, logger in self.logger.items():
294 | logger.addHandler(self.logger_file_handler)
295 |
296 | @property
297 | def debug(self):
298 | """Debug status
299 |
300 | :param value: The debug status, True or False.
301 | :type: bool
302 | """
303 | return self.__debug
304 |
305 | @debug.setter
306 | def debug(self, value):
307 | """Debug status
308 |
309 | :param value: The debug status, True or False.
310 | :type: bool
311 | """
312 | self.__debug = value
313 | if self.__debug:
314 | # if debug status is True, turn on debug logging
315 | for _, logger in self.logger.items():
316 | logger.setLevel(logging.DEBUG)
317 | # turn on http_client debug
318 | http_client.HTTPConnection.debuglevel = 1
319 | else:
320 | # if debug status is False, turn off debug logging,
321 | # setting log level to default `logging.WARNING`
322 | for _, logger in self.logger.items():
323 | logger.setLevel(logging.WARNING)
324 | # turn off http_client debug
325 | http_client.HTTPConnection.debuglevel = 0
326 |
327 | @property
328 | def logger_format(self):
329 | """The logger format.
330 |
331 | The logger_formatter will be updated when sets logger_format.
332 |
333 | :param value: The format string.
334 | :type: str
335 | """
336 | return self.__logger_format
337 |
338 | @logger_format.setter
339 | def logger_format(self, value):
340 | """The logger format.
341 |
342 | The logger_formatter will be updated when sets logger_format.
343 |
344 | :param value: The format string.
345 | :type: str
346 | """
347 | self.__logger_format = value
348 | self.logger_formatter = logging.Formatter(self.__logger_format)
349 |
350 | def get_api_key_with_prefix(self, identifier, alias=None):
351 | """Gets API key (with prefix if set).
352 |
353 | :param identifier: The identifier of apiKey.
354 | :param alias: The alternative identifier of apiKey.
355 | :return: The token for api key authentication.
356 | """
357 | if self.refresh_api_key_hook is not None:
358 | self.refresh_api_key_hook(self)
359 | key = self.api_key.get(
360 | identifier, self.api_key.get(alias) if alias is not None else None
361 | )
362 | if key:
363 | prefix = self.api_key_prefix.get(identifier)
364 | if prefix:
365 | return "%s %s" % (prefix, key)
366 | else:
367 | return key
368 |
369 | def get_basic_auth_token(self):
370 | """Gets HTTP basic authentication header (string).
371 |
372 | :return: The token for basic HTTP authentication.
373 | """
374 | username = ""
375 | if self.username is not None:
376 | username = self.username
377 | password = ""
378 | if self.password is not None:
379 | password = self.password
380 | return urllib3.util.make_headers(basic_auth=username + ":" + password).get(
381 | "authorization"
382 | )
383 |
384 | def auth_settings(self):
385 | """Gets Auth Settings dict for api client.
386 |
387 | :return: The Auth Settings information dict.
388 | """
389 | auth = {}
390 | return auth
391 |
392 | def to_debug_report(self):
393 | """Gets the essential information for debugging.
394 |
395 | :return: The report for debugging.
396 | """
397 | return (
398 | "Python SDK Debug Report:\n"
399 | "OS: {env}\n"
400 | "Python Version: {pyversion}\n"
401 | "Version of the API: 1.0\n"
402 | "SDK Package Version: 0.1.0".format(env=sys.platform, pyversion=sys.version)
403 | )
404 |
405 | def get_host_settings(self):
406 | """Gets an array of host settings
407 |
408 | :return: An array of host settings
409 | """
410 | return [
411 | {
412 | "url": "https://www-genesis.destatis.de/genesisWS/rest/2020",
413 | "description": "No description provided",
414 | }
415 | ]
416 |
417 | def get_host_from_settings(self, index, variables=None, servers=None):
418 | """Gets host URL based on the index and variables
419 | :param index: array index of the host settings
420 | :param variables: hash of variable and the corresponding value
421 | :param servers: an array of host settings or None
422 | :return: URL based on host settings
423 | """
424 | if index is None:
425 | return self._base_path
426 |
427 | variables = {} if variables is None else variables
428 | servers = self.get_host_settings() if servers is None else servers
429 |
430 | try:
431 | server = servers[index]
432 | except IndexError:
433 | raise ValueError(
434 | "Invalid index {0} when selecting the host settings. "
435 | "Must be less than {1}".format(index, len(servers))
436 | )
437 |
438 | url = server["url"]
439 |
440 | # go through variables and replace placeholders
441 | for variable_name, variable in server.get("variables", {}).items():
442 | used_value = variables.get(variable_name, variable["default_value"])
443 |
444 | if "enum_values" in variable and used_value not in variable["enum_values"]:
445 | raise ValueError(
446 | "The variable `{0}` in the host URL has invalid value "
447 | "{1}. Must be {2}.".format(
448 | variable_name, variables[variable_name], variable["enum_values"]
449 | )
450 | )
451 |
452 | url = url.replace("{" + variable_name + "}", used_value)
453 |
454 | return url
455 |
456 | @property
457 | def host(self):
458 | """Return generated host."""
459 | return self.get_host_from_settings(
460 | self.server_index, variables=self.server_variables
461 | )
462 |
463 | @host.setter
464 | def host(self, value):
465 | """Fix base path."""
466 | self._base_path = value
467 | self.server_index = None
468 |
--------------------------------------------------------------------------------
/python-client/deutschland/destatis/exceptions.py:
--------------------------------------------------------------------------------
1 | """
2 | Destatis-API
3 |
4 | No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
5 |
6 | The version of the OpenAPI document: 1.0
7 | Contact: kontakt@bund.dev
8 | Generated by: https://openapi-generator.tech
9 | """
10 |
11 |
12 | class OpenApiException(Exception):
13 | """The base exception class for all OpenAPIExceptions"""
14 |
15 |
16 | class ApiTypeError(OpenApiException, TypeError):
17 | def __init__(self, msg, path_to_item=None, valid_classes=None, key_type=None):
18 | """Raises an exception for TypeErrors
19 |
20 | Args:
21 | msg (str): the exception message
22 |
23 | Keyword Args:
24 | path_to_item (list): a list of keys an indices to get to the
25 | current_item
26 | None if unset
27 | valid_classes (tuple): the primitive classes that current item
28 | should be an instance of
29 | None if unset
30 | key_type (bool): False if our value is a value in a dict
31 | True if it is a key in a dict
32 | False if our item is an item in a list
33 | None if unset
34 | """
35 | self.path_to_item = path_to_item
36 | self.valid_classes = valid_classes
37 | self.key_type = key_type
38 | full_msg = msg
39 | if path_to_item:
40 | full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
41 | super(ApiTypeError, self).__init__(full_msg)
42 |
43 |
44 | class ApiValueError(OpenApiException, ValueError):
45 | def __init__(self, msg, path_to_item=None):
46 | """
47 | Args:
48 | msg (str): the exception message
49 |
50 | Keyword Args:
51 | path_to_item (list) the path to the exception in the
52 | received_data dict. None if unset
53 | """
54 |
55 | self.path_to_item = path_to_item
56 | full_msg = msg
57 | if path_to_item:
58 | full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
59 | super(ApiValueError, self).__init__(full_msg)
60 |
61 |
62 | class ApiAttributeError(OpenApiException, AttributeError):
63 | def __init__(self, msg, path_to_item=None):
64 | """
65 | Raised when an attribute reference or assignment fails.
66 |
67 | Args:
68 | msg (str): the exception message
69 |
70 | Keyword Args:
71 | path_to_item (None/list) the path to the exception in the
72 | received_data dict
73 | """
74 | self.path_to_item = path_to_item
75 | full_msg = msg
76 | if path_to_item:
77 | full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
78 | super(ApiAttributeError, self).__init__(full_msg)
79 |
80 |
81 | class ApiKeyError(OpenApiException, KeyError):
82 | def __init__(self, msg, path_to_item=None):
83 | """
84 | Args:
85 | msg (str): the exception message
86 |
87 | Keyword Args:
88 | path_to_item (None/list) the path to the exception in the
89 | received_data dict
90 | """
91 | self.path_to_item = path_to_item
92 | full_msg = msg
93 | if path_to_item:
94 | full_msg = "{0} at {1}".format(msg, render_path(path_to_item))
95 | super(ApiKeyError, self).__init__(full_msg)
96 |
97 |
98 | class ApiException(OpenApiException):
99 | def __init__(self, status=None, reason=None, http_resp=None):
100 | if http_resp:
101 | self.status = http_resp.status
102 | self.reason = http_resp.reason
103 | self.body = http_resp.data
104 | self.headers = http_resp.getheaders()
105 | else:
106 | self.status = status
107 | self.reason = reason
108 | self.body = None
109 | self.headers = None
110 |
111 | def __str__(self):
112 | """Custom error messages for exception"""
113 | error_message = "Status Code: {0}\n" "Reason: {1}\n".format(
114 | self.status, self.reason
115 | )
116 | if self.headers:
117 | error_message += "HTTP response headers: {0}\n".format(self.headers)
118 |
119 | if self.body:
120 | error_message += "HTTP response body: {0}\n".format(self.body)
121 |
122 | return error_message
123 |
124 |
125 | class NotFoundException(ApiException):
126 | def __init__(self, status=None, reason=None, http_resp=None):
127 | super(NotFoundException, self).__init__(status, reason, http_resp)
128 |
129 |
130 | class UnauthorizedException(ApiException):
131 | def __init__(self, status=None, reason=None, http_resp=None):
132 | super(UnauthorizedException, self).__init__(status, reason, http_resp)
133 |
134 |
135 | class ForbiddenException(ApiException):
136 | def __init__(self, status=None, reason=None, http_resp=None):
137 | super(ForbiddenException, self).__init__(status, reason, http_resp)
138 |
139 |
140 | class ServiceException(ApiException):
141 | def __init__(self, status=None, reason=None, http_resp=None):
142 | super(ServiceException, self).__init__(status, reason, http_resp)
143 |
144 |
145 | def render_path(path_to_item):
146 | """Returns a string representation of a path"""
147 | result = ""
148 | for pth in path_to_item:
149 | if isinstance(pth, int):
150 | result += "[{0}]".format(pth)
151 | else:
152 | result += "['{0}']".format(pth)
153 | return result
154 |
--------------------------------------------------------------------------------
/python-client/deutschland/destatis/model/__init__.py:
--------------------------------------------------------------------------------
1 | # we can not import model classes here because that would create a circular
2 | # reference which would not work in python2
3 | # do not import all models into this module because that uses a lot of memory and stack frames
4 | # if you need the ability to import all models from one package, import them with
5 | # from deutschland.destatis.models import ModelA, ModelB
6 |
--------------------------------------------------------------------------------
/python-client/deutschland/destatis/models/__init__.py:
--------------------------------------------------------------------------------
1 | # flake8: noqa
2 |
3 | # import all models into this package
4 | # if you have many models here with many references from one model to another this may
5 | # raise a RecursionError
6 | # to avoid this, import only the models that you directly need like:
7 | # from from deutschland.destatis.model.pet import Pet
8 | # or import this package, but before doing it, use:
9 | # import sys
10 | # sys.setrecursionlimit(n)
11 |
--------------------------------------------------------------------------------
/python-client/deutschland/destatis/rest.py:
--------------------------------------------------------------------------------
1 | """
2 | Destatis-API
3 |
4 | No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
5 |
6 | The version of the OpenAPI document: 1.0
7 | Contact: kontakt@bund.dev
8 | Generated by: https://openapi-generator.tech
9 | """
10 |
11 |
12 | import io
13 | import ipaddress
14 | import json
15 | import logging
16 | import re
17 | import ssl
18 | from urllib.parse import urlencode, urlparse
19 | from urllib.request import proxy_bypass_environment
20 |
21 | import urllib3
22 | from deutschland.destatis.exceptions import (
23 | ApiException,
24 | ApiValueError,
25 | ForbiddenException,
26 | NotFoundException,
27 | ServiceException,
28 | UnauthorizedException,
29 | )
30 |
31 | logger = logging.getLogger(__name__)
32 |
33 |
34 | class RESTResponse(io.IOBase):
35 | def __init__(self, resp):
36 | self.urllib3_response = resp
37 | self.status = resp.status
38 | self.reason = resp.reason
39 | self.data = resp.data
40 |
41 | def getheaders(self):
42 | """Returns a dictionary of the response headers."""
43 | return self.urllib3_response.getheaders()
44 |
45 | def getheader(self, name, default=None):
46 | """Returns a given response header."""
47 | return self.urllib3_response.getheader(name, default)
48 |
49 |
50 | class RESTClientObject(object):
51 | def __init__(self, configuration, pools_size=4, maxsize=None):
52 | # urllib3.PoolManager will pass all kw parameters to connectionpool
53 | # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501
54 | # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501
55 | # maxsize is the number of requests to host that are allowed in parallel # noqa: E501
56 | # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501
57 |
58 | # cert_reqs
59 | if configuration.verify_ssl:
60 | cert_reqs = ssl.CERT_REQUIRED
61 | else:
62 | cert_reqs = ssl.CERT_NONE
63 |
64 | addition_pool_args = {}
65 | if configuration.assert_hostname is not None:
66 | addition_pool_args[
67 | "assert_hostname"
68 | ] = configuration.assert_hostname # noqa: E501
69 |
70 | if configuration.retries is not None:
71 | addition_pool_args["retries"] = configuration.retries
72 |
73 | if configuration.socket_options is not None:
74 | addition_pool_args["socket_options"] = configuration.socket_options
75 |
76 | if maxsize is None:
77 | if configuration.connection_pool_maxsize is not None:
78 | maxsize = configuration.connection_pool_maxsize
79 | else:
80 | maxsize = 4
81 |
82 | # https pool manager
83 | if configuration.proxy and not should_bypass_proxies(
84 | configuration.host, no_proxy=configuration.no_proxy or ""
85 | ):
86 | self.pool_manager = urllib3.ProxyManager(
87 | num_pools=pools_size,
88 | maxsize=maxsize,
89 | cert_reqs=cert_reqs,
90 | ca_certs=configuration.ssl_ca_cert,
91 | cert_file=configuration.cert_file,
92 | key_file=configuration.key_file,
93 | proxy_url=configuration.proxy,
94 | proxy_headers=configuration.proxy_headers,
95 | **addition_pool_args
96 | )
97 | else:
98 | self.pool_manager = urllib3.PoolManager(
99 | num_pools=pools_size,
100 | maxsize=maxsize,
101 | cert_reqs=cert_reqs,
102 | ca_certs=configuration.ssl_ca_cert,
103 | cert_file=configuration.cert_file,
104 | key_file=configuration.key_file,
105 | **addition_pool_args
106 | )
107 |
108 | def request(
109 | self,
110 | method,
111 | url,
112 | query_params=None,
113 | headers=None,
114 | body=None,
115 | post_params=None,
116 | _preload_content=True,
117 | _request_timeout=None,
118 | ):
119 | """Perform requests.
120 |
121 | :param method: http request method
122 | :param url: http request url
123 | :param query_params: query parameters in the url
124 | :param headers: http request headers
125 | :param body: request json body, for `application/json`
126 | :param post_params: request post parameters,
127 | `application/x-www-form-urlencoded`
128 | and `multipart/form-data`
129 | :param _preload_content: if False, the urllib3.HTTPResponse object will
130 | be returned without reading/decoding response
131 | data. Default is True.
132 | :param _request_timeout: timeout setting for this request. If one
133 | number provided, it will be total request
134 | timeout. It can also be a pair (tuple) of
135 | (connection, read) timeouts.
136 | """
137 | method = method.upper()
138 | assert method in ["GET", "HEAD", "DELETE", "POST", "PUT", "PATCH", "OPTIONS"]
139 |
140 | if post_params and body:
141 | raise ApiValueError(
142 | "body parameter cannot be used with post_params parameter."
143 | )
144 |
145 | post_params = post_params or {}
146 | headers = headers or {}
147 |
148 | timeout = None
149 | if _request_timeout:
150 | if isinstance(_request_timeout, (int, float)): # noqa: E501,F821
151 | timeout = urllib3.Timeout(total=_request_timeout)
152 | elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2:
153 | timeout = urllib3.Timeout(
154 | connect=_request_timeout[0], read=_request_timeout[1]
155 | )
156 |
157 | try:
158 | # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
159 | if method in ["POST", "PUT", "PATCH", "OPTIONS", "DELETE"]:
160 | # Only set a default Content-Type for POST, PUT, PATCH and OPTIONS requests
161 | if (method != "DELETE") and ("Content-Type" not in headers):
162 | headers["Content-Type"] = "application/json"
163 | if query_params:
164 | url += "?" + urlencode(query_params)
165 | if ("Content-Type" not in headers) or (
166 | re.search("json", headers["Content-Type"], re.IGNORECASE)
167 | ):
168 | request_body = None
169 | if body is not None:
170 | request_body = json.dumps(body)
171 | r = self.pool_manager.request(
172 | method,
173 | url,
174 | body=request_body,
175 | preload_content=_preload_content,
176 | timeout=timeout,
177 | headers=headers,
178 | )
179 | elif (
180 | headers["Content-Type"] == "application/x-www-form-urlencoded"
181 | ): # noqa: E501
182 | r = self.pool_manager.request(
183 | method,
184 | url,
185 | fields=post_params,
186 | encode_multipart=False,
187 | preload_content=_preload_content,
188 | timeout=timeout,
189 | headers=headers,
190 | )
191 | elif headers["Content-Type"] == "multipart/form-data":
192 | # must del headers['Content-Type'], or the correct
193 | # Content-Type which generated by urllib3 will be
194 | # overwritten.
195 | del headers["Content-Type"]
196 | r = self.pool_manager.request(
197 | method,
198 | url,
199 | fields=post_params,
200 | encode_multipart=True,
201 | preload_content=_preload_content,
202 | timeout=timeout,
203 | headers=headers,
204 | )
205 | # Pass a `string` parameter directly in the body to support
206 | # other content types than Json when `body` argument is
207 | # provided in serialized form
208 | elif isinstance(body, str) or isinstance(body, bytes):
209 | request_body = body
210 | r = self.pool_manager.request(
211 | method,
212 | url,
213 | body=request_body,
214 | preload_content=_preload_content,
215 | timeout=timeout,
216 | headers=headers,
217 | )
218 | else:
219 | # Cannot generate the request from given parameters
220 | msg = """Cannot prepare a request message for provided
221 | arguments. Please check that your arguments match
222 | declared content type."""
223 | raise ApiException(status=0, reason=msg)
224 | # For `GET`, `HEAD`
225 | else:
226 | r = self.pool_manager.request(
227 | method,
228 | url,
229 | fields=query_params,
230 | preload_content=_preload_content,
231 | timeout=timeout,
232 | headers=headers,
233 | )
234 | except urllib3.exceptions.SSLError as e:
235 | msg = "{0}\n{1}".format(type(e).__name__, str(e))
236 | raise ApiException(status=0, reason=msg)
237 |
238 | if _preload_content:
239 | r = RESTResponse(r)
240 |
241 | # log response body
242 | logger.debug("response body: %s", r.data)
243 |
244 | if not 200 <= r.status <= 299:
245 | if r.status == 401:
246 | raise UnauthorizedException(http_resp=r)
247 |
248 | if r.status == 403:
249 | raise ForbiddenException(http_resp=r)
250 |
251 | if r.status == 404:
252 | raise NotFoundException(http_resp=r)
253 |
254 | if 500 <= r.status <= 599:
255 | raise ServiceException(http_resp=r)
256 |
257 | raise ApiException(http_resp=r)
258 |
259 | return r
260 |
261 | def GET(
262 | self,
263 | url,
264 | headers=None,
265 | query_params=None,
266 | _preload_content=True,
267 | _request_timeout=None,
268 | ):
269 | return self.request(
270 | "GET",
271 | url,
272 | headers=headers,
273 | _preload_content=_preload_content,
274 | _request_timeout=_request_timeout,
275 | query_params=query_params,
276 | )
277 |
278 | def HEAD(
279 | self,
280 | url,
281 | headers=None,
282 | query_params=None,
283 | _preload_content=True,
284 | _request_timeout=None,
285 | ):
286 | return self.request(
287 | "HEAD",
288 | url,
289 | headers=headers,
290 | _preload_content=_preload_content,
291 | _request_timeout=_request_timeout,
292 | query_params=query_params,
293 | )
294 |
295 | def OPTIONS(
296 | self,
297 | url,
298 | headers=None,
299 | query_params=None,
300 | post_params=None,
301 | body=None,
302 | _preload_content=True,
303 | _request_timeout=None,
304 | ):
305 | return self.request(
306 | "OPTIONS",
307 | url,
308 | headers=headers,
309 | query_params=query_params,
310 | post_params=post_params,
311 | _preload_content=_preload_content,
312 | _request_timeout=_request_timeout,
313 | body=body,
314 | )
315 |
316 | def DELETE(
317 | self,
318 | url,
319 | headers=None,
320 | query_params=None,
321 | body=None,
322 | _preload_content=True,
323 | _request_timeout=None,
324 | ):
325 | return self.request(
326 | "DELETE",
327 | url,
328 | headers=headers,
329 | query_params=query_params,
330 | _preload_content=_preload_content,
331 | _request_timeout=_request_timeout,
332 | body=body,
333 | )
334 |
335 | def POST(
336 | self,
337 | url,
338 | headers=None,
339 | query_params=None,
340 | post_params=None,
341 | body=None,
342 | _preload_content=True,
343 | _request_timeout=None,
344 | ):
345 | return self.request(
346 | "POST",
347 | url,
348 | headers=headers,
349 | query_params=query_params,
350 | post_params=post_params,
351 | _preload_content=_preload_content,
352 | _request_timeout=_request_timeout,
353 | body=body,
354 | )
355 |
356 | def PUT(
357 | self,
358 | url,
359 | headers=None,
360 | query_params=None,
361 | post_params=None,
362 | body=None,
363 | _preload_content=True,
364 | _request_timeout=None,
365 | ):
366 | return self.request(
367 | "PUT",
368 | url,
369 | headers=headers,
370 | query_params=query_params,
371 | post_params=post_params,
372 | _preload_content=_preload_content,
373 | _request_timeout=_request_timeout,
374 | body=body,
375 | )
376 |
377 | def PATCH(
378 | self,
379 | url,
380 | headers=None,
381 | query_params=None,
382 | post_params=None,
383 | body=None,
384 | _preload_content=True,
385 | _request_timeout=None,
386 | ):
387 | return self.request(
388 | "PATCH",
389 | url,
390 | headers=headers,
391 | query_params=query_params,
392 | post_params=post_params,
393 | _preload_content=_preload_content,
394 | _request_timeout=_request_timeout,
395 | body=body,
396 | )
397 |
398 |
399 | # end of class RESTClientObject
400 |
401 |
402 | def is_ipv4(target):
403 | """Test if IPv4 address or not"""
404 | try:
405 | chk = ipaddress.IPv4Address(target)
406 | return True
407 | except ipaddress.AddressValueError:
408 | return False
409 |
410 |
411 | def in_ipv4net(target, net):
412 | """Test if target belongs to given IPv4 network"""
413 | try:
414 | nw = ipaddress.IPv4Network(net)
415 | ip = ipaddress.IPv4Address(target)
416 | if ip in nw:
417 | return True
418 | return False
419 | except ipaddress.AddressValueError:
420 | return False
421 | except ipaddress.NetmaskValueError:
422 | return False
423 |
424 |
425 | def should_bypass_proxies(url, no_proxy=None):
426 | """Yet another requests.should_bypass_proxies
427 | Test if proxies should not be used for a particular url.
428 | """
429 |
430 | parsed = urlparse(url)
431 |
432 | # special cases
433 | if parsed.hostname in [None, ""]:
434 | return True
435 |
436 | # special cases
437 | if no_proxy in [None, ""]:
438 | return False
439 | if no_proxy == "*":
440 | return True
441 |
442 | no_proxy = no_proxy.lower().replace(" ", "")
443 | entries = (host for host in no_proxy.split(",") if host)
444 |
445 | if is_ipv4(parsed.hostname):
446 | for item in entries:
447 | if in_ipv4net(parsed.hostname, item):
448 | return True
449 | return proxy_bypass_environment(parsed.hostname, {"no": no_proxy})
450 |
--------------------------------------------------------------------------------
/python-client/pyproject.toml:
--------------------------------------------------------------------------------
1 | [tool]
2 | [tool.poetry]
3 | name = "de-destatis"
4 | version = "0.1.0"
5 | description = "Destatis-API"
6 | keywords = ["OpenAPI", "OpenAPI-Generator", "destatis", "App", "API"]
7 | homepage = "https://github.com/bundesAPI/destatis-api"
8 | authors = ["BundesAPI "]
9 | packages = [
10 | { include = "deutschland"}
11 | ]
12 | license = "Apache-2.0"
13 | readme = "README.md"
14 |
15 | [tool.poetry.dependencies]
16 | python = ">=3.6"
17 | python-dateutil = "*"
18 | urllib3 = ">=1.25.3"
19 |
20 | [tool.poetry.urls]
21 | "Bug Tracker" = "https://github.com/bundesAPI/destatis-api/issues"
22 |
23 | [tool.poetry.dev-dependencies]
24 | black = "^21.7b0"
25 | pytest = "^6.2.4"
26 |
27 |
28 | [build-system]
29 | requires = ["poetry-core>=1.0.0"]
30 | build-backend = "poetry.core.masonry.api"
31 |
32 |
--------------------------------------------------------------------------------
/python-client/requirements.txt:
--------------------------------------------------------------------------------
1 | python_dateutil >= 2.5.3
2 | setuptools >= 59.0.0
3 | urllib3 >= 1.25.3
4 |
--------------------------------------------------------------------------------
/python-client/sphinx-docs/Makefile:
--------------------------------------------------------------------------------
1 | # Minimal makefile for Sphinx documentation
2 | #
3 |
4 | # You can set these variables from the command line, and also
5 | # from the environment for the first two.
6 | SPHINXOPTS ?=
7 | SPHINXBUILD ?= sphinx-build
8 | SOURCEDIR = .
9 | BUILDDIR = _build
10 |
11 | # Put it first so that "make" without argument is like "make help".
12 | help:
13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14 |
15 | .PHONY: help Makefile
16 |
17 | # Catch-all target: route all unknown targets to Sphinx using the new
18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19 | %: Makefile
20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
21 |
--------------------------------------------------------------------------------
/python-client/sphinx-docs/conf.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 |
4 | sys.path.insert(0, os.path.abspath("../"))
5 | # Configuration file for the Sphinx documentation builder.
6 | #
7 | # For the full list of built-in configuration values, see the documentation:
8 | # https://www.sphinx-doc.org/en/master/usage/configuration.html
9 |
10 | # -- Project information -----------------------------------------------------
11 | # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
12 |
13 | project = "destatis-api"
14 | copyright = "2023, BundesAPI"
15 | author = "BundesAPI"
16 |
17 | version = "0.1.0"
18 | release = "0.1.0"
19 |
20 | # -- General configuration ---------------------------------------------------
21 | # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
22 |
23 | extensions = [
24 | "m2r2",
25 | "sphinx.ext.autodoc",
26 | "sphinx.ext.napoleon",
27 | "sphinx.ext.autosummary",
28 | ]
29 |
30 | templates_path = ["_templates"]
31 | exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
32 |
33 | language = "de"
34 |
35 | # -- Options for HTML output -------------------------------------------------
36 | # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
37 |
38 | html_theme = "alabaster"
39 | html_static_path = ["_static"]
40 |
41 | source_extensions = [".rst", ".md"]
42 |
--------------------------------------------------------------------------------
/python-client/sphinx-docs/index.rst:
--------------------------------------------------------------------------------
1 | destatis-api Documentation
2 | ==========================
3 |
4 | .. toctree::
5 | :glob:
6 |
7 | source/*
8 |
--------------------------------------------------------------------------------
/python-client/sphinx-docs/make.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | pushd %~dp0
4 |
5 | REM Command file for Sphinx documentation
6 |
7 | if "%SPHINXBUILD%" == "" (
8 | set SPHINXBUILD=sphinx-build
9 | )
10 | set SOURCEDIR=.
11 | set BUILDDIR=_build
12 |
13 | %SPHINXBUILD% >NUL 2>NUL
14 | if errorlevel 9009 (
15 | echo.
16 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
17 | echo.installed, then set the SPHINXBUILD environment variable to point
18 | echo.to the full path of the 'sphinx-build' executable. Alternatively you
19 | echo.may add the Sphinx directory to PATH.
20 | echo.
21 | echo.If you don't have Sphinx installed, grab it from
22 | echo.https://www.sphinx-doc.org/
23 | exit /b 1
24 | )
25 |
26 | if "%1" == "" goto help
27 |
28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29 | goto end
30 |
31 | :help
32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33 |
34 | :end
35 | popd
36 |
--------------------------------------------------------------------------------
/python-client/sphinx-docs/source/destatis.api.rst:
--------------------------------------------------------------------------------
1 | destatis.api package
2 | ====================
3 |
4 | Submodules
5 | ----------
6 |
7 | destatis.api.default\_api module
8 | --------------------------------
9 |
10 | .. automodule:: destatis.api.default_api
11 | :members:
12 | :undoc-members:
13 | :show-inheritance:
14 |
15 | Module contents
16 | ---------------
17 |
18 | .. automodule:: destatis.api
19 | :members:
20 | :undoc-members:
21 | :show-inheritance:
22 |
--------------------------------------------------------------------------------
/python-client/sphinx-docs/source/destatis.apis.rst:
--------------------------------------------------------------------------------
1 | destatis.apis package
2 | =====================
3 |
4 | Module contents
5 | ---------------
6 |
7 | .. automodule:: destatis.apis
8 | :members:
9 | :undoc-members:
10 | :show-inheritance:
11 |
--------------------------------------------------------------------------------
/python-client/sphinx-docs/source/destatis.model.rst:
--------------------------------------------------------------------------------
1 | destatis.model package
2 | ======================
3 |
4 | Module contents
5 | ---------------
6 |
7 | .. automodule:: destatis.model
8 | :members:
9 | :undoc-members:
10 | :show-inheritance:
11 |
--------------------------------------------------------------------------------
/python-client/sphinx-docs/source/destatis.models.rst:
--------------------------------------------------------------------------------
1 | destatis.models package
2 | =======================
3 |
4 | Module contents
5 | ---------------
6 |
7 | .. automodule:: destatis.models
8 | :members:
9 | :undoc-members:
10 | :show-inheritance:
11 |
--------------------------------------------------------------------------------
/python-client/sphinx-docs/source/destatis.rst:
--------------------------------------------------------------------------------
1 | destatis package
2 | ================
3 |
4 | Subpackages
5 | -----------
6 |
7 | .. toctree::
8 | :maxdepth: 4
9 |
10 | destatis.api
11 | destatis.apis
12 | destatis.model
13 | destatis.models
14 |
15 | Submodules
16 | ----------
17 |
18 | destatis.api\_client module
19 | ---------------------------
20 |
21 | .. automodule:: destatis.api_client
22 | :members:
23 | :undoc-members:
24 | :show-inheritance:
25 |
26 | destatis.configuration module
27 | -----------------------------
28 |
29 | .. automodule:: destatis.configuration
30 | :members:
31 | :undoc-members:
32 | :show-inheritance:
33 |
34 | destatis.exceptions module
35 | --------------------------
36 |
37 | .. automodule:: destatis.exceptions
38 | :members:
39 | :undoc-members:
40 | :show-inheritance:
41 |
42 | destatis.model\_utils module
43 | ----------------------------
44 |
45 | .. automodule:: destatis.model_utils
46 | :members:
47 | :undoc-members:
48 | :show-inheritance:
49 |
50 | destatis.rest module
51 | --------------------
52 |
53 | .. automodule:: destatis.rest
54 | :members:
55 | :undoc-members:
56 | :show-inheritance:
57 |
58 | Module contents
59 | ---------------
60 |
61 | .. automodule:: destatis
62 | :members:
63 | :undoc-members:
64 | :show-inheritance:
65 |
--------------------------------------------------------------------------------
/python-client/sphinx-docs/source/modules.rst:
--------------------------------------------------------------------------------
1 | deutschland
2 | ===========
3 |
4 | .. toctree::
5 | :maxdepth: 4
6 |
7 | destatis
8 |
--------------------------------------------------------------------------------
/python-client/test-requirements.txt:
--------------------------------------------------------------------------------
1 | pytest-cov>=2.8.1
2 |
--------------------------------------------------------------------------------
/python-client/test/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bundesAPI/destatis-api/0dd95bff1669e8492dad0b2bf310ae744bbafa4e/python-client/test/__init__.py
--------------------------------------------------------------------------------
/python-client/test/test_default_api.py:
--------------------------------------------------------------------------------
1 | """
2 | Destatis-API
3 |
4 | No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
5 |
6 | The version of the OpenAPI document: 1.0
7 | Contact: kontakt@bund.dev
8 | Generated by: https://openapi-generator.tech
9 | """
10 |
11 |
12 | import unittest
13 |
14 | from deutschland.destatis.api.default_api import DefaultApi # noqa: E501
15 |
16 | from deutschland import destatis
17 |
18 |
19 | class TestDefaultApi(unittest.TestCase):
20 | """DefaultApi unit test stubs"""
21 |
22 | def setUp(self):
23 | self.api = DefaultApi() # noqa: E501
24 |
25 | def tearDown(self):
26 | pass
27 |
28 | def test_chart2result(self):
29 | """Test case for chart2result"""
30 | pass
31 |
32 | def test_chart2table(self):
33 | """Test case for chart2table"""
34 | pass
35 |
36 | def test_chart2timeseries(self):
37 | """Test case for chart2timeseries"""
38 | pass
39 |
40 | def test_cube(self):
41 | """Test case for cube"""
42 | pass
43 |
44 | def test_cube_meta(self):
45 | """Test case for cube_meta"""
46 | pass
47 |
48 | def test_cubefile(self):
49 | """Test case for cubefile"""
50 | pass
51 |
52 | def test_cubes(self):
53 | """Test case for cubes"""
54 | pass
55 |
56 | def test_cubes2statistic(self):
57 | """Test case for cubes2statistic"""
58 | pass
59 |
60 | def test_cubes2variable(self):
61 | """Test case for cubes2variable"""
62 | pass
63 |
64 | def test_find(self):
65 | """Test case for find"""
66 | pass
67 |
68 | def test_jobs(self):
69 | """Test case for jobs"""
70 | pass
71 |
72 | def test_logincheck(self):
73 | """Test case for logincheck"""
74 | pass
75 |
76 | def test_map2result(self):
77 | """Test case for map2result"""
78 | pass
79 |
80 | def test_map2table(self):
81 | """Test case for map2table"""
82 | pass
83 |
84 | def test_map2timeseries(self):
85 | """Test case for map2timeseries"""
86 | pass
87 |
88 | def test_modifieddata(self):
89 | """Test case for modifieddata"""
90 | pass
91 |
92 | def test_password(self):
93 | """Test case for password"""
94 | pass
95 |
96 | def test_qualitysigns(self):
97 | """Test case for qualitysigns"""
98 | pass
99 |
100 | def test_remove_result(self):
101 | """Test case for remove_result"""
102 | pass
103 |
104 | def test_result(self):
105 | """Test case for result"""
106 | pass
107 |
108 | def test_resultfile(self):
109 | """Test case for resultfile"""
110 | pass
111 |
112 | def test_results(self):
113 | """Test case for results"""
114 | pass
115 |
116 | def test_statistic(self):
117 | """Test case for statistic"""
118 | pass
119 |
120 | def test_statistics(self):
121 | """Test case for statistics"""
122 | pass
123 |
124 | def test_statistics2variable(self):
125 | """Test case for statistics2variable"""
126 | pass
127 |
128 | def test_table(self):
129 | """Test case for table"""
130 | pass
131 |
132 | def test_table_meta(self):
133 | """Test case for table_meta"""
134 | pass
135 |
136 | def test_tablefile(self):
137 | """Test case for tablefile"""
138 | pass
139 |
140 | def test_tables(self):
141 | """Test case for tables"""
142 | pass
143 |
144 | def test_tables2statistic(self):
145 | """Test case for tables2statistic"""
146 | pass
147 |
148 | def test_tables2variable(self):
149 | """Test case for tables2variable"""
150 | pass
151 |
152 | def test_terms(self):
153 | """Test case for terms"""
154 | pass
155 |
156 | def test_timeseries(self):
157 | """Test case for timeseries"""
158 | pass
159 |
160 | def test_timeseries2statistic(self):
161 | """Test case for timeseries2statistic"""
162 | pass
163 |
164 | def test_timeseries2variable(self):
165 | """Test case for timeseries2variable"""
166 | pass
167 |
168 | def test_timeseries_data(self):
169 | """Test case for timeseries_data"""
170 | pass
171 |
172 | def test_timeseries_meta(self):
173 | """Test case for timeseries_meta"""
174 | pass
175 |
176 | def test_timeseriesfile(self):
177 | """Test case for timeseriesfile"""
178 | pass
179 |
180 | def test_value(self):
181 | """Test case for value"""
182 | pass
183 |
184 | def test_values(self):
185 | """Test case for values"""
186 | pass
187 |
188 | def test_values2variable(self):
189 | """Test case for values2variable"""
190 | pass
191 |
192 | def test_variable(self):
193 | """Test case for variable"""
194 | pass
195 |
196 | def test_variables(self):
197 | """Test case for variables"""
198 | pass
199 |
200 | def test_variables2statistic(self):
201 | """Test case for variables2statistic"""
202 | pass
203 |
204 | def test_whoami(self):
205 | """Test case for whoami"""
206 | pass
207 |
208 |
209 | if __name__ == "__main__":
210 | unittest.main()
211 |
--------------------------------------------------------------------------------
/python-client/tox.ini:
--------------------------------------------------------------------------------
1 | [tox]
2 | envlist = py3
3 |
4 | [testenv]
5 | deps=-r{toxinidir}/requirements.txt
6 | -r{toxinidir}/test-requirements.txt
7 |
8 | commands=
9 | pytest --cov=destatis
10 |
--------------------------------------------------------------------------------