PyHive icon indicating copy to clipboard operation
PyHive copied to clipboard

Add http transport for NONE authentication

Open beltran opened this issue 7 years ago β€’ 4 comments

Partially closes https://github.com/dropbox/PyHive/issues/69, at least for NONE auth.

beltran avatar Aug 18 '18 17:08 beltran

Codecov Report

Merging #230 into master will decrease coverage by 0.94%. The diff coverage is 31.81%.

Impacted file tree graph

@@           Coverage Diff            @@
##           master   #230      +/-   ##
========================================
- Coverage   93.94%    93%   -0.95%     
========================================
  Files          14     14              
  Lines        1487   1500      +13     
  Branches      159    164       +5     
========================================
- Hits         1397   1395       -2     
- Misses         64     75      +11     
- Partials       26     30       +4
Impacted Files Coverage Ξ”
pyhive/hive.py 82.39% <31.81%> (-5.01%) :arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more Ξ” = absolute <relative> (impact), ΓΈ = not affected, ? = missing data Powered by Codecov. Last update d19cb0c...81a375b. Read the comment docs.

codecov-io avatar Aug 18 '18 17:08 codecov-io

Hi! We've been attempting to utilize PyHive at our company, but were having issues so I checked out the branch on this PR to get http transport mode working, since there appear to be some issues with binary lingering in other interfaces we utilize (other matter entirely).

There seems to be an issue with string encoding when used with Python 3.6:

Traceback (most recent call last):
  File "test_s3_interface.py", line 39, in <module>
    test_hive_interface()
  File "test_s3_interface.py", line 33, in test_hive_interface
    http_path='cliservice'
  File "/Users/josephdebartola/.local/share/virtualenvs/hive-partitions-j2DAtHmC/lib/python3.6/site-packages/pyhive/hive.py", line 96, in connect
    return Connection(*args, **kwargs)
  File "/Users/josephdebartola/.local/share/virtualenvs/hive-partitions-j2DAtHmC/lib/python3.6/site-packages/pyhive/hive.py", line 206, in __init__
    credentials = base64.b64encode(username + ":" + password)
  File "/Users/josephdebartola/.local/share/virtualenvs/hive-partitions-j2DAtHmC/lib/python3.6/base64.py", line 58, in b64encode
    encoded = binascii.b2a_base64(s, newline=False)
TypeError: a bytes-like object is required, not 'str'

I got this working in 3.6 on my end by patching lines 206-207 in hive.py:

credentials = base64.b64encode((username + ":" + password).encode('utf-8'))
self._transport.setCustomHeaders({"Authorization": "Basic " + credentials.decode('utf-8')})

Thanks for all the hard work on PyHive! I am excited to use the package and am excited for the incoming improvements.

EDIT: I attempted to use this on 2.7 to see whether my change broke compatibility there, but I ended up coming up against the issue with builtins mentioned in this ticket

josephpd3 avatar Oct 29 '18 17:10 josephpd3

Thank you for pointing that out @josephpd3

beltran avatar Oct 29 '18 22:10 beltran

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

CLAassistant avatar Apr 16 '22 21:04 CLAassistant