server/test/unittest_datafeed.py
changeset 10832 2350424585f8
parent 10805 de4403644b1c
child 10956 208c9ac8edbb
equal deleted inserted replaced
10831:f1b5a5ea0da0 10832:2350424585f8
       
     1 # coding: utf-8
     1 # copyright 2011-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     2 # copyright 2011-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     3 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     3 #
     4 #
     4 # This file is part of CubicWeb.
     5 # This file is part of CubicWeb.
     5 #
     6 #
    25 
    26 
    26 class DataFeedTC(CubicWebTC):
    27 class DataFeedTC(CubicWebTC):
    27     def setup_database(self):
    28     def setup_database(self):
    28         with self.admin_access.repo_cnx() as cnx:
    29         with self.admin_access.repo_cnx() as cnx:
    29             with self.base_parser(cnx):
    30             with self.base_parser(cnx):
    30                 cnx.create_entity('CWSource', name=u'myfeed', type=u'datafeed',
    31                 cnx.create_entity('CWSource', name=u'ô myfeed', type=u'datafeed',
    31                                   parser=u'testparser', url=u'ignored',
    32                                   parser=u'testparser', url=u'ignored',
    32                                   config=u'synchronization-interval=1min')
    33                                   config=u'synchronization-interval=1min')
    33                 cnx.commit()
    34                 cnx.commit()
    34 
    35 
    35     @contextmanager
    36     @contextmanager
    45                     self.notify_updated(entity)
    46                     self.notify_updated(entity)
    46             def before_entity_copy(self, entity, sourceparams):
    47             def before_entity_copy(self, entity, sourceparams):
    47                 entity.cw_edited.update(sourceparams['item'])
    48                 entity.cw_edited.update(sourceparams['item'])
    48 
    49 
    49         with self.temporary_appobjects(AParser):
    50         with self.temporary_appobjects(AParser):
    50             if 'myfeed' in self.repo.sources_by_uri:
    51             if u'ô myfeed' in self.repo.sources_by_uri:
    51                 yield self.repo.sources_by_uri['myfeed']._get_parser(session)
    52                 yield self.repo.sources_by_uri[u'ô myfeed']._get_parser(session)
    52             else:
    53             else:
    53                 yield
    54                 yield
    54 
    55 
    55     def test(self):
    56     def test(self):
    56         self.assertIn('myfeed', self.repo.sources_by_uri)
    57         self.assertIn(u'ô myfeed', self.repo.sources_by_uri)
    57         dfsource = self.repo.sources_by_uri['myfeed']
    58         dfsource = self.repo.sources_by_uri[u'ô myfeed']
    58         self.assertNotIn('use_cwuri_as_url', dfsource.__dict__)
    59         self.assertNotIn('use_cwuri_as_url', dfsource.__dict__)
    59         self.assertEqual({'type': u'datafeed', 'uri': u'myfeed', 'use-cwuri-as-url': True},
    60         self.assertEqual({'type': u'datafeed', 'uri': u'ô myfeed', 'use-cwuri-as-url': True},
    60                          dfsource.public_config)
    61                          dfsource.public_config)
    61         self.assertEqual(dfsource.use_cwuri_as_url, True)
    62         self.assertEqual(dfsource.use_cwuri_as_url, True)
    62         self.assertEqual(dfsource.latest_retrieval, None)
    63         self.assertEqual(dfsource.latest_retrieval, None)
    63         self.assertEqual(dfsource.synchro_interval, timedelta(seconds=60))
    64         self.assertEqual(dfsource.synchro_interval, timedelta(seconds=60))
    64         self.assertFalse(dfsource.fresh())
    65         self.assertFalse(dfsource.fresh())
       
    66         # ensure source's logger name has been unormalized
       
    67         self.assertEqual(dfsource.info.__self__.name, 'cubicweb.sources.o myfeed')
    65 
    68 
    66         with self.repo.internal_cnx() as cnx:
    69         with self.repo.internal_cnx() as cnx:
    67             with self.base_parser(cnx):
    70             with self.base_parser(cnx):
    68                 stats = dfsource.pull_data(cnx, force=True)
    71                 stats = dfsource.pull_data(cnx, force=True)
    69                 cnx.commit()
    72                 cnx.commit()
    75                 self.assertEqual(stats['updated'], set())
    78                 self.assertEqual(stats['updated'], set())
    76                 # test imported entities
    79                 # test imported entities
    77                 self.assertEqual(entity.title, 'cubicweb.org')
    80                 self.assertEqual(entity.title, 'cubicweb.org')
    78                 self.assertEqual(entity.content, 'the cw web site')
    81                 self.assertEqual(entity.content, 'the cw web site')
    79                 self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/')
    82                 self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/')
    80                 self.assertEqual(entity.cw_source[0].name, 'myfeed')
    83                 self.assertEqual(entity.cw_source[0].name, u'ô myfeed')
    81                 self.assertEqual(entity.cw_metainformation(),
    84                 self.assertEqual(entity.cw_metainformation(),
    82                                  {'type': 'Card',
    85                                  {'type': 'Card',
    83                                   'source': {'uri': 'myfeed', 'type': 'datafeed', 'use-cwuri-as-url': True},
    86                                   'source': {'uri': u'ô myfeed', 'type': 'datafeed', 'use-cwuri-as-url': True},
    84                                   'extid': b'http://www.cubicweb.org/'}
    87                                   'extid': b'http://www.cubicweb.org/'}
    85                                  )
    88                                  )
    86                 self.assertEqual(entity.absolute_url(), 'http://www.cubicweb.org/')
    89                 self.assertEqual(entity.absolute_url(), 'http://www.cubicweb.org/')
    87                 # test repo cache keys
    90                 # test repo cache keys
    88                 self.assertEqual(self.repo._type_source_cache[entity.eid],
    91                 self.assertEqual(self.repo._type_source_cache[entity.eid],
    89                                  ('Card', b'http://www.cubicweb.org/', 'myfeed'))
    92                                  ('Card', b'http://www.cubicweb.org/', u'ô myfeed'))
    90                 self.assertEqual(self.repo._extid_cache[b'http://www.cubicweb.org/'],
    93                 self.assertEqual(self.repo._extid_cache[b'http://www.cubicweb.org/'],
    91                                  entity.eid)
    94                                  entity.eid)
    92                 # test repull
    95                 # test repull
    93                 stats = dfsource.pull_data(cnx, force=True)
    96                 stats = dfsource.pull_data(cnx, force=True)
    94                 self.assertEqual(stats['created'], set())
    97                 self.assertEqual(stats['created'], set())
    98                 self.repo._extid_cache.clear()
   101                 self.repo._extid_cache.clear()
    99                 stats = dfsource.pull_data(cnx, force=True)
   102                 stats = dfsource.pull_data(cnx, force=True)
   100                 self.assertEqual(stats['created'], set())
   103                 self.assertEqual(stats['created'], set())
   101                 self.assertEqual(stats['updated'], set((entity.eid,)))
   104                 self.assertEqual(stats['updated'], set((entity.eid,)))
   102                 self.assertEqual(self.repo._type_source_cache[entity.eid],
   105                 self.assertEqual(self.repo._type_source_cache[entity.eid],
   103                                  ('Card', b'http://www.cubicweb.org/', 'myfeed'))
   106                                  ('Card', b'http://www.cubicweb.org/', u'ô myfeed'))
   104                 self.assertEqual(self.repo._extid_cache[b'http://www.cubicweb.org/'],
   107                 self.assertEqual(self.repo._extid_cache[b'http://www.cubicweb.org/'],
   105                                  entity.eid)
   108                                  entity.eid)
   106 
   109 
   107                 self.assertEqual(dfsource.source_cwuris(cnx),
   110                 self.assertEqual(dfsource.source_cwuris(cnx),
   108                                  {b'http://www.cubicweb.org/': (entity.eid, 'Card')}
   111                                  {b'http://www.cubicweb.org/': (entity.eid, 'Card')})
   109                              )
       
   110                 self.assertTrue(dfsource.latest_retrieval)
   112                 self.assertTrue(dfsource.latest_retrieval)
   111                 self.assertTrue(dfsource.fresh())
   113                 self.assertTrue(dfsource.fresh())
   112 
   114 
   113         # test_rename_source
   115         # test_rename_source
   114         with self.admin_access.repo_cnx() as cnx:
   116         with self.admin_access.repo_cnx() as cnx:
   115             cnx.execute('SET S name "myrenamedfeed" WHERE S is CWSource, S name "myfeed"')
   117             cnx.entity_from_eid(dfsource.eid).cw_set(name=u"myrenamedfeed")
   116             cnx.commit()
   118             cnx.commit()
   117             entity = cnx.execute('Card X').get_entity(0, 0)
   119             entity = cnx.execute('Card X').get_entity(0, 0)
   118             self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/')
   120             self.assertEqual(entity.cwuri, 'http://www.cubicweb.org/')
   119             self.assertEqual(entity.cw_source[0].name, 'myrenamedfeed')
   121             self.assertEqual(entity.cw_source[0].name, 'myrenamedfeed')
   120             self.assertEqual(entity.cw_metainformation(),
   122             self.assertEqual(entity.cw_metainformation(),