diff --git a/zerver/lib/integrations.py b/zerver/lib/integrations.py index c319db322c..835ecfb3a8 100644 --- a/zerver/lib/integrations.py +++ b/zerver/lib/integrations.py @@ -34,12 +34,21 @@ features for writing and configuring integrations efficiently. """ CATEGORIES = { - 'customer_support': _('Customer support'), 'analytics': _('Analytics'), - 'email': _('Email'), - 'project_management': _('Project management'), - 'version_control': _('Version control'), + 'bots': _('Bots'), 'continuous_integration': _('Continuous integration'), + 'customer_support': _('Customer support'), + 'deployment': _('Deployment'), + 'communication': _('Communication'), + 'file_management': _('File management'), + 'financial': _('Financial and payments'), + 'hr': _('HR'), + 'marketing': _('Marketing'), + 'misc': _('Miscellaneous'), + 'monitoring': _('Monitoring and error reporting'), + 'project_management': _('Project management'), + 'productivity': _('Productivity'), + 'version_control': _('Version control'), } # type: Dict[str, str] class Integration(object): @@ -186,39 +195,39 @@ class GithubIntegration(WebhookIntegration): return WEBHOOK_INTEGRATIONS = [ - WebhookIntegration('airbrake', ['analytics']), - WebhookIntegration('appfollow', ['analytics'], display_name='AppFollow'), - WebhookIntegration('beanstalk', ['analytics']), - WebhookIntegration('basecamp', ['analytics']), + WebhookIntegration('airbrake', ['monitoring']), + WebhookIntegration('appfollow', ['customer_support'], display_name='AppFollow'), + WebhookIntegration('beanstalk', ['version_control']), + WebhookIntegration('basecamp', ['project_management']), WebhookIntegration( 'bitbucket2', - ['analytics'], + ['version_control'], logo='static/images/integrations/logos/bitbucket.svg', display_name='Bitbucket', stream_name='bitbucket' ), WebhookIntegration( 'bitbucket', - ['analytics'], + ['version_control'], display_name='Bitbucket', secondary_line_text='(Enterprise)', stream_name='commits' ), WebhookIntegration('circleci', ['continuous_integration'], display_name='CircleCI'), - WebhookIntegration('codeship', ['analytics']), - WebhookIntegration('crashlytics', ['analytics']), - WebhookIntegration('delighted', ['analytics'], display_name='Delighted'), + WebhookIntegration('codeship', ['continuous_integration', 'deployment']), + WebhookIntegration('crashlytics', ['monitoring']), + WebhookIntegration('delighted', ['customer_support', 'marketing'], display_name='Delighted'), WebhookIntegration( 'deskdotcom', - ['analytics'], + ['customer_support'], logo='static/images/integrations/logos/deskcom.png', display_name='Desk.com', stream_name='desk' ), - WebhookIntegration('freshdesk', ['analytics']), + WebhookIntegration('freshdesk', ['customer_support']), GithubIntegration( 'github', - ['analytics'], + ['version_control'], function='zerver.webhooks.github.view.api_github_landing', display_name='GitHub', secondary_line_text='(deprecated)', @@ -226,89 +235,92 @@ WEBHOOK_INTEGRATIONS = [ ), GithubIntegration( 'github_webhook', - ['analytics'], + ['version_control'], display_name='GitHub', logo='static/images/integrations/logos/github.svg', secondary_line_text='(webhook)', function='zerver.webhooks.github_webhook.view.api_github_webhook', stream_name='github' ), - WebhookIntegration('gitlab', ['analytics'], display_name='GitLab'), - WebhookIntegration('gogs', ['analytics']), - WebhookIntegration('gosquared', ['analytics'], display_name='GoSquared'), - WebhookIntegration('greenhouse', ['analytics'], display_name='Greenhouse'), - WebhookIntegration('hellosign', ['analytics'], display_name='HelloSign'), - WebhookIntegration('helloworld', ['analytics'], display_name='Hello World'), - WebhookIntegration('heroku', ['analytics'], display_name='Heroku'), - WebhookIntegration('homeassistant', ['analytics'], display_name='Home Assistant'), + WebhookIntegration('gitlab', ['version_control'], display_name='GitLab'), + WebhookIntegration('gogs', ['version_control']), + WebhookIntegration('gosquared', ['analytics', 'marketing'], display_name='GoSquared'), + WebhookIntegration('greenhouse', ['hr'], display_name='Greenhouse'), + WebhookIntegration('hellosign', ['file_management', 'hr'], display_name='HelloSign'), + WebhookIntegration('helloworld', ['misc'], display_name='Hello World'), + WebhookIntegration('heroku', ['deployment'], display_name='Heroku'), + WebhookIntegration('homeassistant', ['misc'], display_name='Home Assistant'), WebhookIntegration( 'ifttt', - ['analytics'], + ['misc'], function='zerver.webhooks.ifttt.view.api_iftt_app_webhook', display_name='IFTTT' ), - WebhookIntegration('jira', ['analytics'], secondary_line_text='(hosted or v5.2+)', display_name='JIRA'), - WebhookIntegration('librato', ['analytics']), - WebhookIntegration('mention', ['analytics'], display_name='Mention'), - WebhookIntegration('newrelic', ['analytics'], display_name='New Relic'), - WebhookIntegration('pagerduty', ['analytics']), - WebhookIntegration('papertrail', ['analytics']), - WebhookIntegration('pingdom', ['analytics']), - WebhookIntegration('pivotal', ['analytics'], display_name='Pivotal Tracker'), - WebhookIntegration('semaphore', ['analytics'], stream_name='builds'), - WebhookIntegration('sentry', ['analytics']), - WebhookIntegration('slack', ['analytics']), - WebhookIntegration('solano', ['analytics'], display_name='Solano Labs'), - WebhookIntegration('splunk', ['analytics'], display_name='Splunk'), - WebhookIntegration('stripe', ['analytics'], display_name='Stripe'), - WebhookIntegration('taiga', ['analytics']), - WebhookIntegration('teamcity', ['analytics']), - WebhookIntegration('transifex', ['analytics']), - WebhookIntegration('travis', ['analytics'], display_name='Travis CI'), - WebhookIntegration('trello', ['analytics'], secondary_line_text='(webhook)'), - WebhookIntegration('updown', ['analytics']), + WebhookIntegration('jira', ['project_management'], + secondary_line_text='(hosted or v5.2+)', display_name='JIRA'), + WebhookIntegration('librato', ['monitoring']), + WebhookIntegration('mention', ['marketing'], display_name='Mention'), + WebhookIntegration('newrelic', ['analytics', 'monitoring'], display_name='New Relic'), + WebhookIntegration('pagerduty', ['monitoring']), + WebhookIntegration('papertrail', ['monitoring']), + WebhookIntegration('pingdom', ['monitoring']), + WebhookIntegration('pivotal', ['project_management'], display_name='Pivotal Tracker'), + WebhookIntegration('semaphore', ['continuous_integration', 'deployment'], stream_name='builds'), + WebhookIntegration('sentry', ['monitoring']), + WebhookIntegration('slack', ['communication']), + WebhookIntegration('solano', ['continuous_integration'], display_name='Solano Labs'), + WebhookIntegration('splunk', ['monitoring'], display_name='Splunk'), + WebhookIntegration('stripe', ['financial'], display_name='Stripe'), + WebhookIntegration('taiga', ['project_management']), + WebhookIntegration('teamcity', ['continuous_integration']), + WebhookIntegration('transifex', ['misc']), + WebhookIntegration('travis', ['continuous_integration'], display_name='Travis CI'), + WebhookIntegration('trello', ['project_management'], secondary_line_text='(webhook)'), + WebhookIntegration('updown', ['monitoring']), WebhookIntegration( 'yo', - ['analytics'], + ['communication'], function='zerver.webhooks.yo.view.api_yo_app_webhook', display_name='Yo App' ), - WebhookIntegration('wordpress', ['analytics'], display_name='WordPress'), - WebhookIntegration('zapier', ['analytics']), - WebhookIntegration('zendesk', ['analytics']) + WebhookIntegration('wordpress', ['marketing'], display_name='WordPress'), + WebhookIntegration('zapier', ['misc']), + WebhookIntegration('zendesk', ['customer_support']) ] # type: List[WebhookIntegration] INTEGRATIONS = { - 'asana': Integration('asana', 'asana', ['analytics'], doc='zerver/integrations/asana.md'), + 'asana': Integration('asana', 'asana', ['project_management'], doc='zerver/integrations/asana.md'), 'capistrano': Integration( 'capistrano', 'capistrano', - ['analytics'], + ['deployment'], display_name='Capistrano', doc='zerver/integrations/capistrano.md' ), - 'codebase': Integration('codebase', 'codebase', ['analytics'], doc='zerver/integrations/codebase.md'), - 'email': EmailIntegration('email', 'email', ['analytics'], doc='zerver/integrations/email.md'), - 'git': Integration('git', 'git', ['analytics'], doc='zerver/integrations/git.md'), + 'codebase': Integration('codebase', 'codebase', ['version_control'], + doc='zerver/integrations/codebase.md'), + 'email': EmailIntegration('email', 'email', ['communication'], + doc='zerver/integrations/email.md'), + 'git': Integration('git', 'git', ['version_control'], doc='zerver/integrations/git.md'), 'google-calendar': Integration( 'google-calendar', 'google-calendar', - ['analytics'], + ['productivity'], display_name='Google Calendar', doc='zerver/integrations/google-calendar.md' ), - 'hubot': Integration('hubot', 'hubot', ['analytics'], doc='zerver/integrations/hubot.md'), + 'hubot': Integration('hubot', 'hubot', ['bots'], doc='zerver/integrations/hubot.md'), 'jenkins': Integration( 'jenkins', 'jenkins', - ['analytics'], + ['continuous_integration'], secondary_line_text='(or Hudson)', doc='zerver/integrations/jenkins.md' ), 'jira-plugin': Integration( 'jira-plugin', 'jira-plugin', - ['analytics'], + ['project_management'], logo='static/images/integrations/logos/jira.svg', secondary_line_text='(locally installed)', display_name='JIRA', @@ -318,50 +330,55 @@ INTEGRATIONS = { 'mercurial': Integration( 'mercurial', 'mercurial', - ['analytics'], + ['version_control'], display_name='Mercurial (hg)', doc='zerver/integrations/mercurial.md', stream_name='commits', ), - 'nagios': Integration('nagios', 'nagios', ['analytics'], doc='zerver/integrations/nagios.md'), + 'nagios': Integration('nagios', 'nagios', ['monitoring'], doc='zerver/integrations/nagios.md'), 'openshift': Integration( 'openshift', 'openshift', - ['analytics'], + ['deployment'], display_name='OpenShift', doc='zerver/integrations/openshift.md', stream_name='deployments', ), - 'perforce': Integration('perforce', 'perforce', ['analytics'], doc='zerver/integrations/perforce.md'), - 'phabricator': Integration('phabricator', 'phabricator', ['analytics'], doc='zerver/integrations/phabricator.md'), - 'puppet': Integration('puppet', 'puppet', ['analytics'], doc='zerver/integrations/puppet.md'), - 'redmine': Integration('redmine', 'redmine', ['analytics'], doc='zerver/integrations/redmine.md'), - 'rss': Integration('rss', 'rss', ['analytics'], display_name='RSS', doc='zerver/integrations/rss.md'), - 'svn': Integration('svn', 'svn', ['analytics'], doc='zerver/integrations/svn.md'), - 'trac': Integration('trac', 'trac', ['analytics'], doc='zerver/integrations/trac.md'), + 'perforce': Integration('perforce', 'perforce', ['version_control'], + doc='zerver/integrations/perforce.md'), + 'phabricator': Integration('phabricator', 'version_control', ['analytics'], + doc='zerver/integrations/phabricator.md'), + 'puppet': Integration('puppet', 'puppet', ['deployment'], doc='zerver/integrations/puppet.md'), + 'redmine': Integration('redmine', 'redmine', ['project_management'], doc='zerver/integrations/redmine.md'), + 'rss': Integration('rss', 'rss', ['communication'], display_name='RSS', doc='zerver/integrations/rss.md'), + 'svn': Integration('svn', 'svn', ['version_control'], doc='zerver/integrations/svn.md'), + 'trac': Integration('trac', 'trac', ['project_management'], doc='zerver/integrations/trac.md'), 'trello-plugin': Integration( 'trello-plugin', 'trello-plugin', - ['analytics'], + ['project_management'], logo='static/images/integrations/logos/trello.svg', secondary_line_text='(legacy)', display_name='Trello', doc='zerver/integrations/trello-plugin.md', stream_name='trello', ), - 'twitter': Integration('twitter', 'twitter', ['analytics'], doc='zerver/integrations/twitter.md'), + 'twitter': Integration('twitter', 'twitter', ['customer_support', 'marketing'], + doc='zerver/integrations/twitter.md'), } # type: Dict[str, Integration] HUBOT_LOZENGES = { - 'assembla': HubotLozenge('assembla', ['analytics']), - 'bonusly': HubotLozenge('bonusly', ['analytics']), - 'chartbeat': HubotLozenge('chartbeat', ['analytics']), - 'darksky': HubotLozenge('darksky', ['analytics'], display_name='Dark Sky', logo_alt='Dark Sky logo'), - 'hangouts': HubotLozenge('google-hangouts', ['analytics'], display_name="Hangouts"), - 'instagram': HubotLozenge('instagram', ['analytics'], logo='static/images/integrations/logos/instagram.png'), - 'mailchimp': HubotLozenge('mailchimp', ['analytics'], display_name='MailChimp', logo_alt='MailChimp logo'), - 'translate': HubotLozenge('google-translate', ['analytics'], display_name="Translate", logo_alt='Google Translate logo'), - 'youtube': HubotLozenge('youtube', ['analytics'], display_name='YouTube', logo_alt='YouTube logo') + 'assembla': HubotLozenge('assembla', ['project_management', 'version_control']), + 'bonusly': HubotLozenge('bonusly', ['hr']), + 'chartbeat': HubotLozenge('chartbeat', ['marketing']), + 'darksky': HubotLozenge('darksky', ['misc'], display_name='Dark Sky', logo_alt='Dark Sky logo'), + 'hangouts': HubotLozenge('google-hangouts', ['communication'], display_name="Hangouts"), + 'instagram': HubotLozenge('instagram', ['misc'], logo='static/images/integrations/logos/instagram.png'), + 'mailchimp': HubotLozenge('mailchimp', ['communication', 'marketing'], + display_name='MailChimp', logo_alt='MailChimp logo'), + 'translate': HubotLozenge('google-translate', ['misc'], + display_name="Translate", logo_alt='Google Translate logo'), + 'youtube': HubotLozenge('youtube', ['misc'], display_name='YouTube', logo_alt='YouTube logo') } for integration in WEBHOOK_INTEGRATIONS: