extension development

36 views
Skip to first unread message

Stuart

unread,
Oct 5, 2021, 11:56:44 AM10/5/21
to Review Board Community
Hi,

It was unclear to me from the documentation, but what is the appropriate setup for developing an extension? Is it enough to just pip install ReviewBoard? Do I need to set up a full mock site? Do I need to create a full development setup?

Thanks,

- Stuart

David Trowbridge

unread,
Oct 5, 2021, 12:27:15 PM10/5/21
to reviewboard
Stuart,

While it's theoretically possible to develop against an installed package, you'll generally have much better success if you set up a dev environment. See https://www.notion.so/reviewboard/Getting-Started-da208d46de1d47d8b38e8b5ddcb3dd44 for details.

David

--
Supercharge your Review Board with Power Pack: https://www.reviewboard.org/powerpack/
Want us to host Review Board for you? Check out RBCommons: https://rbcommons.com/
Happy user? Let us know! https://www.reviewboard.org/users/
---
You received this message because you are subscribed to the Google Groups "Review Board Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to reviewboard...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/reviewboard/935bbb4e-0733-4712-8f81-d18a244242f0n%40googlegroups.com.

Stuart

unread,
Oct 8, 2021, 5:20:46 AM10/8/21
to Review Board Community
Hi David,

thanks for your answer. When following the setup guide ( on Linux, for rb3), I get a pip error when setting up djiblets:

ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.
django-braces 1.14.0 requires Django>=1.11.0, but you'll have django 1.6.11 which is incompatible

The rest of reviewboard 3 setup seems to go fine. However, when I go to create a wheel of my extension (python setup.py bdist_wheel) I get an error that may be related:

running bdist_wheel
running build
running build_py
running build_static_files
Traceback (most recent call last):
File "setup.py", line 22, in <module>
'myExtension = myExtension.extension:myExtensionClass',
File "/home/stuart/reviewboard/src/rb3/reviewboard/reviewboard/extensions/packaging.py", line 48, in setup
setuptools_setup(**setup_kwargs)
File "/home/stuart/envs/reviewboard-3.0/lib/python2.7/site-packages/setuptools/__init__.py", line 162, in setup
return distutils.core.setup(**attrs)
File "/home/stuart/.pyenv/versions/2.7.18/lib/python2.7/distutils/core.py", line 151, in setup
dist.run_commands()
File "/home/stuart/.pyenv/versions/2.7.18/lib/python2.7/distutils/dist.py", line 953, in run_commands
self.run_command(cmd)
File "/home/stuart/.pyenv/versions/2.7.18/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/home/stuart/envs/reviewboard-3.0/lib/python2.7/site-packages/wheel/bdist_wheel.py", line 299, in run
self.run_command('build')
File "/home/stuart/.pyenv/versions/2.7.18/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/home/stuart/.pyenv/versions/2.7.18/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/home/stuart/.pyenv/versions/2.7.18/lib/python2.7/distutils/command/build.py", line 127, in run
self.run_command(cmd_name)
File "/home/stuart/.pyenv/versions/2.7.18/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/home/stuart/.pyenv/versions/2.7.18/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/home/stuart/reviewboard/src/rb3/djblets/djblets/extensions/packaging.py", line 467, in run
self.run_command('build_static_files')
File "/home/stuart/.pyenv/versions/2.7.18/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/home/stuart/.pyenv/versions/2.7.18/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/home/stuart/reviewboard/src/rb3/djblets/djblets/extensions/packaging.py", line 294, in run
extension = entrypoint.load(require=False)
File "/home/stuart/envs/reviewboard-3.0/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2443, in load
return self.resolve()
File "/home/stuart/envs/reviewboard-3.0/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2449, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/home/stuart/reviewboard/extensions/myExtension/myExtension/extension.py", line 2, in <module>
from reviewboard.extensions.hooks import FileAttachmentThumbnailHook, ReviewUIHook
File "/home/stuart/reviewboard/src/rb3/reviewboard/reviewboard/extensions/hooks.py", line 49, in <module>
from reviewboard.urls import (diffviewer_url_names,
File "/home/stuart/reviewboard/src/rb3/reviewboard/reviewboard/urls.py", line 20, in <module>
extension_manager = get_extension_manager()
File "/home/stuart/reviewboard/src/rb3/reviewboard/reviewboard/extensions/base.py", line 57, in get_extension_manager
_extension_manager = ExtensionManager('reviewboard.extensions')
File "/home/stuart/reviewboard/src/rb3/djblets/djblets/extensions/manager.py", line 283, in __init__
self._gen_sync = GenerationSynchronizer('extensionmgr:%s:gen' % key)
File "/home/stuart/reviewboard/src/rb3/djblets/djblets/cache/synchronizer.py", line 62, in __init__
self._fetch_or_create_sync_gen()
File "/home/stuart/reviewboard/src/rb3/djblets/djblets/cache/synchronizer.py", line 115, in _fetch_or_create_sync_gen
if cache.add(self.cache_key, sync_gen):
File "/home/stuart/reviewboard/src/rb3/djblets/djblets/cache/forwarding_backend.py", line 99, in __getattribute__
return self.backend.__getattribute__(name)
File "/home/stuart/reviewboard/src/rb3/djblets/djblets/cache/forwarding_backend.py", line 97, in __getattribute__
return object.__getattribute__(self, name)
File "/home/stuart/reviewboard/src/rb3/djblets/djblets/cache/forwarding_backend.py", line 41, in backend
self._load_backend()
File "/home/stuart/reviewboard/src/rb3/djblets/djblets/cache/forwarding_backend.py", line 84, in _load_backend
self._backend = get_cache(self._cache_name)
File "/home/stuart/envs/reviewboard-3.0/lib/python2.7/site-packages/django/core/cache/__init__.py", line 130, in get_cache
"Could not find backend '%s': %s" % (backend, e))
django.core.cache.backends.base.InvalidCacheBackendError: Could not find backend 'forwarded_backend': Could not find backend 'forwarded_backend': forwarded_backend doesn't look like a module path




Any thoughts what the issue might be? Thanks for your help.

- Stuart
Reply all
Reply to author
Forward
0 new messages