Code Coverage

Cobertura Coverage Report > osmclient.sol005 >

package.py

Trend

Classes0%
 
Lines0%
 
Conditionals100%
 

File Coverage summary

NameClassesLinesConditionals
package.py
0%
0/1
0%
0/62
100%
0/0

Coverage Breakdown by Class

NameLinesConditionals
package.py
0%
0/62
N/A

Source

osmclient/sol005/package.py
1 # Copyright 2018 Telefonica
2 #
3 # All Rights Reserved.
4 #
5 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
6 #    not use this file except in compliance with the License. You may obtain
7 #    a copy of the License at
8 #
9 #         http://www.apache.org/licenses/LICENSE-2.0
10 #
11 #    Unless required by applicable law or agreed to in writing, software
12 #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 #    License for the specific language governing permissions and limitations
15 #    under the License.
16
17 0 """
18 OSM package API handling
19 """
20
21 #from os import stat
22 #from os.path import basename
23 0 from osmclient.common.exceptions import ClientException
24 0 from osmclient.common.exceptions import NotFound
25 0 from osmclient.common import utils
26 0 import json
27 0 import logging
28 0 import os.path
29
30
31 0 class Package(object):
32 0     def __init__(self, http=None, client=None):
33 0         self._client = client
34 0         self._http = http
35 0         self._logger = logging.getLogger('osmclient')
36
37 0     def get_key_val_from_pkg(self, descriptor_file):
38 0         self._logger.debug("")
39 0         return utils.get_key_val_from_pkg(descriptor_file)
40
41 0     def _wait_for_package(self, pkg_type):
42 0         self._logger.debug("")
43 0         if 'vnfd' in pkg_type['type']:
44 0             get_method = self._client.vnfd.get
45 0         elif 'nsd' in pkg_type['type']:
46 0             get_method = self._client.nsd.get
47         else:
48 0             raise ClientException("no valid package type found")
49
50         # helper method to check if pkg exists
51 0         def check_exists(func):
52 0             self._logger.debug("")
53 0             try:
54 0                 func()
55 0             except NotFound:
56 0                 return False
57 0             return True
58
59 0         return utils.wait_for_value(lambda:
60                                     check_exists(lambda:
61                                                  get_method(pkg_type['name'])))
62
63 0     def wait_for_upload(self, filename):
64         """wait(block) for an upload to succeed.
65            The filename passed is assumed to be a descriptor tarball.
66         """
67 0         self._logger.debug("")
68 0         self._client.get_token()
69 0         pkg_type = utils.get_key_val_from_pkg(filename)
70
71 0         if pkg_type is None:
72 0             raise ClientException("Cannot determine package type")
73
74 0         if not self._wait_for_package(pkg_type):
75 0             raise ClientException("package {} failed to upload"
76                                   .format(filename))
77
78 0     def upload(self, filename, skip_charm_build=False):
79 0         self._logger.debug("")
80 0         if os.path.isdir(filename):
81 0             filename = filename.rstrip('/')
82 0             filename = self._client.package_tool.build(filename, skip_validation=False, skip_charm_build=skip_charm_build)
83 0             self.upload(filename)
84         else:
85 0             self._client.get_token()
86 0             pkg_type = utils.get_key_val_from_pkg(filename)
87 0             if pkg_type is None:
88 0                 raise ClientException("Cannot determine package type")
89 0             if pkg_type['type'] == 'nsd':
90 0                 endpoint = '/nsd/v1/ns_descriptors_content'
91             else:
92 0                 endpoint = '/vnfpkgm/v1/vnf_packages_content'
93             #endpoint = '/nsds' if pkg_type['type'] == 'nsd' else '/vnfds'
94             #print('Endpoint: {}'.format(endpoint))
95 0             headers = self._client._headers
96 0             headers['Content-Type'] = 'application/gzip'
97             #headers['Content-Type'] = 'application/binary'
98             # Next three lines are to be removed in next version
99             #headers['Content-Filename'] = basename(filename)
100             #file_size = stat(filename).st_size
101             #headers['Content-Range'] = 'bytes 0-{}/{}'.format(file_size - 1, file_size)
102 0             headers["Content-File-MD5"] = utils.md5(filename)
103 0             http_header = ['{}: {}'.format(key,val)
104                           for (key,val) in list(headers.items())]
105 0             self._http.set_http_header(http_header)
106 0             http_code, resp = self._http.post_cmd(endpoint=endpoint, filename=filename)
107             #print('HTTP CODE: {}'.format(http_code))
108             #print('RESP: {}'.format(resp))
109             #if http_code in (200, 201, 202, 204):
110 0             if resp:
111 0                 resp = json.loads(resp)
112 0             if not resp or 'id' not in resp:
113 0                 raise ClientException('unexpected response from server - {}'.format(
114                                        resp))
115 0             print(resp['id'])
116             #  else:
117             #     msg = ""
118             #     if resp:
119             #         try:
120             #              msg = json.loads(resp)
121             #         except ValueError:
122             #             msg = resp
123             #     raise ClientException("failed to upload package - {}".format(msg))