Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot run handle_http example #17

Open
manurueda opened this issue Sep 7, 2017 · 12 comments
Open

Cannot run handle_http example #17

manurueda opened this issue Sep 7, 2017 · 12 comments
Labels

Comments

@manurueda
Copy link

Hi Martin,

First of all, congrats for the tool. It seems really promising!

I've been trying to run handle_http example, I get status: READY (everything goes fine, apparently) but get a 500 when I enter the resulting url. When I log to google cloud error reporting I got this error:

ImportError: No module named urlparse Failed to execute script function
at _import_module (site-packages/six.py:82)
at _resolve (site-packages/six.py:160)
at __get__ (site-packages/six.py:92)
at <module> (site-packages/cloudfn/http.py:5)
at load_module (/tmp/pip-build-QIE5nA/pyinstaller/PyInstaller/loader/pyimod03_importers.py:389)
at <module> (function.py:1)

My steps are:
1/ create files function.py, deploy.sh and requirements.txt
2/ create new virtualenv and install requirements
3/ launch deploy

I checked on the python console if I can import urlparse, or six.moves.urlib.parse and everything seems fine. I am running everything on python 2.7.

I am a bit lost, maybe you can help me.

@manurueda
Copy link
Author

manurueda commented Sep 7, 2017

function.py

from cloudfn.http import Response, handle_http_event


def handle_http(req):
    return Response(
        status_code=200,
        body={'key': 2},
        headers={'content-type': 'application/json'},
    )


handle_http_event(handle_http)

requirements.txt

pycloudfn==0.1.205


deploy.sh

py-cloud-fn handle_http http -p -f function.py --python_version 2.7 && \
cd cloudfn/target && gcloud beta functions deploy handle_http \
--trigger-http --stage-bucket <MYBUCKET> --memory 2048MB && cd ../..

@MartinSahlen
Copy link
Owner

Thanks, I'll have a look this weekend :D

@MartinSahlen
Copy link
Owner

And please bear with me, this was created over a few jetlagged days in New York, it is very much alpha 😂

@manurueda
Copy link
Author

Other examples work pretty well 💯

@mrmacpholea
Copy link

mrmacpholea commented Sep 27, 2017

@jmderueda I can't see your full trace, but might be the same issue I am having - my trace after deployed and tested is:

File "http_test.py", line 1, in
File "/tmp/pip-build-1Vm687/pyinstaller/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module
File "site-packages/cloudfn/http.py", line 5, in
File "site-packages/six.py", line 92, in get
File "site-packages/six.py", line 160, in _resolve
File "site-packages/six.py", line 82, in _import_module
ImportError: No module named urlparse

I think it's an issue with using urlparse (from six) vs urlparse (built-in python). Both urlparse return the same object so I think we can use python's built-in safely.

@MartinSahlen maybe we can test this this change in http.py? Let me know if you're OK I can send another pull request for this change (I wasn't able to test because when deployed, requirements.txt
does not seem to like git+git://xxxxx@branch)
[edit] the fix will only work for python 2, with python 3 we would need a couple of more lines. If this is the issue, I will add to the fix.

Thanks

@manurueda
Copy link
Author

manurueda commented Sep 27, 2017 via email

@MartinSahlen
Copy link
Owner

Just wondering if this (not using six) will break compatibility with python2+3?

@manurueda
Copy link
Author

manurueda commented Sep 28, 2017 via email

@MartinSahlen
Copy link
Owner

As far as my understanding goes, six is a compatibility layer that makes sure that code works on both python 2 and 3 where stuff is deprecated or changed? I'll look some more into this.

@mrmacpholea
Copy link

mrmacpholea commented Sep 28, 2017

We could do something like:

try:
from six.moves.urllib_parse import urlparse
except ImportError:
from urlparse import urlparse

@davidbernat
Copy link

davidbernat commented Nov 5, 2017

@MartinSahlen @marcelopham I can confirm the change in http.py of

from six.moves.urllib_parse import urlparse
to
from urlparse import urlparse

change worked for me using python 2.7. Though because py-cloud-fn pulls its requirements from pip at build time, I had to manually edit the site-packages within the cloudfn directory and recompile the python .pyc file before deploying.

@JulienD
Copy link

JulienD commented Jan 25, 2018

Hi,

Trying for the first time the repo and got the same error. Any progress on this topic ? I'm using Python 2.7.

What are the issues using the default urlparse lib instead of the one provided by six ?

Thanks @davidbernat, your steps description worked for me as well.

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants