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

3.9.1: pytest is failing in 5 units #551

Open
kloczek opened this issue Apr 8, 2023 · 6 comments
Open

3.9.1: pytest is failing in 5 units #551

kloczek opened this issue Apr 8, 2023 · 6 comments

Comments

@kloczek
Copy link

kloczek commented Apr 8, 2023

I'm packaging your module as an rpm package so I'm using the typical PEP517 based build, install and test cycle used on building packages from non-root account.

  • python3 -sBm build -w --no-isolation
  • because I'm calling build with --no-isolation I'm using during all processes only locally installed modules
  • install .whl file in </install/prefix>
  • run pytest with $PYTHONPATH pointing to sitearch and sitelib inside </install/prefix>
  • build is performed in env which is cut off from access to the public network (pytest is executed with -m "not network")

Here is pytest output:

+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-twython-3.9.1-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-twython-3.9.1-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra -m 'not network'
==================================================================================== test session starts ====================================================================================
platform linux -- Python 3.8.16, pytest-7.2.2, pluggy-1.0.0
rootdir: /home/tkloczko/rpmbuild/BUILD/twython-3.9.1
collected 132 items

tests/test_auth.py sssssssss                                                                                                                                                          [  6%]
tests/test_core.py ....^[[AF.......FFF..F........                                                                                                                                         [ 26%]
tests/test_endpoints.py sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss                                                                               [ 86%]
tests/test_html_for_tweet.py .............                                                                                                                                            [ 96%]
tests/test_streaming.py sssss                                                                                                                                                         [100%]

========================================================================================= FAILURES ==========================================================================================
___________________________________________________________ TwythonAPITestCase.test_get_lastfunction_header_should_return_header ____________________________________________________________

self = <tests.test_core.TwythonAPITestCase testMethod=test_get_lastfunction_header_should_return_header>

    @responses.activate
    def test_get_lastfunction_header_should_return_header(self):
        """Test getting last specific header of the last API call works"""
        endpoint = 'statuses/home_timeline'
        url = self.get_url(endpoint)
        self.register_response(responses.GET, url, adding_headers={'x-rate-limit-remaining': '37'})

        self.api.get(endpoint)

        value = self.api.get_lastfunction_header('x-rate-limit-remaining')
>       self.assertEqual('37', value)
E       AssertionError: '37' != None

tests/test_core.py:269: AssertionError
__________________________________________________________ TwythonAPITestCase.test_request_should_handle_400_for_missing_auth_data __________________________________________________________

self = <tests.test_core.TwythonAPITestCase testMethod=test_request_should_handle_400_for_missing_auth_data>

    @responses.activate
    def test_request_should_handle_400_for_missing_auth_data(self):
        """Test that Twython raises an auth error on 400 error when no oauth data sent"""
        endpoint = 'statuses/home_timeline'
        url = self.get_url(endpoint)
        self.register_response(responses.GET, url,
                               body='{"errors":[{"message":"Bad Authentication data"}]}', status=400)

>       self.assertRaises(TwythonAuthError, self.api.request, endpoint)
E       AssertionError: TwythonAuthError not raised by request

tests/test_core.py:237: AssertionError
________________________________________________________ TwythonAPITestCase.test_request_should_handle_400_that_is_not_auth_related _________________________________________________________

self = <tests.test_core.TwythonAPITestCase testMethod=test_request_should_handle_400_that_is_not_auth_related>

    @responses.activate
    def test_request_should_handle_400_that_is_not_auth_related(self):
        """Test that Twython raises a normal error on 400 error when unrelated to authorization"""
        endpoint = 'statuses/home_timeline'
        url = self.get_url(endpoint)
        self.register_response(responses.GET, url,
                               body='{"errors":[{"message":"Bad request"}]}', status=400)

>       self.assertRaises(TwythonError, self.api.request, endpoint)
E       AssertionError: TwythonError not raised by request

tests/test_core.py:247: AssertionError
_____________________________________________________________________ TwythonAPITestCase.test_request_should_handle_401 _____________________________________________________________________

self = <tests.test_core.TwythonAPITestCase testMethod=test_request_should_handle_401>

    @responses.activate
    def test_request_should_handle_401(self):
        """Test that Twython raises an auth error on 401 error"""
        endpoint = 'statuses/home_timeline'
        url = self.get_url(endpoint)
        self.register_response(responses.GET, url, body='{"errors":[{"message":"Error"}]}', status=401)

>       self.assertRaises(TwythonAuthError, self.api.request, endpoint)
E       AssertionError: TwythonAuthError not raised by request

tests/test_core.py:227: AssertionError
_________________________________________________________________ TwythonAPITestCase.test_request_should_handle_rate_limit __________________________________________________________________

self = <tests.test_core.TwythonAPITestCase testMethod=test_request_should_handle_rate_limit>

    @responses.activate
    def test_request_should_handle_rate_limit(self):
        """Test that Twython raises an rate limit error on 429"""
        endpoint = 'statuses/home_timeline'
        url = self.get_url(endpoint)
        self.register_response(responses.GET, url,
                               body='{"errors":[{"message":"Rate Limit"}]}', status=429)

>       self.assertRaises(TwythonRateLimitError, self.api.request, endpoint)
E       AssertionError: TwythonRateLimitError not raised by request

tests/test_core.py:257: AssertionError
================================================================================== short test summary info ==================================================================================
SKIPPED [1] tests/test_auth.py:17: skipping non-updated test
SKIPPED [1] tests/test_auth.py:24: skipping non-updated test
SKIPPED [1] tests/test_auth.py:43: skipping non-updated test
SKIPPED [1] tests/test_auth.py:49: skipping non-updated test
SKIPPED [1] tests/test_auth.py:31: skipping non-updated test
SKIPPED [1] tests/test_auth.py:37: skipping non-updated test
SKIPPED [1] tests/test_auth.py:56: skipping non-updated test
SKIPPED [1] tests/test_auth.py:61: skipping non-updated test
SKIPPED [1] tests/test_auth.py:67: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:353: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:259: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:176: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:457: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:320: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:372: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:264: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:181: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:325: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:215: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:530: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:497: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:503: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:284: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:290: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:109: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:347: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:152: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:207: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:145: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:200: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:468: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:69: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:166: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:427: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:396: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:365: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:401: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:439: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:37: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:92: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:171: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:491: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:302: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:50: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:56: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:97: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:75: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:451: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:114: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:484: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:433: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:515: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:525: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:510: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:139: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:336: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:331: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:341: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:42: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:419: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:253: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:247: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:314: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:308: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:159: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:269: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:520: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:297: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:63: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:473: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:103: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:478: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:279: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:130: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:120: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:195: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:360: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:445: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:80: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:274: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:407: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:225: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:85: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:230: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:186: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:237: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:242: skipping non-updated test
SKIPPED [1] tests/test_endpoints.py:220: skipping non-updated test
SKIPPED [1] tests/test_streaming.py:43: skipping non-updated test
SKIPPED [1] tests/test_streaming.py:30: skipping non-updated test
SKIPPED [1] tests/test_streaming.py:38: skipping non-updated test
SKIPPED [1] tests/test_streaming.py:34: skipping non-updated test
SKIPPED [1] tests/test_streaming.py:48: skipping non-updated test
FAILED tests/test_core.py::TwythonAPITestCase::test_get_lastfunction_header_should_return_header - AssertionError: '37' != None
FAILED tests/test_core.py::TwythonAPITestCase::test_request_should_handle_400_for_missing_auth_data - AssertionError: TwythonAuthError not raised by request
FAILED tests/test_core.py::TwythonAPITestCase::test_request_should_handle_400_that_is_not_auth_related - AssertionError: TwythonError not raised by request
FAILED tests/test_core.py::TwythonAPITestCase::test_request_should_handle_401 - AssertionError: TwythonAuthError not raised by request
FAILED tests/test_core.py::TwythonAPITestCase::test_request_should_handle_rate_limit - AssertionError: TwythonRateLimitError not raised by request
========================================================================= 5 failed, 34 passed, 93 skipped in 0.49s ==========================================================================

Here is list of installed modules in build env

Package                       Version
----------------------------- -----------------
alabaster                     0.7.13
attrs                         22.2.0
Babel                         2.12.1
build                         0.10.0
charset-normalizer            3.1.0
distro                        1.8.0
docutils                      0.19
exceptiongroup                1.0.0
gpg                           1.19.0
idna                          3.4
imagesize                     1.4.1
importlib-metadata            6.2.0
iniconfig                     2.0.0
installer                     0.7.0
Jinja2                        3.1.2
libcomps                      0.1.19
MarkupSafe                    2.1.2
oauthlib                      3.2.2
packaging                     23.0
pip                           23.0.1
pluggy                        1.0.0
Pygments                      2.14.0
pyproject_hooks               1.0.0
pytest                        7.2.2
python-dateutil               2.8.2
pytz                          2023.2
PyYAML                        6.0
requests                      2.28.2
requests-oauthlib             1.3.1
responses                     0.23.1
rpm                           4.17.0
setuptools                    65.6.3
six                           1.16.0
snowballstemmer               2.2.0
Sphinx                        6.1.3
sphinxcontrib-applehelp       1.0.4
sphinxcontrib-devhelp         1.0.2.dev20230405
sphinxcontrib-htmlhelp        2.0.0
sphinxcontrib-jsmath          1.0.1.dev20230405
sphinxcontrib-qthelp          1.0.3.dev20230405
sphinxcontrib-serializinghtml 1.1.5
tomli                         2.0.1
urllib3                       1.26.15
wheel                         0.40.0
zipp                          3.15.0
@ryanmcgrath
Copy link
Owner

I don't really do much for this library anymore (especially given the direction Twitter has taken with their API) nor do I believe it should be packaged in any format outside of typical Python-based package environments.

The latter is a position I've come around to over the years; I can't stop people from doing it and others have done in the past, but it's not something I'm going to spend time on. That said, as I can't stop you or others I can leave this open for collaboration and/or like-minded people finding one-another.

@CesarPazzi
Copy link

CesarPazzi commented Jul 18, 2023

@ryanmcgrath If you are not maintaining the repo please put it Archive mode and let anyone know in the Readme that is not maintained anymore so we can get other options.

@ryanmcgrath
Copy link
Owner

No. Archive mode is for projects that are explicitly discontinued. I have not discontinued Twython as it still (surprisingly) sees decent usage in certain research and university course use-cases.

I've not actively maintained Twython in quite some time now, though. I'm long past the point in my life where I do free work to provide value to an actively hostile platform. That said, for a few years another contributor did quite a bit of work and I'm certainly still open to people PRing other things. That's how open source works and I'm happy to let others take the reigns and keep it going if they want to. The README has had very explicit block about a call for maintainers for a few years now for this reason.

tl;dr: People are still free to fork, hack on, or fix things. If a PR is worth merging I will eventually take a look and do a bump release - I'm just not doing it myself. If you feel like you want a Twitter Python API wrapper that's more actively maintained, I'd suggest looking at tweepy - they're another of the old guard that's to my knowledge more actively maintained.

@kloczek
Copy link
Author

kloczek commented Jul 18, 2023

No. Archive mode is for projects that are explicitly discontinued. I have not discontinued Twython as it still (surprisingly) sees decent usage in certain research and university course use-cases.

What about add note that you are looking for new maintainer? 🤔

@ryanmcgrath
Copy link
Owner

No. Archive mode is for projects that are explicitly discontinued. I have not discontinued Twython as it still (surprisingly) sees decent usage in certain research and university course use-cases.

What about add note that you are looking for new maintainer? 🤔

You mean like the one in the README since 2018?

Screenshot 2023-07-17 at 23 44 09 Screenshot 2023-07-17 at 23 45 04

@CyberBallistix
Copy link

Hello, did anyone found a solution since ?

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

No branches or pull requests

4 participants