Skip to content

Commit 62e8f90

Browse files
authored
Merge pull request #43 from ChannelFinder/38-sky
Use the solution from 38
2 parents 7c4469b + 7506072 commit 62e8f90

File tree

7 files changed

+43
-56
lines changed

7 files changed

+43
-56
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@ username=MyUserName
2020
password=MyPassword
2121
```
2222

23+
If you are using an `https://` URL and want to disable certificate
24+
verification, you can add:
25+
26+
```
27+
verify_ssl=false
28+
```
29+
30+
2331
## Development
2432

2533
To install with dependancies for testing.

channelfinder/ChannelFinderClient.py

Lines changed: 34 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from requests.exceptions import HTTPError
1515
import urllib3
1616
from copy import copy
17+
from typing import Optional
1718

1819
try:
1920
from json import JSONEncoder
@@ -29,23 +30,27 @@ class ChannelFinderClient(object):
2930
__propertiesResource = "/resources/properties"
3031
__tagsResource = "/resources/tags"
3132

32-
def __init__(self, BaseURL=None, username=None, password=None, verify_ssl=True):
33+
def __init__(self, BaseURL=None, username=None, password=None, verify_ssl=None):
3334
"""
3435
Channel finder client object. It provides a connection object to perform the following operations:
3536
- find: find all channels satisfying given searching criteria
3637
- set: add channel into service
3738
- update: update channel information
3839
- delete: delete channel from service
3940
41+
If any of the arguments is ``None``, the respective value from the
42+
configuration file is used.
43+
4044
:param BaseURL: the url of the channel finder service
4145
:param username: user name authorized by channel finder service
4246
:param password: password for the authorized user
47+
:param verify_ssl: verify the peer TLS certificate
4348
"""
4449
try:
4550
self.__baseURL = self.__getDefaultConfig("BaseURL", BaseURL)
4651
self.__userName = self.__getDefaultConfig("username", username)
4752
self.__password = self.__getDefaultConfig("password", password)
48-
self.__verify_ssl = self.__getDefaultConfig("verify_ssl", verify_ssl)
53+
self.__verify_ssl = self._get_boolean_config("verify_ssl", verify_ssl)
4954
if self.__userName and self.__password:
5055
self.__auth = auth.HTTPBasicAuth(self.__userName, self.__password)
5156
else:
@@ -58,19 +63,34 @@ def __init__(self, BaseURL=None, username=None, password=None, verify_ssl=True):
5863
except Exception as e:
5964
raise RuntimeError("Error creating ChannelFinderClient: " + str(e))
6065

61-
def __getDefaultConfig(self, key, ref):
66+
def __getDefaultConfig(self, key, override):
6267
"""
6368
Get default configuration for given name and section.
6469
6570
:param key: key word
66-
:param ref: reference value
67-
:return: result if key word is configured or ref is not None, otherwise None
71+
:param override: override value
72+
:return: ``override`` if not ``None``, else the configuration value
73+
associated with ``key`` if present, otherwise ``None``.
6874
"""
69-
result = ref
70-
if ref is None:
75+
result = override
76+
if override is None:
7177
result = basecfg["DEFAULT"].get(key, None)
7278
return result
7379

80+
def _get_boolean_config(self, key: str, override: Optional[bool]) -> bool:
81+
"""
82+
Get boolean configuration for given name and section.
83+
84+
:param key: key word
85+
:param override: override value
86+
:return: ``override`` if not ``None``, else the configuration value
87+
associated with ``key`` if present, otherwise ``None``.
88+
"""
89+
result = override
90+
if override is None:
91+
result = basecfg["DEFAULT"].getboolean(key, None)
92+
return bool(result)
93+
7494
def set(self, **kwds):
7595
"""
7696
method to allow various types of set operations on one or many channels, tags or properties
@@ -161,7 +181,6 @@ def __handleSingleAddParameter(self, **kwds):
161181
+ kwds["channel"]["name"],
162182
data=JSONEncoder().encode(kwds["channel"]),
163183
headers=copy(self.__jsonheader),
164-
verify=False,
165184
auth=self.__auth,
166185
)
167186
r.raise_for_status()
@@ -170,7 +189,6 @@ def __handleSingleAddParameter(self, **kwds):
170189
self.__baseURL + self.__channelsResource,
171190
data=JSONEncoder().encode(kwds["channels"]),
172191
headers=copy(self.__jsonheader),
173-
verify=False,
174192
auth=self.__auth,
175193
)
176194
r.raise_for_status()
@@ -179,7 +197,6 @@ def __handleSingleAddParameter(self, **kwds):
179197
self.__baseURL + self.__tagsResource + "/" + kwds["tag"]["name"],
180198
data=JSONEncoder().encode(kwds["tag"]),
181199
headers=copy(self.__jsonheader),
182-
verify=False,
183200
auth=self.__auth,
184201
)
185202
r.raise_for_status()
@@ -189,7 +206,6 @@ def __handleSingleAddParameter(self, **kwds):
189206
self.__baseURL + self.__tagsResource,
190207
data=data,
191208
headers=copy(self.__jsonheader),
192-
verify=False,
193209
auth=self.__auth,
194210
)
195211
r.raise_for_status()
@@ -201,7 +217,6 @@ def __handleSingleAddParameter(self, **kwds):
201217
+ kwds["property"]["name"],
202218
data=JSONEncoder().encode(kwds["property"]),
203219
headers=copy(self.__jsonheader),
204-
verify=False,
205220
auth=self.__auth,
206221
)
207222
r.raise_for_status()
@@ -212,7 +227,6 @@ def __handleSingleAddParameter(self, **kwds):
212227
self.__baseURL + self.__propertiesResource,
213228
data=data,
214229
headers=copy(self.__jsonheader),
215-
verify=False,
216230
auth=self.__auth,
217231
)
218232
r.raise_for_status()
@@ -238,7 +252,6 @@ def __handleMultipleAddParameters(self, **kwds):
238252
self.__baseURL + self.__tagsResource + "/" + kwds["tag"]["name"],
239253
data=JSONEncoder().encode(data),
240254
headers=copy(self.__jsonheader),
241-
verify=False,
242255
auth=self.__auth,
243256
).raise_for_status()
244257
elif "tag" in kwds and "channelNames" in kwds:
@@ -251,7 +264,6 @@ def __handleMultipleAddParameters(self, **kwds):
251264
self.__baseURL + self.__tagsResource + "/" + kwds["tag"]["name"],
252265
data=JSONEncoder().encode(data),
253266
headers=copy(self.__jsonheader),
254-
verify=False,
255267
auth=self.__auth,
256268
).raise_for_status()
257269
elif "property" in kwds and "channels" in kwds:
@@ -264,7 +276,6 @@ def __handleMultipleAddParameters(self, **kwds):
264276
+ kwds["property"]["name"],
265277
data=JSONEncoder().encode(data),
266278
headers=copy(self.__jsonheader),
267-
verify=False,
268279
auth=self.__auth,
269280
).raise_for_status()
270281
else:
@@ -365,7 +376,6 @@ def findByArgs(self, args):
365376
url,
366377
params=args,
367378
headers=copy(self.__jsonheader),
368-
verify=False,
369379
auth=self.__auth,
370380
)
371381
try:
@@ -385,9 +395,7 @@ def findTag(self, tagname):
385395
:return: Tag object if found, otherwise None
386396
"""
387397
url = self.__baseURL + self.__tagsResource + "/" + tagname
388-
r = self.__session.get(
389-
url, headers=copy(self.__jsonheader), verify=False, auth=self.__auth
390-
)
398+
r = self.__session.get(url, headers=copy(self.__jsonheader), auth=self.__auth)
391399
try:
392400
r.raise_for_status()
393401
return r.json()
@@ -405,7 +413,7 @@ def findProperty(self, propertyname):
405413
:return: Property object if found, otherwise None
406414
"""
407415
url = self.__baseURL + self.__propertiesResource + "/" + propertyname
408-
r = self.__session.get(url, headers=copy(self.__jsonheader), verify=False)
416+
r = self.__session.get(url, headers=copy(self.__jsonheader))
409417
try:
410418
r.raise_for_status()
411419
return r.json()
@@ -422,7 +430,7 @@ def getAllTags(self):
422430
:return: list of all the Tag objects present, otherwise None.
423431
"""
424432
url = self.__baseURL + self.__tagsResource
425-
r = self.__session.get(url, headers=copy(self.__jsonheader), verify=False)
433+
r = self.__session.get(url, headers=copy(self.__jsonheader))
426434
try:
427435
r.raise_for_status()
428436
return r.json()
@@ -439,7 +447,7 @@ def getAllProperties(self):
439447
:return: list of the Property objects present, otherwise None
440448
"""
441449
url = self.__baseURL + self.__propertiesResource
442-
r = self.__session.get(url, headers=copy(self.__jsonheader), verify=False)
450+
r = self.__session.get(url, headers=copy(self.__jsonheader))
443451
try:
444452
r.raise_for_status()
445453
return r.json()
@@ -504,12 +512,12 @@ def __handleSingleDeleteParameter(self, **kwds):
504512
+ kwds["channelName"].strip()
505513
)
506514
self.__session.delete(
507-
url, headers=copy(self.__jsonheader), verify=False, auth=self.__auth
515+
url, headers=copy(self.__jsonheader), auth=self.__auth
508516
).raise_for_status()
509517
elif "tagName" in kwds:
510518
url = self.__baseURL + self.__tagsResource + "/" + kwds["tagName"].strip()
511519
self.__session.delete(
512-
url, verify=False, headers=copy(self.__jsonheader), auth=self.__auth
520+
url, headers=copy(self.__jsonheader), auth=self.__auth
513521
).raise_for_status()
514522
elif "propertyName" in kwds:
515523
url = (
@@ -519,7 +527,7 @@ def __handleSingleDeleteParameter(self, **kwds):
519527
+ kwds["propertyName"].strip()
520528
)
521529
self.__session.delete(
522-
url, headers=copy(self.__jsonheader), verify=False, auth=self.__auth
530+
url, headers=copy(self.__jsonheader), auth=self.__auth
523531
).raise_for_status()
524532
else:
525533
raise RuntimeError(
@@ -545,7 +553,6 @@ def __handleMultipleDeleteParameters(self, **kwds):
545553
+ "/"
546554
+ kwds["channelName"].strip(),
547555
headers=copy(self.__jsonheader),
548-
verify=False,
549556
auth=self.__auth,
550557
).raise_for_status()
551558
elif "tag" in kwds and "channelNames" in kwds:
@@ -568,7 +575,6 @@ def __handleMultipleDeleteParameters(self, **kwds):
568575
+ "/"
569576
+ kwds["channelName"],
570577
headers=copy(self.__jsonheader),
571-
verify=False,
572578
auth=self.__auth,
573579
).raise_for_status()
574580
elif "property" in kwds and "channelNames" in kwds:
@@ -674,7 +680,6 @@ def __handleSingleUpdateParameter(self, **kwds):
674680
self.__baseURL + self.__channelsResource + "/" + ch["name"],
675681
data=JSONEncoder().encode(ch),
676682
headers=copy(self.__jsonheader),
677-
verify=False,
678683
auth=self.__auth,
679684
)
680685
r.raise_for_status()
@@ -684,7 +689,6 @@ def __handleSingleUpdateParameter(self, **kwds):
684689
self.__baseURL + self.__channelsResource,
685690
data=JSONEncoder().encode(chs),
686691
headers=copy(self.__jsonheader),
687-
verify=False,
688692
auth=self.__auth,
689693
)
690694
r.raise_for_status()
@@ -694,7 +698,6 @@ def __handleSingleUpdateParameter(self, **kwds):
694698
self.__baseURL + self.__propertiesResource + "/" + property["name"],
695699
data=JSONEncoder().encode(property),
696700
headers=copy(self.__jsonheader),
697-
verify=False,
698701
auth=self.__auth,
699702
)
700703
r.raise_for_status()
@@ -704,7 +707,6 @@ def __handleSingleUpdateParameter(self, **kwds):
704707
self.__baseURL + self.__tagsResource + "/" + tag["name"],
705708
data=JSONEncoder().encode(tag),
706709
headers=copy(self.__jsonheader),
707-
verify=False,
708710
auth=self.__auth,
709711
)
710712
r.raise_for_status()
@@ -713,7 +715,6 @@ def __handleSingleUpdateParameter(self, **kwds):
713715
self.__baseURL + self.__tagsResource,
714716
data=JSONEncoder().encode(kwds["tags"]),
715717
headers=copy(self.__jsonheader),
716-
verify=False,
717718
auth=self.__auth,
718719
)
719720
r.raise_for_status()
@@ -750,7 +751,6 @@ def __handleMultipleUpdateParameters(self, **kwds):
750751
self.__baseURL + self.__tagsResource + "/" + tag["name"],
751752
data=JSONEncoder().encode(tag),
752753
headers=copy(self.__jsonheader),
753-
verify=False,
754754
auth=self.__auth,
755755
).raise_for_status()
756756
elif "tag" in kwds and "channelNames" in kwds:
@@ -767,7 +767,6 @@ def __handleMultipleUpdateParameters(self, **kwds):
767767
self.__baseURL + self.__tagsResource + "/" + tag["name"],
768768
data=JSONEncoder().encode(tag),
769769
headers=copy(self.__jsonheader),
770-
verify=False,
771770
auth=self.__auth,
772771
).raise_for_status()
773772
elif "property" in kwds and "channelName" in kwds:
@@ -786,7 +785,6 @@ def __handleMultipleUpdateParameters(self, **kwds):
786785
self.__baseURL + self.__propertiesResource + "/" + property["name"],
787786
data=JSONEncoder().encode(property),
788787
headers=copy(self.__jsonheader),
789-
verify=False,
790788
auth=self.__auth,
791789
).raise_for_status()
792790
elif "property" in kwds and "channelNames" in kwds:
@@ -807,7 +805,6 @@ def __handleMultipleUpdateParameters(self, **kwds):
807805
self.__baseURL + self.__propertiesResource + "/" + property["name"],
808806
data=JSONEncoder().encode(property),
809807
headers=copy(self.__jsonheader),
810-
verify=False,
811808
auth=self.__auth,
812809
).raise_for_status()
813810
elif "originalChannelName" in kwds and "channel" in kwds:
@@ -817,7 +814,6 @@ def __handleMultipleUpdateParameters(self, **kwds):
817814
self.__baseURL + self.__channelsResource + "/" + channelName,
818815
data=JSONEncoder().encode(ch),
819816
headers=copy(self.__jsonheader),
820-
verify=False,
821817
auth=self.__auth,
822818
).raise_for_status()
823819
elif "originalPropertyName" in kwds and "property" in kwds:
@@ -827,7 +823,6 @@ def __handleMultipleUpdateParameters(self, **kwds):
827823
self.__baseURL + self.__propertiesResource + "/" + propName,
828824
data=JSONEncoder().encode(prop),
829825
headers=copy(self.__jsonheader),
830-
verify=False,
831826
auth=self.__auth,
832827
).raise_for_status()
833828
elif "originalTagName" in kwds and "tag" in kwds:
@@ -837,7 +832,6 @@ def __handleMultipleUpdateParameters(self, **kwds):
837832
self.__baseURL + self.__tagsResource + "/" + tagName,
838833
data=JSONEncoder().encode(tag),
839834
headers=copy(self.__jsonheader),
840-
verify=False,
841835
auth=self.__auth,
842836
).raise_for_status()
843837
else:

test/_testConf.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def __loadConfig():
4646
"username": "admin",
4747
"password": "adminPass",
4848
"owner": "cf-update",
49+
"verify_ssl": "False",
4950
"channelOwner": "cf-channels",
5051
"channelUsername": "admin",
5152
"channelPassword": "adminPass",

test/testCFPpropertyManager.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,8 @@
66

77
from _testConf import _testConf, ChannelFinderClientTestCase
88

9-
import urllib3
10-
119
from channelfinder.cfPropertyManager import CFPropertyManager
1210

13-
urllib3.disable_warnings()
14-
1511

1612
class CFPropertyManagerTest(ChannelFinderClientTestCase):
1713
def setUp(self):

test/testCFUpdateIOC.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@
2222

2323
from _testConf import _testConf, ChannelFinderClientTestCase
2424

25-
import urllib3
26-
27-
urllib3.disable_warnings()
28-
2925

3026
class UpdateIOCTest(ChannelFinderClientTestCase):
3127
def setUp(self):

test/testChannelFinderClient.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@
1313
from channelfinder.util import ChannelUtil
1414
from _testConf import _testConf, ChannelFinderClientTestCase
1515

16-
import urllib3
17-
18-
urllib3.disable_warnings()
19-
2016

2117
class ConnectionTest(ChannelFinderClientTestCase):
2218
def testConnection(self):

0 commit comments

Comments
 (0)