mirror of
https://github.com/zulip/zulip.git
synced 2025-11-15 19:31:58 +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_PNG = 'static/images/integrations/logos/{name}.png'
|
||||||
DEFAULT_LOGO_STATIC_PATH_SVG = 'static/images/integrations/logos/{name}.svg'
|
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):
|
def __init__(self, name, client_name, logo=None, secondary_line_text=None,
|
||||||
# type: (str, str, Optional[str], Optional[str], Optional[str], Optional[str]) -> 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.name = name
|
||||||
self.client_name = client_name
|
self.client_name = client_name
|
||||||
self.secondary_line_text = secondary_line_text
|
self.secondary_line_text = secondary_line_text
|
||||||
@@ -51,6 +52,10 @@ class Integration(object):
|
|||||||
display_name = name.title()
|
display_name = name.title()
|
||||||
self.display_name = display_name
|
self.display_name = display_name
|
||||||
|
|
||||||
|
if stream_name is None:
|
||||||
|
stream_name = self.name
|
||||||
|
self.stream_name = stream_name
|
||||||
|
|
||||||
def is_enabled(self):
|
def is_enabled(self):
|
||||||
# type: () -> bool
|
# type: () -> bool
|
||||||
return True
|
return True
|
||||||
@@ -82,11 +87,11 @@ class WebhookIntegration(Integration):
|
|||||||
DEFAULT_DOC_PATH = '{name}/doc.{ext}'
|
DEFAULT_DOC_PATH = '{name}/doc.{ext}'
|
||||||
|
|
||||||
def __init__(self, name, client_name=None, logo=None, secondary_line_text=None,
|
def __init__(self, name, client_name=None, logo=None, secondary_line_text=None,
|
||||||
function=None, url=None, display_name=None, doc=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]) -> 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:
|
if client_name is None:
|
||||||
client_name = self.DEFAULT_CLIENT_NAME.format(name=name.title())
|
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:
|
if function is None:
|
||||||
function = self.DEFAULT_FUNCTION_PATH.format(name=name)
|
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.
|
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,
|
def __init__(self, name, client_name=None, logo=None, secondary_line_text=None,
|
||||||
function=None, url=None, display_name=None, doc=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]) -> 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')
|
url = self.DEFAULT_URL.format(name='github')
|
||||||
|
|
||||||
super(GithubIntegration, self).__init__(
|
super(GithubIntegration, self).__init__(
|
||||||
name, client_name, logo, secondary_line_text,
|
name, client_name, logo, secondary_line_text,
|
||||||
function, url, display_name, doc)
|
function, url, display_name, doc, stream_name)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def url_object(self):
|
def url_object(self):
|
||||||
@@ -153,7 +158,12 @@ WEBHOOK_INTEGRATIONS = [
|
|||||||
WebhookIntegration('appfollow', display_name='AppFollow'),
|
WebhookIntegration('appfollow', display_name='AppFollow'),
|
||||||
WebhookIntegration('beanstalk'),
|
WebhookIntegration('beanstalk'),
|
||||||
WebhookIntegration('basecamp'),
|
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('bitbucket', display_name='Bitbucket', secondary_line_text='(Enterprise)'),
|
||||||
WebhookIntegration('circleci', display_name='CircleCI'),
|
WebhookIntegration('circleci', display_name='CircleCI'),
|
||||||
WebhookIntegration('codeship'),
|
WebhookIntegration('codeship'),
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from typing import Dict, Optional, Any
|
from typing import Dict, Optional, Any
|
||||||
|
from os.path import basename, splitext
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.template import Library, loader, engines
|
from django.template import Library, loader, engines
|
||||||
@@ -82,25 +83,20 @@ def render_markdown_path(markdown_file_path, context=None):
|
|||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
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'):
|
if markdown_file_path.endswith('doc.md'):
|
||||||
integration_dir = markdown_file_path.split('/')[0]
|
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]
|
integration = context['integrations_dict'][integration_dir]
|
||||||
if integration.name == 'bitbucket2':
|
|
||||||
context['integration_name'] = 'bitbucket'
|
|
||||||
else:
|
|
||||||
context['integration_name'] = integration.name
|
context['integration_name'] = integration.name
|
||||||
context['integration_display_name'] = integration.display_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:]
|
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']
|
jinja = engines['Jinja2']
|
||||||
markdown_string = jinja.env.loader.get_source(jinja.env, markdown_file_path)[0]
|
markdown_string = jinja.env.loader.get_source(jinja.env, markdown_file_path)[0]
|
||||||
|
|||||||
Reference in New Issue
Block a user