mirror of
https://github.com/zulip/zulip.git
synced 2025-11-20 22:48:16 +00:00
lib/integrations: Add stream_name attribute to Integration.
Instead of using the name of the integration as a recommended stream name in its documentation, the Integration object now has a dedicated attribute stream_name to explicitly specify a recommended stream name for when it is different than the name of the integration itself.
This commit is contained in:
@@ -32,8 +32,9 @@ class Integration(object):
|
||||
DEFAULT_LOGO_STATIC_PATH_PNG = 'static/images/integrations/logos/{name}.png'
|
||||
DEFAULT_LOGO_STATIC_PATH_SVG = 'static/images/integrations/logos/{name}.svg'
|
||||
|
||||
def __init__(self, name, client_name, logo=None, secondary_line_text=None, display_name=None, doc=None):
|
||||
# type: (str, str, Optional[str], Optional[str], Optional[str], Optional[str]) -> None
|
||||
def __init__(self, name, client_name, logo=None, secondary_line_text=None,
|
||||
display_name=None, doc=None, stream_name=None):
|
||||
# type: (str, str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]) -> None
|
||||
self.name = name
|
||||
self.client_name = client_name
|
||||
self.secondary_line_text = secondary_line_text
|
||||
@@ -51,6 +52,10 @@ class Integration(object):
|
||||
display_name = name.title()
|
||||
self.display_name = display_name
|
||||
|
||||
if stream_name is None:
|
||||
stream_name = self.name
|
||||
self.stream_name = stream_name
|
||||
|
||||
def is_enabled(self):
|
||||
# type: () -> bool
|
||||
return True
|
||||
@@ -82,11 +87,11 @@ class WebhookIntegration(Integration):
|
||||
DEFAULT_DOC_PATH = '{name}/doc.{ext}'
|
||||
|
||||
def __init__(self, name, client_name=None, logo=None, secondary_line_text=None,
|
||||
function=None, url=None, display_name=None, doc=None):
|
||||
# type: (str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]) -> None
|
||||
function=None, url=None, display_name=None, doc=None, stream_name=None):
|
||||
# type: (str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]) -> None
|
||||
if client_name is None:
|
||||
client_name = self.DEFAULT_CLIENT_NAME.format(name=name.title())
|
||||
super(WebhookIntegration, self).__init__(name, client_name, logo, secondary_line_text, display_name)
|
||||
super(WebhookIntegration, self).__init__(name, client_name, logo, secondary_line_text, display_name, stream_name=stream_name)
|
||||
|
||||
if function is None:
|
||||
function = self.DEFAULT_FUNCTION_PATH.format(name=name)
|
||||
@@ -135,13 +140,13 @@ class GithubIntegration(WebhookIntegration):
|
||||
We want to have one generic url with dispatch function for github service and github webhook.
|
||||
"""
|
||||
def __init__(self, name, client_name=None, logo=None, secondary_line_text=None,
|
||||
function=None, url=None, display_name=None, doc=None):
|
||||
# type: (str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]) -> None
|
||||
function=None, url=None, display_name=None, doc=None, stream_name=None):
|
||||
# type: (str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]) -> None
|
||||
url = self.DEFAULT_URL.format(name='github')
|
||||
|
||||
super(GithubIntegration, self).__init__(
|
||||
name, client_name, logo, secondary_line_text,
|
||||
function, url, display_name, doc)
|
||||
function, url, display_name, doc, stream_name)
|
||||
|
||||
@property
|
||||
def url_object(self):
|
||||
@@ -153,7 +158,12 @@ WEBHOOK_INTEGRATIONS = [
|
||||
WebhookIntegration('appfollow', display_name='AppFollow'),
|
||||
WebhookIntegration('beanstalk'),
|
||||
WebhookIntegration('basecamp'),
|
||||
WebhookIntegration('bitbucket2', logo='static/images/integrations/logos/bitbucket.svg', display_name='Bitbucket'),
|
||||
WebhookIntegration(
|
||||
'bitbucket2',
|
||||
logo='static/images/integrations/logos/bitbucket.svg',
|
||||
display_name='Bitbucket',
|
||||
stream_name='bitbucket'
|
||||
),
|
||||
WebhookIntegration('bitbucket', display_name='Bitbucket', secondary_line_text='(Enterprise)'),
|
||||
WebhookIntegration('circleci', display_name='CircleCI'),
|
||||
WebhookIntegration('codeship'),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from typing import Dict, Optional, Any
|
||||
from os.path import basename, splitext
|
||||
|
||||
from django.conf import settings
|
||||
from django.template import Library, loader, engines
|
||||
@@ -82,25 +83,20 @@ def render_markdown_path(markdown_file_path, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
if markdown_file_path.endswith('.md'):
|
||||
if context.get('integrations_dict') is not None:
|
||||
integration_dir = None
|
||||
if markdown_file_path.endswith('doc.md'):
|
||||
integration_dir = markdown_file_path.split('/')[0]
|
||||
elif 'integrations' in markdown_file_path.split('/'):
|
||||
integration_dir = splitext(basename(markdown_file_path))[0]
|
||||
|
||||
integration = context['integrations_dict'][integration_dir]
|
||||
if integration.name == 'bitbucket2':
|
||||
context['integration_name'] = 'bitbucket'
|
||||
else:
|
||||
|
||||
context['integration_name'] = integration.name
|
||||
context['integration_display_name'] = integration.display_name
|
||||
context['recommended_stream_name'] = integration.stream_name
|
||||
if hasattr(integration, 'url'):
|
||||
context['integration_url'] = integration.url[3:]
|
||||
else:
|
||||
integration_dir = markdown_file_path.split('/')[-1].split('.')[0]
|
||||
try:
|
||||
if integration_dir in list(context['integrations_dict'].keys()):
|
||||
integration = context['integrations_dict'][integration_dir]
|
||||
context['integration_name'] = integration.name
|
||||
context['integration_display_name'] = integration.display_name
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
jinja = engines['Jinja2']
|
||||
markdown_string = jinja.env.loader.get_source(jinja.env, markdown_file_path)[0]
|
||||
|
||||
Reference in New Issue
Block a user