2424import os .path
2525
2626import werkzeug
27+ import contextlib
2728
2829
2930def setup (app ):
@@ -36,6 +37,7 @@ def linkcode_resolve(domain, info):
3637 # TODO: js?
3738 if domain != 'py' :
3839 return None
40+
3941 if not (app .config .github_user and app .config .github_project ):
4042 return None
4143
@@ -53,10 +55,8 @@ def linkcode_resolve(domain, info):
5355 return None
5456
5557 # get original from decorated methods
56- try :
57- obj = getattr (obj , '_orig' )
58- except AttributeError :
59- pass
58+ with contextlib .suppress (AttributeError ):
59+ obj = obj ._orig
6060
6161 try :
6262 obj_source_path = inspect .getsourcefile (obj )
@@ -65,37 +65,34 @@ def linkcode_resolve(domain, info):
6565 # obj doesn't have a module, or something
6666 return None
6767
68- import odoo
6968 # FIXME: make finding project root project-independent
70- project_root = os .path .join (os .path .dirname (odoo .__file__ ), '..' )
69+ if module .startswith ('odoo.upgrade.util' ):
70+ from odoo .upgrade import util
71+ project = 'upgrade-util'
72+ project_root = os .path .join (os .path .dirname (util .__file__ ), '../..' )
73+ else :
74+ import odoo
75+ project = 'odoo'
76+ project_root = os .path .join (os .path .dirname (odoo .__file__ ), '..' )
7177 return make_github_link (
7278 app ,
73- os .path .relpath (obj_source_path , project_root ),
74- line ,
75- odoo_repository = True )
79+ project = project ,
80+ path = os .path .relpath (obj_source_path , project_root ),
81+ line = line ,
82+ )
7683 app .config .linkcode_resolve = linkcode_resolve
7784
7885 return {
7986 'parallel_read_safe' : True ,
8087 'parallel_write_safe' : True
8188 }
8289
83- def make_github_link (app , path , line = None , mode = "blob" , odoo_repository = False ):
84- config = app .config
85-
86- user = config .github_user
87- project = config .github_project
88- if odoo_repository :
89- user = 'odoo'
90- project = 'odoo'
91-
92- urlpath = "/{user}/{project}/{mode}/{branch}/{path}" .format (
93- user = user ,
94- project = project ,
95- branch = config .version or 'master' ,
96- path = path ,
97- mode = mode ,
98- )
90+ def make_github_link (app , project , path , line = None , mode = "blob" ):
91+ branch = app .config .version or 'master'
92+ if project == 'upgrade-util' :
93+ branch = 'master'
94+
95+ urlpath = f"/{ app .config .github_user } /{ project } /{ mode } /{ branch } /{ path } "
9996 return werkzeug .urls .url_unparse ((
10097 'https' ,
10198 'github.com' ,
@@ -116,4 +113,4 @@ def add_doc_link(app, pagename, templatename, context, doctree):
116113 source_suffix = app .config .source_suffix
117114 source_suffix = next (iter (source_suffix ))
118115 context ['github_link' ] = lambda mode = 'edit' : make_github_link (
119- app , f'content/{ pagename } { source_suffix } ' , mode = mode )
116+ app , project = app . config . github_project , path = f'content/{ pagename } { source_suffix } ' , mode = mode )
0 commit comments