sybrenstuvel / flickrapi

Python Flickr API implementation
https://stuvel.eu/flickrapi
Other
155 stars 33 forks source link

test_flickrapi.py failing #125

Closed hugovk closed 4 years ago

hugovk commented 5 years ago

For example, see PR https://github.com/sybrenstuvel/flickrapi/pull/124 which only edits the README.

Looks like some photos and albums no longer exist on Flickr.

I expect it's because Flickr have restricted free accounts to 1,000 photos and deleted the rest.

$ pytest
===================================================== test session starts =====================================================
platform darwin -- Python 3.7.4, pytest-5.1.2, py-1.5.4, pluggy-0.12.0
Test order randomisation NOT enabled. Enable with --random-order or --random-order-bucket=<bucket_type>
rootdir: /private/tmp/flickrapi
plugins: xdist-1.29.0, parallel-0.0.9, random-order-1.0.4, flaky-3.5.3, black-0.3.5, timeout-1.3.3, rerunfailures-6.0, cov-2.7.1, forked-1.0.1, requests-mock-1.6.0
collected 42 items

tests/test_cache.py ....                                                                                                [  9%]
tests/test_call_builder.py ...                                                                                          [ 16%]
tests/test_core.py .                                                                                                    [ 19%]
tests/test_flickrapi.py ..........FF.F..FFF.F..                                                                         [ 73%]
tests/test_shorturl.py ...                                                                                              [ 80%]
tests/test_tokencache.py ....                                                                                           [ 90%]
tests/test_xmlnode.py ....                                                                                              [100%]

========================================================== FAILURES ===========================================================
_______________________________________________ FormatsTest.test_default_format _______________________________________________

self = <test_flickrapi.FormatsTest testMethod=test_default_format>

    def test_default_format(self):
        '''Test that the default format is etree'''

        f = self.clasz(key, secret)
>       etree = f.photos.getInfo(photo_id=u'2333478006')

tests/test_flickrapi.py:336:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
flickrapi/call_builder.py:38: in __call__
    return self.flickrapi_object.do_flickr_call(self.method_name, **kwargs)
flickrapi/core.py:337: in do_flickr_call
    **params)
flickrapi/core.py:407: in _wrap_in_parser
    return parser(self, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]
rest_xml = b'<?xml version="1.0" encoding="utf-8" ?>\n<rsp stat="fail">\n\t<err code="1" msg="Photo &quot;2333478006&quot; not found (invalid ID)" />\n</rsp>\n'

    @rest_parser('etree')
    def parse_etree(self, rest_xml):
        """Parses a REST XML response from Flickr into an ElementTree object."""

        try:
            from lxml import etree as ElementTree
            LOG.info('REST Parser: using lxml.etree')
        except ImportError:
            try:
                import xml.etree.cElementTree as ElementTree
                LOG.info('REST Parser: using xml.etree.cElementTree')
            except ImportError:
                try:
                    import xml.etree.ElementTree as ElementTree
                    LOG.info('REST Parser: using xml.etree.ElementTree')
                except ImportError:
                    try:
                        import elementtree.cElementTree as ElementTree
                        LOG.info('REST Parser: elementtree.cElementTree')
                    except ImportError:
                        try:
                            import elementtree.ElementTree as ElementTree
                        except ImportError:
                            raise ImportError("You need to install "
                                              "ElementTree to use the etree format")

        rsp = ElementTree.fromstring(rest_xml)
        if rsp.attrib['stat'] == 'ok':
            return rsp

        err = rsp.find('err')
        code = err.attrib.get('code', None)
>       raise FlickrError(six.u('Error: %(code)s: %(msg)s') % err.attrib, code=code)
E       flickrapi.exceptions.FlickrError: Error: 1: Photo "2333478006" not found (invalid ID)

flickrapi/core.py:297: FlickrError
---------------------------------------------------- Captured stderr call -----------------------------------------------------
INFO:flickrapi.core:Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG:flickrapi.core:Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'method': 'flickr.photos.getInfo', 'format': 'rest', 'nojsoncallback': 1})
DEBUG:flickrapi.core:Calling {'photo_id': '2333478006', 'method': 'flickr.photos.getInfo', 'format': 'rest', 'nojsoncallback': 1}
INFO:flickrapi.core:REST Parser: using lxml.etree
------------------------------------------------------ Captured log call ------------------------------------------------------
INFO     flickrapi.core:core.py:332 Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG    flickrapi.core:core.py:398 Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'method': 'flickr.photos.getInfo', 'format': 'rest', 'nojsoncallback': 1})
DEBUG    flickrapi.core:core.py:371 Calling {'photo_id': '2333478006', 'method': 'flickr.photos.getInfo', 'format': 'rest', 'nojsoncallback': 1}
INFO     flickrapi.core:core.py:271 REST Parser: using lxml.etree
____________________________________________ FormatsTest.test_etree_default_format ____________________________________________

self = <test_flickrapi.FormatsTest testMethod=test_etree_default_format>

    def test_etree_default_format(self):
        '''Test setting the default format to etree'''

        f = self.clasz(key, secret, format='etree')
>       etree = f.photos_getInfo(photo_id=u'2333478006')

tests/test_flickrapi.py:356:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
flickrapi/call_builder.py:38: in __call__
    return self.flickrapi_object.do_flickr_call(self.method_name, **kwargs)
flickrapi/core.py:337: in do_flickr_call
    **params)
flickrapi/core.py:407: in _wrap_in_parser
    return parser(self, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]
rest_xml = b'<?xml version="1.0" encoding="utf-8" ?>\n<rsp stat="fail">\n\t<err code="1" msg="Photo &quot;2333478006&quot; not found (invalid ID)" />\n</rsp>\n'

    @rest_parser('etree')
    def parse_etree(self, rest_xml):
        """Parses a REST XML response from Flickr into an ElementTree object."""

        try:
            from lxml import etree as ElementTree
            LOG.info('REST Parser: using lxml.etree')
        except ImportError:
            try:
                import xml.etree.cElementTree as ElementTree
                LOG.info('REST Parser: using xml.etree.cElementTree')
            except ImportError:
                try:
                    import xml.etree.ElementTree as ElementTree
                    LOG.info('REST Parser: using xml.etree.ElementTree')
                except ImportError:
                    try:
                        import elementtree.cElementTree as ElementTree
                        LOG.info('REST Parser: elementtree.cElementTree')
                    except ImportError:
                        try:
                            import elementtree.ElementTree as ElementTree
                        except ImportError:
                            raise ImportError("You need to install "
                                              "ElementTree to use the etree format")

        rsp = ElementTree.fromstring(rest_xml)
        if rsp.attrib['stat'] == 'ok':
            return rsp

        err = rsp.find('err')
        code = err.attrib.get('code', None)
>       raise FlickrError(six.u('Error: %(code)s: %(msg)s') % err.attrib, code=code)
E       flickrapi.exceptions.FlickrError: Error: 1: Photo "2333478006" not found (invalid ID)

flickrapi/core.py:297: FlickrError
---------------------------------------------------- Captured stderr call -----------------------------------------------------
INFO:flickrapi.core:Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG:flickrapi.core:Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'method': 'flickr.photos.getInfo', 'format': 'rest', 'nojsoncallback': 1})
DEBUG:flickrapi.core:Calling {'photo_id': '2333478006', 'method': 'flickr.photos.getInfo', 'format': 'rest', 'nojsoncallback': 1}
INFO:flickrapi.core:REST Parser: using lxml.etree
------------------------------------------------------ Captured log call ------------------------------------------------------
INFO     flickrapi.core:core.py:332 Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG    flickrapi.core:core.py:398 Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'method': 'flickr.photos.getInfo', 'format': 'rest', 'nojsoncallback': 1})
DEBUG    flickrapi.core:core.py:371 Calling {'photo_id': '2333478006', 'method': 'flickr.photos.getInfo', 'format': 'rest', 'nojsoncallback': 1}
INFO     flickrapi.core:core.py:271 REST Parser: using lxml.etree
_____________________________________________ FormatsTest.test_etree_format_happy _____________________________________________

self = <test_flickrapi.FormatsTest testMethod=test_etree_format_happy>

    def test_etree_format_happy(self):
        '''Test ETree format'''

        etree = self.f_noauth.photos.getInfo(photo_id=u'2333478006',
>                   format='etree')

tests/test_flickrapi.py:343:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
flickrapi/call_builder.py:38: in __call__
    return self.flickrapi_object.do_flickr_call(self.method_name, **kwargs)
flickrapi/core.py:337: in do_flickr_call
    **params)
flickrapi/core.py:407: in _wrap_in_parser
    return parser(self, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]
rest_xml = b'<?xml version="1.0" encoding="utf-8" ?>\n<rsp stat="fail">\n\t<err code="1" msg="Photo &quot;2333478006&quot; not found (invalid ID)" />\n</rsp>\n'

    @rest_parser('etree')
    def parse_etree(self, rest_xml):
        """Parses a REST XML response from Flickr into an ElementTree object."""

        try:
            from lxml import etree as ElementTree
            LOG.info('REST Parser: using lxml.etree')
        except ImportError:
            try:
                import xml.etree.cElementTree as ElementTree
                LOG.info('REST Parser: using xml.etree.cElementTree')
            except ImportError:
                try:
                    import xml.etree.ElementTree as ElementTree
                    LOG.info('REST Parser: using xml.etree.ElementTree')
                except ImportError:
                    try:
                        import elementtree.cElementTree as ElementTree
                        LOG.info('REST Parser: elementtree.cElementTree')
                    except ImportError:
                        try:
                            import elementtree.ElementTree as ElementTree
                        except ImportError:
                            raise ImportError("You need to install "
                                              "ElementTree to use the etree format")

        rsp = ElementTree.fromstring(rest_xml)
        if rsp.attrib['stat'] == 'ok':
            return rsp

        err = rsp.find('err')
        code = err.attrib.get('code', None)
>       raise FlickrError(six.u('Error: %(code)s: %(msg)s') % err.attrib, code=code)
E       flickrapi.exceptions.FlickrError: Error: 1: Photo "2333478006" not found (invalid ID)

flickrapi/core.py:297: FlickrError
---------------------------------------------------- Captured stderr call -----------------------------------------------------
INFO:flickrapi.core:Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG:flickrapi.core:Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'format': 'rest', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1})
DEBUG:flickrapi.core:Calling {'photo_id': '2333478006', 'format': 'rest', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1}
INFO:flickrapi.core:REST Parser: using lxml.etree
------------------------------------------------------ Captured log call ------------------------------------------------------
INFO     flickrapi.core:core.py:332 Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG    flickrapi.core:core.py:398 Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'format': 'rest', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1})
DEBUG    flickrapi.core:core.py:371 Calling {'photo_id': '2333478006', 'format': 'rest', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1}
INFO     flickrapi.core:core.py:271 REST Parser: using lxml.etree
________________________________________________ FormatsTest.test_json_format _________________________________________________

self = <test_flickrapi.FormatsTest testMethod=test_json_format>

    def test_json_format(self):
        '''Test json format (no callback)'''

        data = self.f_noauth.photos.getInfo(photo_id='2333478006',
                                            format='json')
        photo = json.loads(data.decode('utf-8'))
>       location = photo['photo']['location']
E       KeyError: 'photo'

tests/test_flickrapi.py:389: KeyError
---------------------------------------------------- Captured stderr call -----------------------------------------------------
INFO:flickrapi.core:Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG:flickrapi.core:Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'format': 'json', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1})
DEBUG:flickrapi.core:Calling {'photo_id': '2333478006', 'format': 'json', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1}
------------------------------------------------------ Captured log call ------------------------------------------------------
INFO     flickrapi.core:core.py:332 Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG    flickrapi.core:core.py:398 Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'format': 'json', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1})
DEBUG    flickrapi.core:core.py:371 Calling {'photo_id': '2333478006', 'format': 'json', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1}
_____________________________________________ FormatsTest.test_parsed_json_format _____________________________________________

self = <test_flickrapi.FormatsTest testMethod=test_parsed_json_format>

    def test_parsed_json_format(self):
        '''Test parsed json format'''

        photo = self.f_noauth.photos.getInfo(photo_id='2333478006',
>                                            format='parsed-json')

tests/test_flickrapi.py:401:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
flickrapi/call_builder.py:38: in __call__
    return self.flickrapi_object.do_flickr_call(self.method_name, **kwargs)
flickrapi/core.py:337: in do_flickr_call
    **params)
flickrapi/core.py:407: in _wrap_in_parser
    return parser(self, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]
json_string = '{"stat":"fail","code":1,"message":"Photo \\"2333478006\\" not found (invalid ID)"}'

    @rest_parser('parsed-json', 'json')
    def parse_json(self, json_string):
        """Parses a JSON response from Flickr."""

        if isinstance(json_string, six.binary_type):
            json_string = json_string.decode('utf-8')

        import json
        parsed = json.loads(json_string)
        if parsed.get('stat', '') == 'fail':
            raise FlickrError(six.u('Error: %(code)s: %(message)s') % parsed,
>                             code=parsed['code'])
E           flickrapi.exceptions.FlickrError: Error: 1: Photo "2333478006" not found (invalid ID)

flickrapi/core.py:262: FlickrError
---------------------------------------------------- Captured stderr call -----------------------------------------------------
INFO:flickrapi.core:Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG:flickrapi.core:Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'format': 'json', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1})
DEBUG:flickrapi.core:Calling {'photo_id': '2333478006', 'format': 'json', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1}
------------------------------------------------------ Captured log call ------------------------------------------------------
INFO     flickrapi.core:core.py:332 Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG    flickrapi.core:core.py:398 Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'format': 'json', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1})
DEBUG    flickrapi.core:core.py:371 Calling {'photo_id': '2333478006', 'format': 'json', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1}
_______________________________________________ FormatsTest.test_xmlnode_format _______________________________________________

self = <test_flickrapi.FormatsTest testMethod=test_xmlnode_format>

    def test_xmlnode_format(self):
        '''Test XMLNode format'''

        node = self.f_noauth.photos_getInfo(photo_id=u'2333478006',
>                   format='xmlnode')

tests/test_flickrapi.py:363:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
flickrapi/call_builder.py:38: in __call__
    return self.flickrapi_object.do_flickr_call(self.method_name, **kwargs)
flickrapi/core.py:337: in do_flickr_call
    **params)
flickrapi/core.py:407: in _wrap_in_parser
    return parser(self, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]
rest_xml = b'<?xml version="1.0" encoding="utf-8" ?>\n<rsp stat="fail">\n\t<err code="1" msg="Photo &quot;2333478006&quot; not found (invalid ID)" />\n</rsp>\n'

    @rest_parser('xmlnode')
    def parse_xmlnode(self, rest_xml):
        """Parses a REST XML response from Flickr into an XMLNode object."""

        rsp = XMLNode.parse(rest_xml, store_xml=True)
        if rsp['stat'] == 'ok':
            return rsp

        err = rsp.err[0]
>       raise FlickrError(six.u('Error: %(code)s: %(msg)s') % err, code=err['code'])
E       flickrapi.exceptions.FlickrError: Error: 1: Photo "2333478006" not found (invalid ID)

flickrapi/core.py:249: FlickrError
---------------------------------------------------- Captured stderr call -----------------------------------------------------
INFO:flickrapi.core:Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG:flickrapi.core:Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'format': 'rest', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1})
DEBUG:flickrapi.core:Calling {'photo_id': '2333478006', 'format': 'rest', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1}
------------------------------------------------------ Captured log call ------------------------------------------------------
INFO     flickrapi.core:core.py:332 Calling {'method': 'flickr.photos.getInfo', 'format': 'etree', 'nojsoncallback': 1}
DEBUG    flickrapi.core:core.py:398 Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'photo_id': '2333478006', 'format': 'rest', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1})
DEBUG    flickrapi.core:core.py:371 Calling {'photo_id': '2333478006', 'format': 'rest', 'method': 'flickr.photos.getInfo', 'nojsoncallback': 1}
________________________________________________ RealWalkerTest.test_walk_set _________________________________________________

self = <test_flickrapi.RealWalkerTest testMethod=test_walk_set>

    def test_walk_set(self):
        # Check that we get a generator, and not a list of results.
        gen = self.f.walk_set('72157611690250298', per_page=8)
        self.assertEqual(types.GeneratorType, type(gen))

        # I happen to know that that set contains 24 photos, and it is
        # very unlikely that this will ever change (photos of a past
        # event)
>       self.assertEqual(24, len(list(gen)))

tests/test_flickrapi.py:432:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
flickrapi/core.py:688: in data_walker
    rsp = method(page=page, **params)
flickrapi/call_builder.py:38: in __call__
    return self.flickrapi_object.do_flickr_call(self.method_name, **kwargs)
flickrapi/core.py:337: in do_flickr_call
    **params)
flickrapi/core.py:407: in _wrap_in_parser
    return parser(self, data)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]
rest_xml = b'<?xml version="1.0" encoding="utf-8" ?>\n<rsp stat="fail">\n\t<err code="1" msg="Photoset not found" />\n</rsp>\n'

    @rest_parser('etree')
    def parse_etree(self, rest_xml):
        """Parses a REST XML response from Flickr into an ElementTree object."""

        try:
            from lxml import etree as ElementTree
            LOG.info('REST Parser: using lxml.etree')
        except ImportError:
            try:
                import xml.etree.cElementTree as ElementTree
                LOG.info('REST Parser: using xml.etree.cElementTree')
            except ImportError:
                try:
                    import xml.etree.ElementTree as ElementTree
                    LOG.info('REST Parser: using xml.etree.ElementTree')
                except ImportError:
                    try:
                        import elementtree.cElementTree as ElementTree
                        LOG.info('REST Parser: elementtree.cElementTree')
                    except ImportError:
                        try:
                            import elementtree.ElementTree as ElementTree
                        except ImportError:
                            raise ImportError("You need to install "
                                              "ElementTree to use the etree format")

        rsp = ElementTree.fromstring(rest_xml)
        if rsp.attrib['stat'] == 'ok':
            return rsp

        err = rsp.find('err')
        code = err.attrib.get('code', None)
>       raise FlickrError(six.u('Error: %(code)s: %(msg)s') % err.attrib, code=code)
E       flickrapi.exceptions.FlickrError: Error: 1: Photoset not found

flickrapi/core.py:297: FlickrError
---------------------------------------------------- Captured stderr call -----------------------------------------------------
DEBUG:flickrapi.core:Calling getPhotos(page=1 of 1, {'photoset_id': '72157611690250298', 'per_page': 8})
INFO:flickrapi.core:Calling {'method': 'flickr.photosets.getPhotos', 'format': 'etree', 'nojsoncallback': 1}
DEBUG:flickrapi.core:Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'page': 1, 'photoset_id': '72157611690250298', 'per_page': 8, 'method': 'flickr.photosets.getPhotos', 'format': 'rest', 'nojsoncallback': 1})
DEBUG:flickrapi.core:Calling {'page': 1, 'photoset_id': '72157611690250298', 'per_page': 8, 'method': 'flickr.photosets.getPhotos', 'format': 'rest', 'nojsoncallback': 1}
INFO:flickrapi.core:REST Parser: using lxml.etree
------------------------------------------------------ Captured log call ------------------------------------------------------
DEBUG    flickrapi.core:core.py:687 Calling getPhotos(page=1 of 1, {'photoset_id': '72157611690250298', 'per_page': 8})
INFO     flickrapi.core:core.py:332 Calling {'method': 'flickr.photosets.getPhotos', 'format': 'etree', 'nojsoncallback': 1}
DEBUG    flickrapi.core:core.py:398 Wrapping call <bound method FlickrAPI._flickr_call of [FlickrAPI for key "ecd01ab8f00faf13e1f8801586e126fd"]>(self, (), {'timeout': None, 'page': 1, 'photoset_id': '72157611690250298', 'per_page': 8, 'method': 'flickr.photosets.getPhotos', 'format': 'rest', 'nojsoncallback': 1})
DEBUG    flickrapi.core:core.py:371 Calling {'page': 1, 'photoset_id': '72157611690250298', 'per_page': 8, 'method': 'flickr.photosets.getPhotos', 'format': 'rest', 'nojsoncallback': 1}
INFO     flickrapi.core:core.py:271 REST Parser: using lxml.etree
====================================================== warnings summary =======================================================
/usr/local/lib/python3.7/site-packages/requests_toolbelt/_compat.py:11
/usr/local/lib/python3.7/site-packages/requests_toolbelt/_compat.py:11
  /usr/local/lib/python3.7/site-packages/requests_toolbelt/_compat.py:11: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
    from collections import Mapping, MutableMapping

tests/test_tokencache.py::SimpleTokenCacheTest::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:14: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(self.tc.token, 'nümbér')

tests/test_tokencache.py::TokenCacheTest::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:44: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(self.tc.token, u'nümbér')

tests/test_tokencache.py::TokenCacheTest::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:46: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(on_disk.decode('utf8'), u'nümbér')

tests/test_tokencache.py::TokenCacheTest::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:50: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(self.tc.token, u'nümbér')

tests/test_tokencache.py::TokenCacheTest::test_username
  /private/tmp/flickrapi/tests/test_tokencache.py:69: DeprecationWarning: Please use assertNotEqual instead.
    self.assertNotEquals(tc_path, user_path)

tests/test_tokencache.py::OAuthTokenCache::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:99: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(self.tc.token.token, u'nümbér')

tests/test_tokencache.py::OAuthTokenCache::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:103: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(self.tc.token.token, u'nümbér')

tests/test_tokencache.py::OAuthTokenCache::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:104: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(self.tc.token.token_secret, u'səcret-tøken')

tests/test_tokencache.py::OAuthTokenCache::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:105: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(self.tc.token.access_level, u'read')

tests/test_tokencache.py::OAuthTokenCache::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:106: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(self.tc.token.fullname, u'My Full Name™')

tests/test_tokencache.py::OAuthTokenCache::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:107: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(self.tc.token.username, u'üsernåme')

tests/test_tokencache.py::OAuthTokenCache::test_get_set_del
  /private/tmp/flickrapi/tests/test_tokencache.py:108: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(self.tc.token.user_nsid, u'user—nsid')

-- Docs: https://docs.pytest.org/en/latest/warnings.html
===Flaky Test Report===

===End Flaky Test Report===
========================================== 7 failed, 35 passed, 14 warnings in 5.79s ==========================================