# HG changeset patch # User Sylvain Thénault # Date 1475248695 -7200 # Node ID 7b7108eb81789f6ff70e4a804800910158f786c6 # Parent 3f81636a75dbed6b7c86431d19de85281585a585 [entity] Stop linking to external site for external entities This behaviour was ok when we had "true" multi-sources but its rather painful with datafeed sources. Also, it makes absolute_url() costlier than what it should. Besides, it relies on cw_metainformation()['source'] that is pending for removal. Instead, add a link to the original object in the metadata view (the one that displays eid and source at the bottom right corner of the primary view). Related to #15538288. diff -r 3f81636a75db -r 7b7108eb8178 cubicweb/entity.py --- a/cubicweb/entity.py Thu Sep 29 22:23:16 2016 +0200 +++ b/cubicweb/entity.py Fri Sep 30 17:18:15 2016 +0200 @@ -655,26 +655,16 @@ method = args[0] else: method = None - # in linksearch mode, we don't want external urls else selecting - # the object for use in the relation is tricky - # XXX search_state is web specific - use_ext_id = False - if 'base_url' not in kwargs and \ - getattr(self._cw, 'search_state', ('normal',))[0] == 'normal': - sourcemeta = self.cw_metainformation()['source'] - if sourcemeta.get('use-cwuri-as-url'): - return self.cwuri # XXX consider kwargs? - if sourcemeta.get('base-url'): - kwargs['base_url'] = sourcemeta['base-url'] - use_ext_id = True if method in (None, 'view'): - kwargs['_restpath'] = self.rest_path(use_ext_id) + kwargs['_restpath'] = self.rest_path() else: kwargs['rql'] = 'Any X WHERE X eid %s' % self.eid return self._cw.build_url(method, **kwargs) - def rest_path(self, use_ext_eid=False): # XXX cw_rest_path + def rest_path(self, *args, **kwargs): # XXX cw_rest_path """returns a REST-like (relative) path for this entity""" + if args or kwargs: + warn("[3.24] rest_path doesn't take parameters anymore", DeprecationWarning) mainattr, needcheck = self.cw_rest_attr_info() etype = str(self.e_schema) path = etype.lower() @@ -696,10 +686,7 @@ mainattr = 'eid' path = None if mainattr == 'eid': - if use_ext_eid: - value = self.cw_metainformation()['extid'] - else: - value = self.eid + value = self.eid if path is None: # fallback url: / url is used as cw entities uri, # prefer it to //eid/ @@ -889,9 +876,7 @@ selected.append((attr, var)) # +1 since this doesn't include the main variable lastattr = len(selected) + 1 - # don't fetch extra relation if attributes specified or of the entity is - # coming from an external source (may lead to error) - if attributes is None and self.cw_metainformation()['source']['uri'] == 'system': + if attributes is None: # fetch additional relations (restricted to 0..1 relations) for rschema, role in self._cw_to_complete_relations(): rtype = rschema.type diff -r 3f81636a75db -r 7b7108eb8178 cubicweb/server/test/unittest_datafeed.py --- a/cubicweb/server/test/unittest_datafeed.py Thu Sep 29 22:23:16 2016 +0200 +++ b/cubicweb/server/test/unittest_datafeed.py Fri Sep 30 17:18:15 2016 +0200 @@ -89,7 +89,6 @@ 'source': {'uri': u'ô myfeed', 'type': 'datafeed', 'use-cwuri-as-url': True}, 'extid': b'http://www.cubicweb.org/'} ) - self.assertEqual(entity.absolute_url(), 'http://www.cubicweb.org/') # test repo cache keys self.assertEqual(self.repo._type_source_cache[entity.eid], ('Card', b'http://www.cubicweb.org/', u'ô myfeed')) diff -r 3f81636a75db -r 7b7108eb8178 cubicweb/test/unittest_entity.py --- a/cubicweb/test/unittest_entity.py Thu Sep 29 22:23:16 2016 +0200 +++ b/cubicweb/test/unittest_entity.py Fri Sep 30 17:18:15 2016 +0200 @@ -831,18 +831,13 @@ note.cw_set(ecrit_par=person.eid) self.assertEqual(len(person.reverse_ecrit_par), 2) - def test_metainformation_and_external_absolute_url(self): + def test_metainformation(self): with self.admin_access.web_request() as req: note = req.create_entity('Note', type=u'z') metainf = note.cw_metainformation() self.assertEqual(metainf, {'source': {'type': 'native', 'uri': 'system', 'use-cwuri-as-url': False}, 'type': u'Note', 'extid': None}) - self.assertEqual(note.absolute_url(), 'http://testing.fr/cubicweb/note/%s' % note.eid) - metainf['source'] = metainf['source'].copy() - metainf['source']['base-url'] = 'http://cubicweb2.com/' - metainf['extid'] = 1234 - self.assertEqual(note.absolute_url(), 'http://cubicweb2.com/note/1234') def test_absolute_url_empty_field(self): with self.admin_access.web_request() as req: diff -r 3f81636a75db -r 7b7108eb8178 cubicweb/web/views/baseviews.py --- a/cubicweb/web/views/baseviews.py Thu Sep 29 22:23:16 2016 +0200 +++ b/cubicweb/web/views/baseviews.py Fri Sep 30 17:18:15 2016 +0200 @@ -463,10 +463,13 @@ else: self.w(u' %s ' % _('created_by')) self.w(u'%s' % entity.creator.name()) - meta = entity.cw_metainformation() - if meta['source']['uri'] != 'system': + source = entity.cw_source[0] + if source.name != 'system': self.w(u' (%s' % _('cw_source')) - self.w(u' %s)' % meta['source']['uri']) + self.w(u' %s)' % source.view('oneline')) + source_def = self._cw.source_defs()[source.name] + if source_def.get('use-cwuri-as-url'): + self.w(u' %s' % (entity.cwuri, self._cw._('view original'))) self.w(u'')