SYMBOL INDEX (4438 symbols across 734 files) FILE: bin/get_changes.py function get_change_log (line 8) | def get_change_log(previous_sha): FILE: bin/release_manager.py function _github_request (line 16) | def _github_request(method, path, params=None, headers={}): function exception_from_error (line 29) | def exception_from_error(message, response): function rc_tag_name (line 33) | def rc_tag_name(version): function get_rc_release (line 37) | def get_rc_release(version): function create_release (line 49) | def create_release(version, commit_sha): function upload_asset (line 67) | def upload_asset(release, filepath): function remove_previous_builds (line 83) | def remove_previous_builds(release): function get_changelog (line 90) | def get_changelog(commit_sha): function update_release_commit_sha (line 130) | def update_release_commit_sha(release, commit_sha): function update_release (line 143) | def update_release(version, build_filepath, commit_sha): FILE: client/app/components/AceEditorInput.jsx function AceEditorInput (line 6) | function AceEditorInput(props, ref) { FILE: client/app/components/ApplicationArea/ApplicationLayout/DesktopNavbar.jsx function NavbarSection (line 23) | function NavbarSection({ children, ...props }) { function useNavbarActiveState (line 31) | function useNavbarActiveState() { function DesktopNavbar (line 65) | function DesktopNavbar() { FILE: client/app/components/ApplicationArea/ApplicationLayout/MobileNavbar.jsx function MobileNavbar (line 15) | function MobileNavbar({ getPopupContainer }) { FILE: client/app/components/ApplicationArea/ApplicationLayout/VersionInfo.jsx function VersionInfo (line 6) | function VersionInfo() { FILE: client/app/components/ApplicationArea/ApplicationLayout/index.jsx function ApplicationLayout (line 9) | function ApplicationLayout({ children }) { FILE: client/app/components/ApplicationArea/ErrorMessage.jsx function getErrorMessageByStatus (line 9) | function getErrorMessageByStatus(status, defaultMessage) { function getErrorMessage (line 21) | function getErrorMessage(error) { function ErrorMessage (line 36) | function ErrorMessage({ error, message }) { FILE: client/app/components/ApplicationArea/ErrorMessage.test.js function mockAxiosError (line 11) | function mockAxiosError(status = 500, response = {}) { function expectErrorMessageToBe (line 25) | function expectErrorMessageToBe(error, errorMessage) { FILE: client/app/components/ApplicationArea/ErrorMessageDetails.jsx function ErrorMessageDetails (line 4) | function ErrorMessageDetails(props) { FILE: client/app/components/ApplicationArea/Router.jsx function generateRouteKey (line 11) | function generateRouteKey() { function useCurrentRoute (line 19) | function useCurrentRoute() { function stripBase (line 23) | function stripBase(href) { function Router (line 39) | function Router({ routes, onRouteChange }) { FILE: client/app/components/ApplicationArea/handleNavigationIntent.js function handleNavigationIntent (line 4) | function handleNavigationIntent(event) { FILE: client/app/components/ApplicationArea/index.jsx function ApplicationArea (line 7) | function ApplicationArea() { FILE: client/app/components/ApplicationArea/navigateTo.js function navigateTo (line 7) | function navigateTo(href, replace = false) { FILE: client/app/components/ApplicationArea/routeWithApiKeySession.jsx function ApiKeySessionWrapper (line 13) | function ApiKeySessionWrapper({ apiKey, currentRoute, renderChildren }) { function routeWithApiKeySession (line 56) | function routeWithApiKeySession({ render, getApiKey, ...rest }) { FILE: client/app/components/ApplicationArea/routeWithUserSession.tsx type UserSessionWrapperRenderChildrenProps (line 11) | type UserSessionWrapperRenderChildrenProps
= { type UserSessionWrapperProps (line 16) | interface UserSessionWrapperProps
{ function UserSessionWrapper (line 28) | function UserSessionWrapper
({ bodyClass, currentRoute, render }: User... type RouteWithUserSessionOptions (line 79) | type RouteWithUserSessionOptions
= { function routeWithUserSession (line 88) | function routeWithUserSession
({
FILE: client/app/components/BeaconConsent.jsx
function BeaconConsent (line 13) | function BeaconConsent() {
FILE: client/app/components/BigMessage.jsx
function BigMessage (line 6) | function BigMessage({ message, icon, children, className }) {
FILE: client/app/components/CodeBlock.jsx
class CodeBlock (line 8) | class CodeBlock extends React.Component {
method constructor (line 21) | constructor(props) {
method componentWillUnmount (line 28) | componentWillUnmount() {
method render (line 58) | render() {
FILE: client/app/components/Collapse.jsx
function Collapse (line 6) | function Collapse({ collapsed, children, className, ...props }) {
FILE: client/app/components/CreateSourceDialog.jsx
class CreateSourceDialog (line 26) | class CreateSourceDialog extends React.Component {
method renderTypeSelector (line 77) | renderTypeSelector() {
method renderForm (line 103) | renderForm() {
method renderItem (line 136) | renderItem(item) {
method render (line 152) | render() {
FILE: client/app/components/DialogWrapper.d.ts
type DialogProps (line 3) | interface DialogProps {
type RedashRoute (line 13) | interface RedashRoute exte...
type RouteItem (line 21) | interface RouteItem extends RedashRoute (id: string, route: RedashRoute ) {
method unregister (line 55) | public unregister(id: string | null) {
FILE: client/app/services/settingsMenu.js
class SettingsMenuItem (line 5) | class SettingsMenuItem {
method constructor (line 6) | constructor(menuItem) {
method isActive (line 16) | isActive(path) {
method isAvailable (line 20) | isAvailable() {
class SettingsMenu (line 25) | class SettingsMenu {
method add (line 28) | add(id, item) {
method remove (line 37) | remove(id) {
method getAvailableItems (line 44) | getAvailableItems() {
method getActiveItem (line 48) | getActiveItem(path) {
FILE: client/app/services/url.js
function parse (line 10) | function parse(url) {
function stringify (line 15) | function stringify(fragments) {
function normalize (line 20) | function normalize(url) {
FILE: client/app/services/user.js
function getErrorMessage (line 7) | function getErrorMessage(error) {
function disableResource (line 11) | function disableResource(user) {
function enableUser (line 15) | function enableUser(user) {
function disableUser (line 31) | function disableUser(user) {
function deleteUser (line 46) | function deleteUser(user) {
function convertUserInfo (line 59) | function convertUserInfo(user) {
function regenerateApiKey (line 72) | function regenerateApiKey(user) {
function sendPasswordReset (line 84) | function sendPasswordReset(user) {
function resendInvitation (line 99) | function resendInvitation(user) {
FILE: client/app/services/utils.js
function absoluteUrl (line 2) | function absoluteUrl(url) {
FILE: client/app/services/widget.js
function calculatePositionOptions (line 31) | function calculatePositionOptions(widget) {
class Widget (line 95) | class Widget {
method constructor (line 98) | constructor(data) {
method type (line 116) | get type() {
method getQuery (line 125) | getQuery() {
method getQueryResult (line 133) | getQueryResult() {
method getName (line 137) | getName() {
method load (line 144) | load(force, maxAge) {
method save (line 186) | save(key, value) {
method delete (line 206) | delete() {
method isStaticParam (line 211) | isStaticParam(param) {
method getParametersDefs (line 217) | getParametersDefs() {
method getParameterMappings (line 250) | getParameterMappings() {
method getLocalParameters (line 282) | getLocalParameters() {
FILE: client/app/styles/formStyle.ts
function getHorizontalFormProps (line 5) | function getHorizontalFormProps(): FormProps {
function getHorizontalFormItemWithoutLabelProps (line 14) | function getHorizontalFormItemWithoutLabelProps(): FormItemProps {
FILE: client/cypress/cypress.js
function seedDatabase (line 17) | function seedDatabase(seedValues) {
function buildServer (line 44) | function buildServer() {
function startServer (line 49) | function startServer() {
function stopServer (line 55) | function stopServer() {
function runCypressCI (line 60) | function runCypressCI() {
FILE: client/cypress/integration/dashboard/filters_spec.js
constant SQL (line 4) | const SQL = `
FILE: client/cypress/integration/query/filters_spec.js
constant SQL (line 3) | const SQL = `
function expectSelectedOptionsToHaveMembers (line 63) | function expectSelectedOptionsToHaveMembers(values) {
FILE: client/cypress/integration/query/parameter_spec.js
function openAndSearchAntdDropdown (line 4) | function openAndSearchAntdDropdown(testId, paramOption) {
FILE: client/cypress/integration/user/edit_profile_spec.js
function fillProfileDataAndSave (line 1) | function fillProfileDataAndSave(name, email) {
function fillChangePasswordAndSave (line 7) | function fillChangePasswordAndSave(currentPassword, newPassword, repeatP...
FILE: client/cypress/integration/visualizations/box_plot_spec.js
constant SQL (line 3) | const SQL = `
FILE: client/cypress/integration/visualizations/chart_spec.js
constant SQL (line 12) | const SQL = `
FILE: client/cypress/integration/visualizations/choropleth_spec.js
constant SQL (line 3) | const SQL = `
FILE: client/cypress/integration/visualizations/cohort_spec.js
constant SQL (line 3) | const SQL = `
FILE: client/cypress/integration/visualizations/counter_spec.js
constant SQL (line 3) | const SQL = `
FILE: client/cypress/integration/visualizations/funnel_spec.js
constant SQL (line 3) | const SQL = `
FILE: client/cypress/integration/visualizations/map_spec.js
constant SQL (line 3) | const SQL = `
FILE: client/cypress/integration/visualizations/pivot_spec.js
constant SQL (line 5) | const SQL = `
function createPivotThroughUI (line 19) | function createPivotThroughUI(visualizationName, options = {}) {
FILE: client/cypress/integration/visualizations/sankey_sunburst_spec.js
constant SQL (line 5) | const SQL = `
FILE: client/cypress/integration/visualizations/table/.mocks/large-dataset.js
function pseudoRandom (line 5) | function pseudoRandom(seed) {
function randomString (line 10) | function randomString(index) {
FILE: client/cypress/integration/visualizations/table/table_spec.js
function prepareVisualization (line 12) | function prepareVisualization(query, type, name, options) {
FILE: client/cypress/integration/visualizations/word_cloud_spec.js
constant SQL (line 5) | const SQL = `
function injectFont (line 24) | function injectFont(document) {
FILE: client/cypress/support/dashboard/index.js
constant RESIZE_HANDLE_SELECTOR (line 4) | const RESIZE_HANDLE_SELECTOR = ".react-resizable-handle";
function getWidgetTestId (line 6) | function getWidgetTestId(widget) {
function createQueryAndAddWidget (line 10) | function createQueryAndAddWidget(dashboardId, queryData = {}, widgetOpti...
function editDashboard (line 21) | function editDashboard() {
function shareDashboard (line 29) | function shareDashboard() {
function resizeBy (line 39) | function resizeBy(wrapper, offsetLeft = 0, offsetTop = 0) {
FILE: client/cypress/support/parameters.js
function dragParam (line 1) | function dragParam(paramName, offsetLeft, offsetTop) {
function expectParamOrder (line 11) | function expectParamOrder(expectedOrder) {
FILE: client/cypress/support/tags/index.js
function expectTagsToContain (line 1) | function expectTagsToContain(tags = []) {
function typeInTagsSelectAndSave (line 9) | function typeInTagsSelectAndSave(text) {
FILE: client/cypress/support/visualizations/chart.js
function assertPlotPreview (line 5) | function assertPlotPreview(should = "exist") {
function createChartThroughUI (line 9) | function createChartThroughUI(chartName, chartSpecificAssertionFn = () =...
function assertTabbedEditor (line 31) | function assertTabbedEditor(chartSpecificTabbedEditorAssertionFn = () =>...
function assertAxesAndAddLabels (line 48) | function assertAxesAndAddLabels(xaxisLabel, yaxisLabel) {
function createDashboardWithCharts (line 64) | function createDashboardWithCharts(title, chartGetters, widgetsAssertion...
FILE: client/cypress/support/visualizations/table.js
function expectTableToHaveLength (line 1) | function expectTableToHaveLength(length) {
function expectFirstColumnToHaveMembers (line 5) | function expectFirstColumnToHaveMembers(values) {
FILE: migrations/env.py
function run_migrations_offline (line 32) | def run_migrations_offline():
function run_migrations_online (line 51) | def run_migrations_online():
FILE: migrations/versions/0ec979123ba4_.py
function upgrade (line 19) | def upgrade():
function downgrade (line 25) | def downgrade():
FILE: migrations/versions/0f740a081d20_inline_tags.py
function upgrade (line 23) | def upgrade():
function downgrade (line 37) | def downgrade():
FILE: migrations/versions/1038c2174f5d_make_case_insensitive_hash_of_query_text.py
function change_query_hash (line 22) | def change_query_hash(conn, table, query_text_to):
function upgrade (line 32) | def upgrade():
function downgrade (line 43) | def downgrade():
FILE: migrations/versions/1655999df5e3_default_alert_selector.py
function upgrade (line 18) | def upgrade():
function downgrade (line 25) | def downgrade():
FILE: migrations/versions/1daa601d3ae5_add_columns_for_disabled_users.py
function upgrade (line 19) | def upgrade():
function downgrade (line 23) | def downgrade():
FILE: migrations/versions/5ec5c84ba61e_.py
function upgrade (line 21) | def upgrade():
function downgrade (line 34) | def downgrade():
FILE: migrations/versions/640888ce445d_.py
function upgrade (line 23) | def upgrade():
function downgrade (line 82) | def downgrade():
FILE: migrations/versions/65fc9ede4746_add_is_draft_status_to_queries_and_.py
function upgrade (line 21) | def upgrade():
function downgrade (line 45) | def downgrade():
FILE: migrations/versions/6b5be7e0a0ef_.py
function upgrade (line 20) | def upgrade():
function downgrade (line 41) | def downgrade():
FILE: migrations/versions/71477dadd6ef_favorites_unique_constraint.py
function upgrade (line 19) | def upgrade():
function downgrade (line 25) | def downgrade():
FILE: migrations/versions/7205816877ec_change_type_of_json_fields_from_varchar_.py
function upgrade (line 20) | def upgrade():
function downgrade (line 79) | def downgrade():
FILE: migrations/versions/73beceabb948_bring_back_null_schedule.py
function is_empty_schedule (line 21) | def is_empty_schedule(schedule):
function upgrade (line 39) | def upgrade():
function downgrade (line 56) | def downgrade():
FILE: migrations/versions/7671dca4e604_.py
function upgrade (line 19) | def upgrade():
function downgrade (line 26) | def downgrade():
FILE: migrations/versions/7ce5925f832b_create_sqlalchemy_searchable_expressions.py
function upgrade (line 20) | def upgrade():
function downgrade (line 24) | def downgrade():
FILE: migrations/versions/89bc7873a3e0_fix_multiple_heads.py
function upgrade (line 19) | def upgrade():
function downgrade (line 23) | def downgrade():
FILE: migrations/versions/969126bd800f_.py
function upgrade (line 23) | def upgrade():
function downgrade (line 76) | def downgrade():
FILE: migrations/versions/98af61feea92_add_encrypted_options_to_data_sources.py
function upgrade (line 30) | def upgrade():
function downgrade (line 63) | def downgrade():
FILE: migrations/versions/9e8c841d1a30_fix_hash.py
function update_query_hash (line 24) | def update_query_hash(record):
function upgrade (line 36) | def upgrade():
function downgrade (line 63) | def downgrade():
FILE: migrations/versions/a92d92aa678e_inline_tags.py
function upgrade (line 22) | def upgrade():
function downgrade (line 31) | def downgrade():
FILE: migrations/versions/d1eae8b9893e_.py
function upgrade (line 19) | def upgrade():
function downgrade (line 28) | def downgrade():
FILE: migrations/versions/d4c798575877_create_favorites.py
function upgrade (line 19) | def upgrade():
function downgrade (line 33) | def downgrade():
FILE: migrations/versions/d7d747033183_encrypt_alert_destinations.py
function upgrade (line 30) | def upgrade():
function downgrade (line 63) | def downgrade():
FILE: migrations/versions/db0aca1ebd32_12_column_dashboard_layout.py
function upgrade (line 19) | def upgrade():
function downgrade (line 28) | def downgrade():
FILE: migrations/versions/e5c7a4e2df4d_remove_query_tracker_keys.py
function prune (line 26) | def prune(list_name, keep_count, max_keys=100):
function prune_all (line 38) | def prune_all(list_name):
function upgrade (line 44) | def upgrade():
function downgrade (line 50) | def downgrade():
FILE: migrations/versions/e7004224f284_add_org_id_to_favorites.py
function upgrade (line 19) | def upgrade():
function downgrade (line 24) | def downgrade():
FILE: migrations/versions/e7f8a917aa8e_add_user_details_json_column.py
function upgrade (line 19) | def upgrade():
function downgrade (line 31) | def downgrade():
FILE: migrations/versions/fd4fc850d7ea_.py
function upgrade (line 21) | def upgrade():
function downgrade (line 41) | def downgrade():
FILE: redash/__init__.py
function setup_logging (line 27) | def setup_logging():
FILE: redash/app.py
class Redash (line 7) | class Redash(Flask):
method __init__ (line 10) | def __init__(self, *args, **kwargs):
function create_app (line 25) | def create_app():
FILE: redash/authentication/__init__.py
function get_login_url (line 23) | def get_login_url(external=False, next="/"):
function sign (line 34) | def sign(key, path, expires):
function load_user (line 45) | def load_user(user_id_with_identity):
function request_loader (line 63) | def request_loader(request):
function hmac_load_user_from_request (line 78) | def hmac_load_user_from_request(request):
function get_user_from_api_key (line 108) | def get_user_from_api_key(api_key, query_id):
function get_api_key_from_request (line 138) | def get_api_key_from_request(request):
function api_key_load_user_from_request (line 153) | def api_key_load_user_from_request(request):
function jwt_token_load_user_from_request (line 164) | def jwt_token_load_user_from_request(request):
function log_user_logged_in (line 202) | def log_user_logged_in(app, user):
function redirect_to_login (line 217) | def redirect_to_login():
function logout_and_redirect_to_index (line 227) | def logout_and_redirect_to_index():
function init_app (line 240) | def init_app(app):
function create_and_login_user (line 271) | def create_and_login_user(org, name, email, picture=None):
function get_next_path (line 301) | def get_next_path(unsafe_next_path):
FILE: redash/authentication/account.py
function invite_token (line 14) | def invite_token(user):
function verify_link_for_user (line 18) | def verify_link_for_user(user):
function invite_link_for_user (line 25) | def invite_link_for_user(user):
function reset_link_for_user (line 32) | def reset_link_for_user(user):
function validate_token (line 39) | def validate_token(token):
function send_verify_email (line 44) | def send_verify_email(user, org):
function send_invite_email (line 53) | def send_invite_email(inviter, invited, invite_url, org):
function send_password_reset_email (line 62) | def send_password_reset_email(user):
function send_user_disabled_email (line 73) | def send_user_disabled_email(user):
FILE: redash/authentication/google_oauth.py
function verify_profile (line 16) | def verify_profile(org, profile):
function get_user_profile (line 32) | def get_user_profile(access_token, logger):
function build_redirect_uri (line 43) | def build_redirect_uri():
function build_next_path (line 48) | def build_next_path(org_slug=None):
function create_google_oauth_blueprint (line 67) | def create_google_oauth_blueprint(app):
FILE: redash/authentication/jwt_auth.py
function get_public_key_from_file (line 12) | def get_public_key_from_file(url):
function get_public_key_from_net (line 21) | def get_public_key_from_net(url):
function get_public_keys (line 38) | def get_public_keys(url):
function verify_jwt_token (line 58) | def verify_jwt_token(jwt_token, expected_issuer, expected_audience, algo...
FILE: redash/authentication/ldap_auth.py
function login (line 33) | def login(org_slug=None):
function auth_ldap_user (line 72) | def auth_ldap_user(username, password):
FILE: redash/authentication/org_resolving.py
function _get_current_org (line 9) | def _get_current_org():
FILE: redash/authentication/remote_user_auth.py
function login (line 20) | def login(org_slug=None):
FILE: redash/authentication/saml_auth.py
function get_saml_client (line 24) | def get_saml_client(org):
function idp_initiated (line 110) | def idp_initiated(org_slug=None):
function sp_initiated (line 150) | def sp_initiated(org_slug=None):
FILE: redash/cli/__init__.py
function create (line 21) | def create():
function manager (line 34) | def manager():
function version (line 49) | def version():
function status (line 55) | def status():
function check_settings (line 61) | def check_settings():
function send_test_mail (line 69) | def send_test_mail(email=None):
function shell (line 85) | def shell():
FILE: redash/cli/data_sources.py
function list_command (line 26) | def list_command(organization=None):
function list_types (line 41) | def list_types():
function validate_data_source_type (line 49) | def validate_data_source_type(type):
function test (line 68) | def test(name, organization="default"):
function new (line 98) | def new(name=None, type=None, options=None, organization="default"):
function delete (line 182) | def delete(name, organization="default"):
function update_attr (line 197) | def update_attr(obj, attr, new_value):
function edit (line 215) | def edit(name, new_name=None, options=None, type=None, organization="def...
FILE: redash/cli/database.py
function _wait_for_db_connection (line 21) | def _wait_for_db_connection(db):
function is_db_empty (line 33) | def is_db_empty():
function load_extensions (line 40) | def load_extensions(db):
function create_tables (line 47) | def create_tables():
function drop_tables (line 67) | def drop_tables():
function reencrypt (line 79) | def reencrypt(old_secret, new_secret, show_sql):
FILE: redash/cli/groups.py
function create (line 29) | def create(name, permissions=None, organization="default"):
function change_permissions (line 57) | def change_permissions(group_id, permissions=None):
function extract_permissions_string (line 79) | def extract_permissions_string(permissions):
function list_command (line 95) | def list_command(organization=None):
FILE: redash/cli/organization.py
function set_google_apps_domains (line 11) | def set_google_apps_domains(domains):
function show_google_apps_domains (line 24) | def show_google_apps_domains():
function create (line 37) | def create(name, slug="default"):
function list_command (line 49) | def list_command():
FILE: redash/cli/queries.py
function rehash (line 9) | def rehash():
function add_tag (line 27) | def add_tag(query_id, tag):
function remove_tag (line 53) | def remove_tag(query_id, tag):
FILE: redash/cli/rq.py
function scheduler (line 26) | def scheduler():
function worker (line 34) | def worker(queues):
class WorkerHealthcheck (line 50) | class WorkerHealthcheck(base.BaseCheck):
method __call__ (line 53) | def __call__(self, process_spec):
function healthcheck (line 92) | def healthcheck():
FILE: redash/cli/users.py
function build_groups (line 15) | def build_groups(org, groups, is_admin):
function grant_admin (line 38) | def grant_admin(email, organization="default"):
function create (line 87) | def create(
function create_root (line 142) | def create_root(email, name, google_auth=False, password=None, organizat...
function delete (line 200) | def delete(email, organization=None):
function password (line 222) | def password(email, password, organization=None):
function invite (line 259) | def invite(email, name, inviter_email, groups, is_admin=False, organizat...
function list_command (line 290) | def list_command(organization=None, as_json=False):
FILE: redash/destinations/__init__.py
class BaseDestination (line 8) | class BaseDestination:
method __init__ (line 11) | def __init__(self, configuration):
method name (line 15) | def name(cls):
method type (line 19) | def type(cls):
method icon (line 23) | def icon(cls):
method enabled (line 27) | def enabled(cls):
method configuration_schema (line 31) | def configuration_schema(cls):
method notify (line 34) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
method to_dict (line 38) | def to_dict(cls):
function register (line 51) | def register(destination_class):
function get_destination (line 67) | def get_destination(destination_type, configuration):
function get_configuration_schema_for_destination_type (line 74) | def get_configuration_schema_for_destination_type(destination_type):
function import_destinations (line 82) | def import_destinations(destination_imports):
FILE: redash/destinations/asana.py
class Asana (line 10) | class Asana(BaseDestination):
method configuration_schema (line 12) | def configuration_schema(cls):
method icon (line 24) | def icon(cls):
method api_base_url (line 28) | def api_base_url(self):
method notify (line 31) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/destinations/chatwork.py
class ChatWork (line 8) | class ChatWork(BaseDestination):
method configuration_schema (line 12) | def configuration_schema(cls):
method icon (line 29) | def icon(cls):
method notify (line 32) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/destinations/datadog.py
class Datadog (line 10) | class Datadog(BaseDestination):
method configuration_schema (line 12) | def configuration_schema(cls):
method icon (line 27) | def icon(cls):
method notify (line 30) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/destinations/discord.py
class Discord (line 17) | class Discord(BaseDestination):
method configuration_schema (line 19) | def configuration_schema(cls):
method icon (line 28) | def icon(cls):
method notify (line 31) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/destinations/email.py
class Email (line 9) | class Email(BaseDestination):
method configuration_schema (line 11) | def configuration_schema(cls):
method icon (line 27) | def icon(cls):
method notify (line 30) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/destinations/hangoutschat.py
class HangoutsChat (line 9) | class HangoutsChat(BaseDestination):
method name (line 11) | def name(cls):
method type (line 15) | def type(cls):
method configuration_schema (line 19) | def configuration_schema(cls):
method icon (line 37) | def icon(cls):
method notify (line 40) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/destinations/mattermost.py
class Mattermost (line 9) | class Mattermost(BaseDestination):
method configuration_schema (line 11) | def configuration_schema(cls):
method icon (line 24) | def icon(cls):
method notify (line 27) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/destinations/microsoft_teams_webhook.py
function json_string_substitute (line 10) | def json_string_substitute(j, substitutions):
class MicrosoftTeamsWebhook (line 28) | class MicrosoftTeamsWebhook(BaseDestination):
method name (line 51) | def name(cls):
method type (line 55) | def type(cls):
method configuration_schema (line 59) | def configuration_schema(cls):
method icon (line 74) | def icon(cls):
method notify (line 77) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/destinations/pagerduty.py
class PagerDuty (line 13) | class PagerDuty(BaseDestination):
method enabled (line 18) | def enabled(cls):
method configuration_schema (line 22) | def configuration_schema(cls):
method icon (line 40) | def icon(cls):
method notify (line 43) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/destinations/slack.py
class Slack (line 9) | class Slack(BaseDestination):
method configuration_schema (line 11) | def configuration_schema(cls):
method icon (line 21) | def icon(cls):
method notify (line 24) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/destinations/webex.py
class Webex (line 12) | class Webex(BaseDestination):
method configuration_schema (line 14) | def configuration_schema(cls):
method icon (line 33) | def icon(cls):
method api_base_url (line 37) | def api_base_url(self):
method formatted_attachments_template (line 41) | def formatted_attachments_template(subject, description, query_link, a...
method notify (line 177) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
method post_message (line 215) | def post_message(self, payload, headers):
FILE: redash/destinations/webhook.py
class Webhook (line 11) | class Webhook(BaseDestination):
method configuration_schema (line 13) | def configuration_schema(cls):
method icon (line 26) | def icon(cls):
method notify (line 29) | def notify(self, alert, query, user, new_state, app, host, metadata, o...
FILE: redash/handlers/__init__.py
function ping (line 13) | def ping():
function status_api (line 20) | def status_api():
function init_app (line 25) | def init_app(app):
FILE: redash/handlers/admin.py
function outdated_queries (line 16) | def outdated_queries():
function queries_rq_status (line 47) | def queries_rq_status():
FILE: redash/handlers/alerts.py
class AlertResource (line 23) | class AlertResource(BaseResource):
method get (line 24) | def get(self, alert_id):
method post (line 30) | def post(self, alert_id):
method delete (line 43) | def delete(self, alert_id):
class AlertEvaluateResource (line 50) | class AlertEvaluateResource(BaseResource):
method post (line 51) | def post(self, alert_id):
class AlertMuteResource (line 65) | class AlertMuteResource(BaseResource):
method post (line 66) | def post(self, alert_id):
method delete (line 75) | def delete(self, alert_id):
class AlertListResource (line 85) | class AlertListResource(BaseResource):
method post (line 86) | def post(self):
method get (line 110) | def get(self):
class AlertSubscriptionListResource (line 115) | class AlertSubscriptionListResource(BaseResource):
method post (line 116) | def post(self, alert_id):
method get (line 143) | def get(self, alert_id):
class AlertSubscriptionResource (line 151) | class AlertSubscriptionResource(BaseResource):
method delete (line 152) | def delete(self, alert_id, subscriber_id):
FILE: redash/handlers/api.py
class ApiExt (line 100) | class ApiExt(Api):
method add_org_resource (line 101) | def add_org_resource(self, resource, *urls, **kwargs):
function json_representation (line 110) | def json_representation(data, code, headers=None):
FILE: redash/handlers/authentication.py
function get_google_auth_url (line 23) | def get_google_auth_url(next_path):
function render_token_login_page (line 31) | def render_token_login_page(template, org_slug, token, invite):
function invite (line 110) | def invite(token, org_slug=None):
function reset (line 115) | def reset(token, org_slug=None):
function verify (line 120) | def verify(token, org_slug=None):
function forgot_password (line 147) | def forgot_password(org_slug=None):
function verification_email (line 169) | def verification_email(org_slug=None):
function login (line 178) | def login(org_slug=None):
function logout (line 224) | def logout(org_slug=None):
function base_href (line 229) | def base_href():
function date_time_format_config (line 238) | def date_time_format_config():
function number_format_config (line 251) | def number_format_config():
function null_value_config (line 258) | def null_value_config():
function client_config (line 264) | def client_config():
function messages (line 304) | def messages():
function config (line 317) | def config(org_slug=None):
function session (line 323) | def session(org_slug=None):
FILE: redash/handlers/base.py
class BaseResource (line 21) | class BaseResource(Resource):
method __init__ (line 24) | def __init__(self, *args, **kwargs):
method dispatch_request (line 28) | def dispatch_request(self, *args, **kwargs):
method current_user (line 34) | def current_user(self):
method current_org (line 38) | def current_org(self):
method record_event (line 41) | def record_event(self, options):
method update_model (line 45) | def update_model(self, model, updates):
function record_event (line 50) | def record_event(org, user, options):
function require_fields (line 64) | def require_fields(req, fields):
function get_object_or_404 (line 70) | def get_object_or_404(fn, *args, **kwargs):
function paginate (line 80) | def paginate(query_set, page, page_size, serializer, **kwargs):
function org_scoped_rule (line 103) | def org_scoped_rule(rule):
function json_response (line 110) | def json_response(response):
function filter_by_tags (line 114) | def filter_by_tags(result_set, column):
function order_results (line 121) | def order_results(results, default_order, allowed_orders, fallback=True):
FILE: redash/handlers/dashboards.py
class DashboardListResource (line 36) | class DashboardListResource(BaseResource):
method get (line 38) | def get(self):
method post (line 87) | def post(self):
class MyDashboardsResource (line 108) | class MyDashboardsResource(BaseResource):
method get (line 110) | def get(self):
class DashboardResource (line 140) | class DashboardResource(BaseResource):
method get (line 142) | def get(self, dashboard_id=None):
method post (line 202) | def post(self, dashboard_id):
method delete (line 255) | def delete(self, dashboard_id):
class PublicDashboardResource (line 275) | class PublicDashboardResource(BaseResource):
method get (line 278) | def get(self, token):
class DashboardShareResource (line 297) | class DashboardShareResource(BaseResource):
method post (line 298) | def post(self, dashboard_id):
method delete (line 329) | def delete(self, dashboard_id):
class DashboardTagsResource (line 353) | class DashboardTagsResource(BaseResource):
method get (line 355) | def get(self):
class DashboardFavoriteListResource (line 363) | class DashboardFavoriteListResource(BaseResource):
method get (line 364) | def get(self):
class DashboardForkResource (line 405) | class DashboardForkResource(BaseResource):
method post (line 407) | def post(self, dashboard_id):
FILE: redash/handlers/data_sources.py
class DataSourceTypeListResource (line 31) | class DataSourceTypeListResource(BaseResource):
method get (line 33) | def get(self):
class DataSourceResource (line 37) | class DataSourceResource(BaseResource):
method get (line 38) | def get(self, data_source_id):
method post (line 53) | def post(self, data_source_id):
method delete (line 86) | def delete(self, data_source_id):
class DataSourceListResource (line 101) | class DataSourceListResource(BaseResource):
method get (line 103) | def get(self):
method post (line 132) | def post(self):
class DataSourceSchemaResource (line 170) | class DataSourceSchemaResource(BaseResource):
method get (line 171) | def get(self, data_source_id):
class DataSourcePauseResource (line 187) | class DataSourcePauseResource(BaseResource):
method post (line 189) | def post(self, data_source_id):
method delete (line 209) | def delete(self, data_source_id):
class DataSourceTestResource (line 223) | class DataSourceTestResource(BaseResource):
method post (line 225) | def post(self, data_source_id):
FILE: redash/handlers/databricks.py
function _get_databricks_data_source (line 17) | def _get_databricks_data_source(data_source_id, user, org):
function _databases_key (line 27) | def _databases_key(data_source_id):
function _tables_key (line 31) | def _tables_key(data_source_id, database_name):
function _get_databases_from_cache (line 35) | def _get_databases_from_cache(data_source_id):
function _get_tables_from_cache (line 40) | def _get_tables_from_cache(data_source_id, database_name):
class DatabricksDatabaseListResource (line 45) | class DatabricksDatabaseListResource(BaseResource):
method get (line 46) | def get(self, data_source_id):
class DatabricksSchemaResource (line 60) | class DatabricksSchemaResource(BaseResource):
method get (line 61) | def get(self, data_source_id, database_name):
class DatabricksTableColumnListResource (line 80) | class DatabricksTableColumnListResource(BaseResource):
method get (line 81) | def get(self, data_source_id, database_name, table_name):
FILE: redash/handlers/destinations.py
class DestinationTypeListResource (line 15) | class DestinationTypeListResource(BaseResource):
method get (line 17) | def get(self):
class DestinationResource (line 21) | class DestinationResource(BaseResource):
method get (line 23) | def get(self, destination_id):
method post (line 36) | def post(self, destination_id):
method delete (line 64) | def delete(self, destination_id):
class DestinationListResource (line 80) | class DestinationListResource(BaseResource):
method get (line 81) | def get(self):
method post (line 103) | def post(self):
FILE: redash/handlers/embed.py
function embed (line 23) | def embed(query_id, visualization_id, org_slug=None):
function public_dashboard (line 42) | def public_dashboard(token, org_slug=None):
FILE: redash/handlers/events.py
function get_location (line 10) | def get_location(ip):
function event_details (line 22) | def event_details(event):
function serialize_event (line 36) | def serialize_event(event):
class EventsResource (line 59) | class EventsResource(BaseResource):
method post (line 60) | def post(self):
method get (line 66) | def get(self):
FILE: redash/handlers/favorites.py
class QueryFavoriteResource (line 8) | class QueryFavoriteResource(BaseResource):
method post (line 9) | def post(self, query_id):
method delete (line 26) | def delete(self, query_id):
class DashboardFavoriteResource (line 40) | class DashboardFavoriteResource(BaseResource):
method post (line 41) | def post(self, object_id):
method delete (line 62) | def delete(self, object_id):
FILE: redash/handlers/groups.py
class GroupListResource (line 9) | class GroupListResource(BaseResource):
method post (line 11) | def post(self):
method get (line 21) | def get(self):
class GroupResource (line 32) | class GroupResource(BaseResource):
method post (line 34) | def post(self, group_id):
method get (line 47) | def get(self, group_id):
method delete (line 58) | def delete(self, group_id):
class GroupMemberListResource (line 72) | class GroupMemberListResource(BaseResource):
method post (line 74) | def post(self, group_id):
method get (line 92) | def get(self, group_id):
class GroupMemberResource (line 100) | class GroupMemberResource(BaseResource):
method delete (line 102) | def delete(self, group_id, user_id):
function serialize_data_source_with_group (line 117) | def serialize_data_source_with_group(data_source, data_source_group):
class GroupDataSourceListResource (line 123) | class GroupDataSourceListResource(BaseResource):
method post (line 125) | def post(self, group_id):
method get (line 145) | def get(self, group_id):
class GroupDataSourceResource (line 158) | class GroupDataSourceResource(BaseResource):
method post (line 160) | def post(self, group_id, data_source_id):
method delete (line 181) | def delete(self, group_id, data_source_id):
FILE: redash/handlers/organization.py
function organization_status (line 11) | def organization_status(org_slug=None):
FILE: redash/handlers/permissions.py
function get_model_from_type (line 14) | def get_model_from_type(type):
class ObjectPermissionsListResource (line 21) | class ObjectPermissionsListResource(BaseResource):
method get (line 22) | def get(self, object_type, object_id):
method post (line 36) | def post(self, object_type, object_id):
method delete (line 69) | def delete(self, object_type, object_id):
class CheckPermissionResource (line 97) | class CheckPermissionResource(BaseResource):
method get (line 98) | def get(self, object_type, object_id, access_type):
FILE: redash/handlers/queries.py
function format_sql_query (line 56) | def format_sql_query(org_slug=None):
class QuerySearchResource (line 69) | class QuerySearchResource(BaseResource):
method get (line 71) | def get(self):
class QueryRecentResource (line 98) | class QueryRecentResource(BaseResource):
method get (line 100) | def get(self):
class BaseQueryListResource (line 111) | class BaseQueryListResource(BaseResource):
method get_queries (line 112) | def get_queries(self, search_term):
method get (line 126) | def get(self):
function require_access_to_dropdown_queries (line 169) | def require_access_to_dropdown_queries(user, query_def):
class QueryListResource (line 186) | class QueryListResource(BaseQueryListResource):
method post (line 188) | def post(self):
class QueryArchiveResource (line 252) | class QueryArchiveResource(BaseQueryListResource):
method get_queries (line 253) | def get_queries(self, search_term):
class MyQueriesResource (line 272) | class MyQueriesResource(BaseResource):
method get (line 274) | def get(self):
class QueryResource (line 314) | class QueryResource(BaseResource):
method post (line 316) | def post(self, query_id):
method get (line 377) | def get(self, query_id):
method delete (line 396) | def delete(self, query_id):
class QueryRegenerateApiKeyResource (line 408) | class QueryRegenerateApiKeyResource(BaseResource):
method post (line 410) | def post(self, query_id):
class QueryForkResource (line 428) | class QueryForkResource(BaseResource):
method post (line 430) | def post(self, query_id):
class QueryRefreshResource (line 448) | class QueryRefreshResource(BaseResource):
method post (line 449) | def post(self, query_id):
class QueryTagsResource (line 472) | class QueryTagsResource(BaseResource):
method get (line 473) | def get(self):
class QueryFavoriteListResource (line 481) | class QueryFavoriteListResource(BaseResource):
method get (line 482) | def get(self):
FILE: redash/handlers/query_results.py
function error_response (line 40) | def error_response(message, http_status=400):
function run_query (line 59) | def run_query(query, parameters, data_source, query_id, should_apply_aut...
function get_download_filename (line 116) | def get_download_filename(query_result, query, filetype):
function content_disposition_filenames (line 126) | def content_disposition_filenames(attachment_filename):
class QueryResultListResource (line 143) | class QueryResultListResource(BaseResource):
method post (line 145) | def post(self):
class QueryResultDropdownResource (line 194) | class QueryResultDropdownResource(BaseResource):
method get (line 195) | def get(self, query_id):
class QueryDropdownsResource (line 204) | class QueryDropdownsResource(BaseResource):
method get (line 205) | def get(self, query_id, dropdown_query_id):
class QueryResultResource (line 217) | class QueryResultResource(BaseResource):
method add_cors_headers (line 219) | def add_cors_headers(headers):
method options (line 228) | def options(self, query_id=None, query_result_id=None, filetype="json"):
method post (line 241) | def post(self, query_id):
method get (line 288) | def get(self, query_id=None, query_result_id=None, filetype="json"):
method make_json_response (line 378) | def make_json_response(query_result):
method make_csv_response (line 384) | def make_csv_response(query_result):
method make_tsv_response (line 389) | def make_tsv_response(query_result):
method make_excel_response (line 394) | def make_excel_response(query_result):
class JobResource (line 399) | class JobResource(BaseResource):
method get (line 400) | def get(self, job_id, query_id=None):
method delete (line 407) | def delete(self, job_id):
FILE: redash/handlers/query_snippets.py
class QuerySnippetResource (line 13) | class QuerySnippetResource(BaseResource):
method get (line 14) | def get(self, snippet_id):
method post (line 21) | def post(self, snippet_id):
method delete (line 33) | def delete(self, snippet_id):
class QuerySnippetListResource (line 48) | class QuerySnippetListResource(BaseResource):
method post (line 49) | def post(self):
method get (line 74) | def get(self):
FILE: redash/handlers/settings.py
function get_settings_with_defaults (line 9) | def get_settings_with_defaults(defaults, org):
class OrganizationSettings (line 28) | class OrganizationSettings(BaseResource):
method get (line 30) | def get(self):
method post (line 36) | def post(self):
FILE: redash/handlers/setup.py
class SetupForm (line 13) | class SetupForm(Form):
function create_org (line 22) | def create_org(org_name, user_name, email, password):
function setup (line 55) | def setup():
FILE: redash/handlers/static.py
function render_index (line 12) | def render_index():
function dashboard (line 25) | def dashboard(slug, org_slug=None):
function index (line 32) | def index(**kwargs):
FILE: redash/handlers/users.py
function invite_user (line 47) | def invite_user(org, inviter, user, send_email=True):
function require_allowed_email (line 59) | def require_allowed_email(email):
class UserListResource (line 67) | class UserListResource(BaseResource):
method get_users (line 70) | def get_users(self, disabled, pending, search_term):
method get (line 98) | def get(self):
method post (line 131) | def post(self):
class UserInviteResource (line 161) | class UserInviteResource(BaseResource):
method post (line 163) | def post(self, user_id):
class UserResetPasswordResource (line 168) | class UserResetPasswordResource(BaseResource):
method post (line 170) | def post(self, user_id):
class UserRegenerateApiKeyResource (line 179) | class UserRegenerateApiKeyResource(BaseResource):
method post (line 180) | def post(self, user_id):
class UserResource (line 195) | class UserResource(BaseResource):
method get (line 198) | def get(self, user_id):
method post (line 206) | def post(self, user_id): # noqa: C901
method delete (line 277) | def delete(self, user_id):
class UserDisableResource (line 299) | class UserDisableResource(BaseResource):
method post (line 301) | def post(self, user_id):
method delete (line 317) | def delete(self, user_id):
FILE: redash/handlers/visualizations.py
class VisualizationListResource (line 12) | class VisualizationListResource(BaseResource):
method post (line 14) | def post(self):
class VisualizationResource (line 28) | class VisualizationResource(BaseResource):
method post (line 30) | def post(self, visualization_id):
method delete (line 45) | def delete(self, visualization_id):
FILE: redash/handlers/webpack.py
function configure_webpack (line 9) | def configure_webpack(app):
FILE: redash/handlers/widgets.py
class WidgetListResource (line 14) | class WidgetListResource(BaseResource):
method post (line 16) | def post(self):
class WidgetResource (line 50) | class WidgetResource(BaseResource):
method post (line 52) | def post(self, widget_id):
method delete (line 70) | def delete(self, widget_id):
FILE: redash/metrics/database.py
function _table_name_from_select_element (line 15) | def _table_name_from_select_element(elt):
function before_execute (line 28) | def before_execute(conn, elt, multiparams, params):
function after_execute (line 33) | def after_execute(conn, elt, multiparams, params, result):
FILE: redash/metrics/request.py
function record_request_start_time (line 12) | def record_request_start_time():
function calculate_metrics (line 16) | def calculate_metrics(response):
function calculate_metrics_on_exception (line 46) | def calculate_metrics_on_exception(error):
function init_app (line 51) | def init_app(app):
FILE: redash/models/__init__.py
class ScheduledQueriesExecutions (line 88) | class ScheduledQueriesExecutions:
method __init__ (line 91) | def __init__(self):
method refresh (line 94) | def refresh(self):
method update (line 97) | def update(self, query_id):
method get (line 100) | def get(self, query_id):
class DataSource (line 112) | class DataSource(BelongsToOrgMixin, db.Model):
method __eq__ (line 136) | def __eq__(self, other):
method __hash__ (line 139) | def __hash__(self):
method to_dict (line 142) | def to_dict(self, all=False, with_permissions_for=None):
method __str__ (line 173) | def __str__(self):
method create_with_group (line 177) | def create_with_group(cls, *args, **kwargs):
method all (line 184) | def all(cls, org, group_ids=None):
method get_by_id (line 193) | def get_by_id(cls, _id):
method delete (line 196) | def delete(self):
method get_cached_schema (line 206) | def get_cached_schema(self):
method get_schema (line 210) | def get_schema(self, refresh=False):
method _sort_schema (line 230) | def _sort_schema(self, schema):
method _schema_key (line 237) | def _schema_key(self):
method _pause_key (line 241) | def _pause_key(self):
method paused (line 245) | def paused(self):
method pause_reason (line 249) | def pause_reason(self):
method pause (line 252) | def pause(self, reason=None):
method resume (line 255) | def resume(self):
method add_group (line 258) | def add_group(self, group, view_only=False):
method remove_group (line 263) | def remove_group(self, group):
method update_group_permission (line 267) | def update_group_permission(self, group, view_only):
method uses_ssh_tunnel (line 274) | def uses_ssh_tunnel(self):
method query_runner (line 278) | def query_runner(self):
method get_by_name (line 287) | def get_by_name(cls, name):
method groups (line 292) | def groups(self):
class DataSourceGroup (line 298) | class DataSourceGroup(db.Model):
class QueryResult (line 312) | class QueryResult(db.Model, BelongsToOrgMixin):
method __str__ (line 326) | def __str__(self):
method to_dict (line 329) | def to_dict(self):
method unused (line 341) | def unused(cls, days=7):
method get_latest (line 348) | def get_latest(cls, data_source, query, max_age=0):
method store_result (line 369) | def store_result(cls, org, data_source, query_hash, query, data, run_t...
method groups (line 386) | def groups(self):
function should_schedule_next (line 390) | def should_schedule_next(previous_iteration, now, interval, time=None, d...
class Query (line 446) | class Query(ChangeTrackingMixin, TimestampMixin, BelongsToOrgMixin, db.M...
method __str__ (line 487) | def __str__(self):
method archive (line 490) | def archive(self, user=None):
method regenerate_api_key (line 505) | def regenerate_api_key(self):
method create (line 509) | def create(cls, **kwargs):
method all_queries (line 523) | def all_queries(cls, group_ids, user_id=None, include_drafts=False, in...
method favorites (line 547) | def favorites(cls, user, base_query=None):
method all_tags (line 558) | def all_tags(cls, user, include_drafts=False):
method by_user (line 573) | def by_user(cls, user):
method by_api_key (line 577) | def by_api_key(cls, api_key):
method past_scheduled_queries (line 581) | def past_scheduled_queries(cls):
method outdated_queries (line 593) | def outdated_queries(cls):
method _do_multi_byte_search (line 649) | def _do_multi_byte_search(cls, all_queries, term, limit=None):
method search (line 686) | def search(
method search_by_user (line 711) | def search_by_user(cls, term, user, limit=None, multi_byte_search=False):
method recent (line 719) | def recent(cls, group_ids, user_id=None, limit=20):
method get_by_id (line 744) | def get_by_id(cls, _id):
method all_groups_for_query_ids (line 748) | def all_groups_for_query_ids(cls, query_ids):
method update_latest_result_by_query_hash (line 756) | def update_latest_result_by_query_hash(self):
method update_latest_result (line 774) | def update_latest_result(cls, query_result):
method fork (line 797) | def fork(self, user):
method runtime (line 823) | def runtime(self):
method retrieved_at (line 827) | def retrieved_at(self):
method groups (line 831) | def groups(self):
method lowercase_name (line 838) | def lowercase_name(self):
method lowercase_name (line 843) | def lowercase_name(cls):
method parameters (line 848) | def parameters(self):
method parameterized (line 852) | def parameterized(self):
method dashboard_api_keys (line 856) | def dashboard_api_keys(self):
method update_query_hash (line 869) | def update_query_hash(self):
function receive_before_insert_update (line 890) | def receive_before_insert_update(mapper, connection, target):
function query_last_modified_by (line 895) | def query_last_modified_by(target, val, oldval, initiator):
class Favorite (line 900) | class Favorite(TimestampMixin, db.Model):
method is_favorite (line 915) | def is_favorite(cls, user, object):
method are_favorites (line 919) | def are_favorites(cls, user, objects):
function next_state (line 949) | def next_state(op, value, threshold):
class Alert (line 982) | class Alert(TimestampMixin, BelongsToOrgMixin, db.Model):
method all (line 1003) | def all(cls, group_ids):
method get_by_id_and_org (line 1012) | def get_by_id_and_org(cls, object_id, org):
method evaluate (line 1015) | def evaluate(self):
method subscribers (line 1051) | def subscribers(self):
method render_template (line 1054) | def render_template(self, template):
method custom_body (line 1087) | def custom_body(self):
method custom_subject (line 1092) | def custom_subject(self):
method groups (line 1097) | def groups(self):
method muted (line 1101) | def muted(self):
function generate_slug (line 1105) | def generate_slug(ctx):
class Dashboard (line 1116) | class Dashboard(ChangeTrackingMixin, TimestampMixin, BelongsToOrgMixin, ...
method __str__ (line 1137) | def __str__(self):
method name_as_slug (line 1141) | def name_as_slug(self):
method all (line 1145) | def all(cls, org, group_ids, user_id):
method search (line 1165) | def search(cls, org, groups_ids, user_id, search_term):
method search_by_user (line 1170) | def search_by_user(cls, term, user, limit=None):
method all_tags (line 1174) | def all_tags(cls, org, user):
method favorites (line 1189) | def favorites(cls, user, base_query=None):
method by_user (line 1207) | def by_user(cls, user):
method get_by_slug_and_org (line 1211) | def get_by_slug_and_org(cls, slug, org):
method fork (line 1214) | def fork(self, user):
method lowercase_name (line 1230) | def lowercase_name(self):
method lowercase_name (line 1235) | def lowercase_name(cls):
class Visualization (line 1241) | class Visualization(TimestampMixin, BelongsToOrgMixin, db.Model):
method __str__ (line 1253) | def __str__(self):
method get_by_id_and_org (line 1257) | def get_by_id_and_org(cls, object_id, org):
method copy (line 1260) | def copy(self):
class Widget (line 1270) | class Widget(TimestampMixin, BelongsToOrgMixin, db.Model):
method __str__ (line 1281) | def __str__(self):
method get_by_id_and_org (line 1285) | def get_by_id_and_org(cls, object_id, org):
method copy (line 1288) | def copy(self, dashboard_id):
class Event (line 1299) | class Event(db.Model):
method __str__ (line 1313) | def __str__(self):
method to_dict (line 1321) | def to_dict(self):
method record (line 1333) | def record(cls, event):
class ApiKey (line 1356) | class ApiKey(TimestampMixin, GFKBase, db.Model):
method get_by_api_key (line 1371) | def get_by_api_key(cls, api_key):
method get_by_object (line 1375) | def get_by_object(cls, object):
method create_for_object (line 1383) | def create_for_object(cls, object, user):
class NotificationDestination (line 1390) | class NotificationDestination(BelongsToOrgMixin, db.Model):
method __str__ (line 1409) | def __str__(self):
method to_dict (line 1412) | def to_dict(self, all=False):
method destination (line 1428) | def destination(self):
method all (line 1432) | def all(cls, org):
method notify (line 1437) | def notify(self, alert, query, user, new_state, app, host, metadata):
class AlertSubscription (line 1444) | class AlertSubscription(TimestampMixin, db.Model):
method to_dict (line 1465) | def to_dict(self):
method all (line 1474) | def all(cls, alert_id):
method notify (line 1477) | def notify(self, alert, query, user, new_state, app, host, metadata):
class QuerySnippet (line 1490) | class QuerySnippet(TimestampMixin, db.Model, BelongsToOrgMixin):
method all (line 1503) | def all(cls, org):
method to_dict (line 1506) | def to_dict(self):
function init_db (line 1520) | def init_db():
FILE: redash/models/base.py
class RedashSQLAlchemy (line 13) | class RedashSQLAlchemy(SQLAlchemy):
method apply_driver_hacks (line 14) | def apply_driver_hacks(self, app, info, options):
method apply_pool_defaults (line 20) | def apply_pool_defaults(self, app, options):
class SearchBaseQuery (line 45) | class SearchBaseQuery(BaseQuery, SearchQueryMixin):
function integer_vectorizer (line 52) | def integer_vectorizer(column):
function uuid_vectorizer (line 57) | def uuid_vectorizer(column):
function gfk_type (line 69) | def gfk_type(cls):
class GFKBase (line 74) | class GFKBase:
method object (line 85) | def object(self):
method object (line 95) | def object(self, value):
function key_type (line 104) | def key_type(name):
function primary_key (line 108) | def primary_key(name):
FILE: redash/models/changes.py
class Change (line 9) | class Change(GFKBase, db.Model):
method to_dict (line 21) | def to_dict(self, full=True):
method last_change (line 40) | def last_change(cls, obj):
class ChangeTrackingMixin (line 48) | class ChangeTrackingMixin:
method __init__ (line 52) | def __init__(self, *a, **kw):
method prep_cleanvalues (line 56) | def prep_cleanvalues(self):
method __setattr__ (line 63) | def __setattr__(self, key, value):
method record_changes (line 73) | def record_changes(self, changed_by):
FILE: redash/models/mixins.py
class TimestampMixin (line 6) | class TimestampMixin:
function timestamp_before_update (line 12) | def timestamp_before_update(mapper, connection, target):
class BelongsToOrgMixin (line 20) | class BelongsToOrgMixin:
method get_by_id_and_org (line 22) | def get_by_id_and_org(cls, object_id, org, org_cls=None):
FILE: redash/models/organizations.py
class Organization (line 14) | class Organization(TimestampMixin, db.Model):
method __str__ (line 27) | def __str__(self):
method get_by_slug (line 31) | def get_by_slug(cls, slug):
method get_by_id (line 35) | def get_by_id(cls, _id):
method default_group (line 39) | def default_group(self):
method google_apps_domains (line 43) | def google_apps_domains(self):
method is_public (line 47) | def is_public(self):
method is_disabled (line 51) | def is_disabled(self):
method disable (line 54) | def disable(self):
method enable (line 57) | def enable(self):
method set_setting (line 60) | def set_setting(self, key, value):
method get_setting (line 68) | def get_setting(self, key, raise_on_missing=True):
method admin_group (line 81) | def admin_group(self):
method has_user (line 84) | def has_user(self, email):
FILE: redash/models/parameterized_query.py
function _pluck_name_and_value (line 12) | def _pluck_name_and_value(default_column, row):
function _load_result (line 20) | def _load_result(query_id, org):
function dropdown_values (line 32) | def dropdown_values(query_id, org):
function join_parameter_list_values (line 39) | def join_parameter_list_values(parameters, schema):
function _collect_key_names (line 54) | def _collect_key_names(nodes):
function _collect_query_parameters (line 66) | def _collect_query_parameters(query):
function _parameter_names (line 72) | def _parameter_names(parameter_values):
function _is_number (line 84) | def _is_number(string):
function _is_regex_pattern (line 92) | def _is_regex_pattern(value, regex):
function _is_date (line 102) | def _is_date(string):
function _is_date_range (line 107) | def _is_date_range(obj):
function _is_value_within_options (line 111) | def _is_value_within_options(value, dropdown_options, allow_list=False):
class ParameterizedQuery (line 117) | class ParameterizedQuery:
method __init__ (line 118) | def __init__(self, template, schema=None, org=None):
method apply (line 125) | def apply(self, parameters):
method _valid (line 135) | def _valid(self, name, value):
method is_safe (line 185) | def is_safe(self):
method missing_params (line 190) | def missing_params(self):
method text (line 195) | def text(self):
class InvalidParameterError (line 199) | class InvalidParameterError(Exception):
method __init__ (line 200) | def __init__(self, parameters):
class QueryDetachedFromDataSourceError (line 206) | class QueryDetachedFromDataSourceError(Exception):
method __init__ (line 207) | def __init__(self, query_id):
FILE: redash/models/types.py
class Configuration (line 12) | class Configuration(TypeDecorator):
method process_bind_param (line 15) | def process_bind_param(self, value, dialect):
method process_result_value (line 18) | def process_result_value(self, value, dialect):
class EncryptedConfiguration (line 22) | class EncryptedConfiguration(EncryptedType):
method process_bind_param (line 23) | def process_bind_param(self, value, dialect):
method process_result_value (line 26) | def process_result_value(self, value, dialect):
class JSONText (line 33) | class JSONText(TypeDecorator):
method process_bind_param (line 36) | def process_bind_param(self, value, dialect):
method process_result_value (line 42) | def process_result_value(self, value, dialect):
class MutableDict (line 48) | class MutableDict(Mutable, dict):
method coerce (line 50) | def coerce(cls, key, value):
method __setitem__ (line 62) | def __setitem__(self, key, value):
method __delitem__ (line 68) | def __delitem__(self, key):
class MutableList (line 75) | class MutableList(Mutable, list):
method append (line 76) | def append(self, value):
method remove (line 80) | def remove(self, value):
method coerce (line 85) | def coerce(cls, key, value):
class json_cast_property (line 94) | class json_cast_property(index_property):
method __init__ (line 101) | def __init__(self, cast_type, *args, **kwargs):
method expr (line 105) | def expr(self, model):
FILE: redash/models/users.py
function sync_last_active_at (line 28) | def sync_last_active_at():
function update_user_active_at (line 46) | def update_user_active_at(sender, *args, **kwargs):
function init_app (line 55) | def init_app(app):
class PermissionsCheckMixin (line 63) | class PermissionsCheckMixin:
method has_permission (line 64) | def has_permission(self, permission):
method has_permissions (line 67) | def has_permissions(self, permissions):
class User (line 78) | class User(TimestampMixin, db.Model, BelongsToOrgMixin, UserMixin, Permi...
method __str__ (line 107) | def __str__(self):
method __init__ (line 110) | def __init__(self, *args, **kwargs):
method is_disabled (line 116) | def is_disabled(self):
method disable (line 119) | def disable(self):
method enable (line 122) | def enable(self):
method regenerate_api_key (line 125) | def regenerate_api_key(self):
method to_dict (line 128) | def to_dict(self, with_api_key=False):
method is_api_user (line 161) | def is_api_user():
method profile_image_url (line 165) | def profile_image_url(self):
method permissions (line 173) | def permissions(self):
method get_by_org (line 178) | def get_by_org(cls, org):
method get_by_id (line 182) | def get_by_id(cls, _id):
method get_by_email_and_org (line 186) | def get_by_email_and_org(cls, email, org):
method get_by_api_key_and_org (line 190) | def get_by_api_key_and_org(cls, api_key, org):
method all (line 194) | def all(cls, org):
method all_disabled (line 198) | def all_disabled(cls, org):
method search (line 202) | def search(cls, base_query, term):
method pending (line 209) | def pending(cls, base_query, pending):
method find_by_email (line 216) | def find_by_email(cls, email):
method hash_password (line 219) | def hash_password(self, password):
method verify_password (line 222) | def verify_password(self, password):
method update_group_assignments (line 225) | def update_group_assignments(self, group_names):
method has_access (line 232) | def has_access(self, obj, access_type):
method get_id (line 235) | def get_id(self):
method get_actual_user (line 241) | def get_actual_user(self):
class Group (line 246) | class Group(db.Model, BelongsToOrgMixin):
method __str__ (line 277) | def __str__(self):
method to_dict (line 280) | def to_dict(self):
method all (line 290) | def all(cls, org):
method members (line 294) | def members(cls, group_id):
method find_by_name (line 298) | def find_by_name(cls, org, group_names):
class AccessPermission (line 304) | class AccessPermission(GFKBase, db.Model):
method grant (line 316) | def grant(cls, obj, access_type, grantee, grantor):
method revoke (line 338) | def revoke(cls, obj, grantee, access_type=None):
method find (line 343) | def find(cls, obj, access_type=None, grantee=None, grantor=None):
method exists (line 347) | def exists(cls, obj, access_type, grantee):
method _query (line 351) | def _query(cls, obj, access_type=None, grantee=None, grantor=None):
method to_dict (line 365) | def to_dict(self):
class AnonymousUser (line 377) | class AnonymousUser(AnonymousUserMixin, PermissionsCheckMixin):
method permissions (line 379) | def permissions(self):
method is_api_user (line 383) | def is_api_user():
class ApiUser (line 387) | class ApiUser(UserMixin, PermissionsCheckMixin):
method __init__ (line 388) | def __init__(self, api_key, org, groups, name=None):
method __repr__ (line 400) | def __repr__(self):
method is_api_user (line 404) | def is_api_user():
method org_id (line 408) | def org_id(self):
method permissions (line 414) | def permissions(self):
method has_access (line 418) | def has_access(obj, access_type):
method get_actual_user (line 421) | def get_actual_user(self):
FILE: redash/monitor.py
function get_redis_status (line 10) | def get_redis_status():
function get_object_counts (line 18) | def get_object_counts():
function get_queues_status (line 29) | def get_queues_status():
function get_db_sizes (line 33) | def get_db_sizes():
function get_status (line 49) | def get_status():
function rq_job_ids (line 61) | def rq_job_ids():
function fetch_jobs (line 70) | def fetch_jobs(job_ids):
function rq_queues (line 85) | def rq_queues():
function describe_job (line 96) | def describe_job(job):
function rq_workers (line 100) | def rq_workers():
function rq_status (line 119) | def rq_status():
FILE: redash/permissions.py
function has_access (line 17) | def has_access(obj, user, need_view_only):
function has_access_to_object (line 24) | def has_access_to_object(obj, api_key, need_view_only):
function has_access_to_groups (line 34) | def has_access_to_groups(obj, user, need_view_only):
function require_access (line 52) | def require_access(obj, user, need_view_only):
class require_permissions (line 57) | class require_permissions:
method __init__ (line 58) | def __init__(self, permissions, allow_one=False):
method __call__ (line 62) | def __call__(self, fn):
function require_permission (line 78) | def require_permission(permission):
function require_any_of_permission (line 82) | def require_any_of_permission(permissions):
function require_admin (line 86) | def require_admin(fn):
function require_super_admin (line 90) | def require_super_admin(fn):
function has_permission_or_owner (line 94) | def has_permission_or_owner(permission, object_owner_id):
function is_admin_or_owner (line 98) | def is_admin_or_owner(object_owner_id):
function require_permission_or_owner (line 102) | def require_permission_or_owner(permission, object_owner_id):
function require_admin_or_owner (line 107) | def require_admin_or_owner(object_owner_id):
function can_modify (line 112) | def can_modify(obj, user):
function require_object_modify_permission (line 116) | def require_object_modify_permission(obj, user):
FILE: redash/query_runner/__init__.py
function split_sql_statements (line 50) | def split_sql_statements(query):
function combine_sql_statements (line 97) | def combine_sql_statements(queries):
function find_last_keyword_idx (line 101) | def find_last_keyword_idx(parsed_query):
class InterruptException (line 108) | class InterruptException(Exception):
class NotSupported (line 112) | class NotSupported(Exception):
class BaseQueryRunner (line 116) | class BaseQueryRunner:
method __init__ (line 124) | def __init__(self, configuration):
method name (line 129) | def name(cls):
method type (line 133) | def type(cls):
method enabled (line 137) | def enabled(cls):
method host (line 141) | def host(self):
method host (line 154) | def host(self, host):
method port (line 167) | def port(self):
method port (line 180) | def port(self, port):
method configuration_schema (line 193) | def configuration_schema(cls):
method annotate_query (line 196) | def annotate_query(self, query, metadata):
method test_connection (line 204) | def test_connection(self):
method run_query (line 212) | def run_query(self, query, user):
method fetch_columns (line 215) | def fetch_columns(self, columns):
method get_schema (line 231) | def get_schema(self, get_stats=False):
method _handle_run_query_error (line 234) | def _handle_run_query_error(self, error):
method _run_query_internal (line 241) | def _run_query_internal(self, query):
method to_dict (line 249) | def to_dict(cls):
method supports_auto_limit (line 258) | def supports_auto_limit(self):
method apply_auto_limit (line 261) | def apply_auto_limit(self, query_text, should_apply_auto_limit):
method gen_query_hash (line 264) | def gen_query_hash(self, query_text, set_auto_limit=False):
class BaseSQLQueryRunner (line 269) | class BaseSQLQueryRunner(BaseQueryRunner):
method get_schema (line 270) | def get_schema(self, get_stats=False):
method _get_tables (line 277) | def _get_tables(self, schema_dict):
method _get_tables_stats (line 280) | def _get_tables_stats(self, tables_dict):
method supports_auto_limit (line 287) | def supports_auto_limit(self):
method query_is_select_no_limit (line 290) | def query_is_select_no_limit(self, query):
method add_limit_to_query (line 304) | def add_limit_to_query(self, query):
method apply_auto_limit (line 323) | def apply_auto_limit(self, query_text, should_apply_auto_limit):
class BaseHTTPQueryRunner (line 333) | class BaseHTTPQueryRunner(BaseQueryRunner):
method configuration_schema (line 343) | def configuration_schema(cls):
method get_auth (line 365) | def get_auth(self):
method get_response (line 375) | def get_response(self, url, auth=None, http_method="get", **kwargs):
function register (line 414) | def register(query_runner_class):
function get_query_runner (line 431) | def get_query_runner(query_runner_type, configuration):
function get_configuration_schema_for_query_runner_type (line 439) | def get_configuration_schema_for_query_runner_type(query_runner_type):
function import_query_runners (line 447) | def import_query_runners(query_runner_imports):
function guess_type (line 452) | def guess_type(value):
function guess_type_from_string (line 463) | def guess_type_from_string(string_value):
function with_ssh_tunnel (line 491) | def with_ssh_tunnel(query_runner, details):
FILE: redash/query_runner/amazon_elasticsearch.py
class AmazonElasticsearchService (line 13) | class AmazonElasticsearchService(ElasticSearch2):
method name (line 15) | def name(cls):
method enabled (line 19) | def enabled(cls):
method type (line 23) | def type(cls):
method configuration_schema (line 27) | def configuration_schema(cls):
method __init__ (line 51) | def __init__(self, configuration):
method get_auth (line 66) | def get_auth(self):
FILE: redash/query_runner/arango.py
class Arango (line 30) | class Arango(BaseQueryRunner):
method name (line 34) | def name(cls):
method configuration_schema (line 38) | def configuration_schema(cls):
method enabled (line 55) | def enabled(cls):
method type (line 64) | def type(cls):
method run_query (line 67) | def run_query(self, query, user):
FILE: redash/query_runner/athena.py
class SimpleFormatter (line 49) | class SimpleFormatter:
method format (line 50) | def format(self, operation, parameters=None):
class Athena (line 54) | class Athena(BaseQueryRunner):
method name (line 58) | def name(cls):
method configuration_schema (line 62) | def configuration_schema(cls):
method enabled (line 156) | def enabled(cls):
method annotate_query (line 159) | def annotate_query(self, query, metadata):
method type (line 165) | def type(cls):
method _get_iam_credentials (line 168) | def _get_iam_credentials(self, user=None):
method __get_schema_from_glue (line 190) | def __get_schema_from_glue(self, catalog_id=""):
method get_schema (line 229) | def get_schema(self, get_stats=False):
method run_query (line 253) | def run_query(self, query, user):
FILE: redash/query_runner/axibase_tsd.py
function resolve_redash_type (line 43) | def resolve_redash_type(type_in_atsd):
function generate_rows_and_columns (line 56) | def generate_rows_and_columns(csv_response):
class AxibaseTSD (line 86) | class AxibaseTSD(BaseQueryRunner):
method enabled (line 90) | def enabled(cls):
method name (line 94) | def name(cls):
method configuration_schema (line 98) | def configuration_schema(cls):
method __init__ (line 131) | def __init__(self, configuration):
method run_query (line 139) | def run_query(self, query, user):
method get_schema (line 171) | def get_schema(self, get_stats=False):
FILE: redash/query_runner/azure_kusto.py
function _get_data_scanned (line 40) | def _get_data_scanned(kusto_response):
class AzureKusto (line 68) | class AzureKusto(BaseQueryRunner):
method __init__ (line 72) | def __init__(self, configuration):
method configuration_schema (line 77) | def configuration_schema(cls):
method enabled (line 110) | def enabled(cls):
method type (line 114) | def type(cls):
method name (line 118) | def name(cls):
method run_query (line 121) | def run_query(self, query, user):
method get_schema (line 196) | def get_schema(self, get_stats=False):
FILE: redash/query_runner/big_query.py
function transform_cell (line 46) | def transform_cell(field_type, cell_value):
function transform_row (line 60) | def transform_row(row, fields):
function _load_key (line 75) | def _load_key(filename):
function _get_query_results (line 83) | def _get_query_results(jobs, project_id, location, job_id, start_index):
function _get_total_bytes_processed_for_resp (line 95) | def _get_total_bytes_processed_for_resp(bq_response):
class BigQuery (line 101) | class BigQuery(BaseSQLQueryRunner):
method __init__ (line 104) | def __init__(self, configuration):
method enabled (line 109) | def enabled(cls):
method configuration_schema (line 113) | def configuration_schema(cls):
method annotate_query (line 159) | def annotate_query(self, query, metadata):
method _get_bigquery_service (line 164) | def _get_bigquery_service(self):
method _get_project_id (line 180) | def _get_project_id(self):
method _get_location (line 183) | def _get_location(self):
method _get_total_bytes_processed (line 186) | def _get_total_bytes_processed(self, jobs, query):
method _get_job_data (line 198) | def _get_job_data(self, query):
method _get_query_result (line 218) | def _get_query_result(self, jobs, query):
method _get_columns_schema (line 269) | def _get_columns_schema(self, table_data):
method _get_columns_schema_column (line 278) | def _get_columns_schema_column(self, column):
method _get_project_datasets (line 288) | def _get_project_datasets(self, project_id):
method get_schema (line 303) | def get_schema(self, get_stats=False):
method run_query (line 378) | def run_query(self, query, user):
FILE: redash/query_runner/big_query_gce.py
class BigQueryGCE (line 16) | class BigQueryGCE(BigQuery):
method type (line 18) | def type(cls):
method enabled (line 22) | def enabled(cls):
method configuration_schema (line 35) | def configuration_schema(cls):
method _get_project_id (line 61) | def _get_project_id(self):
method _get_bigquery_service (line 64) | def _get_bigquery_service(self):
FILE: redash/query_runner/cass.py
function generate_ssl_options_dict (line 21) | def generate_ssl_options_dict(protocol, cert_path=None):
class Cassandra (line 29) | class Cassandra(BaseQueryRunner):
method enabled (line 33) | def enabled(cls):
method custom_json_encoder (line 37) | def custom_json_encoder(cls, dec, o):
method configuration_schema (line 43) | def configuration_schema(cls):
method type (line 79) | def type(cls):
method get_schema (line 82) | def get_schema(self, get_stats=False):
method run_query (line 118) | def run_query(self, query, user):
method _generate_cert_file (line 157) | def _generate_cert_file(self):
method _cleanup_cert_file (line 166) | def _cleanup_cert_file(self, cert_path):
method _get_ssl_options (line 170) | def _get_ssl_options(self, cert_path):
class ScyllaDB (line 177) | class ScyllaDB(Cassandra):
method type (line 179) | def type(cls):
FILE: redash/query_runner/clickhouse.py
function split_multi_query (line 22) | def split_multi_query(query):
class ClickHouse (line 26) | class ClickHouse(BaseSQLQueryRunner):
method configuration_schema (line 30) | def configuration_schema(cls):
method _url (line 56) | def _url(self):
method _url (line 60) | def _url(self, url):
method host (line 64) | def host(self):
method host (line 68) | def host(self, host):
method port (line 72) | def port(self):
method port (line 76) | def port(self, port):
method _get_tables (line 79) | def _get_tables(self, schema):
method _send_query (line 101) | def _send_query(self, data, session_id=None, session_check=None):
method _define_column_type (line 149) | def _define_column_type(column):
method _clickhouse_query (line 165) | def _clickhouse_query(self, query, session_id=None, session_check=None):
method run_query (line 204) | def run_query(self, query, user):
FILE: redash/query_runner/cloudwatch.py
function parse_response (line 16) | def parse_response(results):
function parse_query (line 40) | def parse_query(query):
class CloudWatch (line 52) | class CloudWatch(BaseQueryRunner):
method name (line 56) | def name(cls):
method configuration_schema (line 60) | def configuration_schema(cls):
method enabled (line 74) | def enabled(cls):
method __init__ (line 77) | def __init__(self, configuration):
method test_connection (line 81) | def test_connection(self):
method _get_client (line 84) | def _get_client(self):
method get_schema (line 93) | def get_schema(self, get_stats=False):
method run_query (line 112) | def run_query(self, query, user):
FILE: redash/query_runner/cloudwatch_insights.py
function parse_response (line 21) | def parse_response(response):
function parse_query (line 53) | def parse_query(query):
class CloudWatchInsights (line 65) | class CloudWatchInsights(BaseQueryRunner):
method name (line 69) | def name(cls):
method type (line 73) | def type(cls):
method configuration_schema (line 77) | def configuration_schema(cls):
method enabled (line 91) | def enabled(cls):
method __init__ (line 94) | def __init__(self, configuration):
method test_connection (line 98) | def test_connection(self):
method _get_client (line 101) | def _get_client(self):
method get_schema (line 110) | def get_schema(self, get_stats=False):
method run_query (line 129) | def run_query(self, query, user):
FILE: redash/query_runner/corporate_memory.py
class CorporateMemoryQueryRunner (line 30) | class CorporateMemoryQueryRunner(BaseQueryRunner):
method __init__ (line 60) | def __init__(self, configuration):
method _setup_environment (line 76) | def _setup_environment(self):
method _transform_sparql_results (line 94) | def _transform_sparql_results(results):
method name (line 138) | def name(cls):
method enabled (line 142) | def enabled(cls):
method type (line 146) | def type(cls):
method run_query (line 149) | def run_query(self, query, user):
method configuration_schema (line 183) | def configuration_schema(cls):
method get_schema (line 236) | def get_schema(self, get_stats=False):
method _get_graphs_schema (line 248) | def _get_graphs_schema(self):
method _get_common_prefixes_schema (line 257) | def _get_common_prefixes_schema():
FILE: redash/query_runner/couchbase.py
function _get_column_by_name (line 33) | def _get_column_by_name(columns, column_name):
function parse_results (line 40) | def parse_results(results):
class Couchbase (line 77) | class Couchbase(BaseQueryRunner):
method configuration_schema (line 82) | def configuration_schema(cls):
method __init__ (line 101) | def __init__(self, configuration):
method enabled (line 105) | def enabled(cls):
method test_connection (line 108) | def test_connection(self):
method get_buckets (line 111) | def get_buckets(self, query, name_param):
method get_schema (line 121) | def get_schema(self, get_stats=False):
method call_service (line 132) | def call_service(self, query, user):
method run_query (line 151) | def run_query(self, query, user):
method name (line 160) | def name(cls):
FILE: redash/query_runner/csv.py
class CSV (line 23) | class CSV(BaseQueryRunner):
method name (line 27) | def name(cls):
method enabled (line 31) | def enabled(cls):
method configuration_schema (line 35) | def configuration_schema(cls):
method __init__ (line 41) | def __init__(self, configuration):
method test_connection (line 45) | def test_connection(self):
method run_query (line 48) | def run_query(self, query, user):
method get_schema (line 111) | def get_schema(self):
FILE: redash/query_runner/databend.py
class Databend (line 21) | class Databend(BaseQueryRunner):
method configuration_schema (line 25) | def configuration_schema(cls):
method name (line 42) | def name(cls):
method type (line 46) | def type(cls):
method enabled (line 50) | def enabled(cls):
method _define_column_type (line 54) | def _define_column_type(column_type):
method run_query (line 70) | def run_query(self, query, user):
method get_schema (line 92) | def get_schema(self, get_stats=False):
method _get_tables (line 118) | def _get_tables(self):
FILE: redash/query_runner/databricks.py
function _build_odbc_connection_string (line 41) | def _build_odbc_connection_string(**kwargs):
class Databricks (line 45) | class Databricks(BaseSQLQueryRunner):
method type (line 50) | def type(cls):
method enabled (line 54) | def enabled(cls):
method configuration_schema (line 58) | def configuration_schema(cls):
method _get_cursor (line 72) | def _get_cursor(self):
method run_query (line 97) | def run_query(self, query, user):
method get_schema (line 135) | def get_schema(self):
method get_databases (line 138) | def get_databases(self):
method get_database_tables (line 148) | def get_database_tables(self, database_name):
method get_database_tables_with_columns (line 162) | def get_database_tables_with_columns(self, database_name):
method get_table_columns (line 187) | def get_table_columns(self, database_name, table_name):
FILE: redash/query_runner/db2.py
class DB2 (line 42) | class DB2(BaseSQLQueryRunner):
method configuration_schema (line 46) | def configuration_schema(cls):
method type (line 62) | def type(cls):
method enabled (line 66) | def enabled(cls):
method _get_definitions (line 74) | def _get_definitions(self, schema, query):
method _get_tables (line 91) | def _get_tables(self, schema):
method _get_connection (line 105) | def _get_connection(self):
method run_query (line 117) | def run_query(self, query, user):
FILE: redash/query_runner/dgraph.py
function reduce_item (line 13) | def reduce_item(reduced_item, key, value):
class Dgraph (line 31) | class Dgraph(BaseQueryRunner):
method configuration_schema (line 41) | def configuration_schema(cls):
method type (line 55) | def type(cls):
method enabled (line 59) | def enabled(cls):
method run_dgraph_query_raw (line 62) | def run_dgraph_query_raw(self, query):
method run_query (line 82) | def run_query(self, query, user):
method get_schema (line 116) | def get_schema(self, get_stats=False):
FILE: redash/query_runner/drill.py
function convert_type (line 21) | def convert_type(string_value, actual_type):
function parse_response (line 41) | def parse_response(data):
class Drill (line 65) | class Drill(BaseHTTPQueryRunner):
method name (line 75) | def name(cls):
method configuration_schema (line 79) | def configuration_schema(cls):
method run_query (line 91) | def run_query(self, query, user):
method get_schema (line 102) | def get_schema(self, get_stats=False):
FILE: redash/query_runner/druid.py
class Druid (line 19) | class Druid(BaseQueryRunner):
method configuration_schema (line 23) | def configuration_schema(cls):
method enabled (line 39) | def enabled(cls):
method run_query (line 42) | def run_query(self, query, user):
method get_schema (line 66) | def get_schema(self, get_stats=False):
FILE: redash/query_runner/duckdb.py
class DuckDB (line 50) | class DuckDB(BaseSQLQueryRunner):
method __init__ (line 53) | def __init__(self, configuration):
method configuration_schema (line 61) | def configuration_schema(cls):
method enabled (line 80) | def enabled(cls) -> bool:
method _connect (line 83) | def _connect(self) -> None:
method run_query (line 100) | def run_query(self, query, user) -> tuple:
method get_schema (line 116) | def get_schema(self, get_stats=False) -> list:
method _expand_struct_fields (line 158) | def _expand_struct_fields(self, base_name: str, struct_type: str) -> l...
FILE: redash/query_runner/e6data.py
class e6data (line 48) | class e6data(BaseQueryRunner):
method __init__ (line 53) | def __init__(self, configuration):
method configuration_schema (line 64) | def configuration_schema(cls):
method enabled (line 88) | def enabled(cls):
method type (line 92) | def type(cls):
method run_query (line 95) | def run_query(self, query, user):
method test_connection (line 120) | def test_connection(self):
method get_schema (line 128) | def get_schema(self, get_stats=False):
FILE: redash/query_runner/elasticsearch.py
class BaseElasticSearch (line 52) | class BaseElasticSearch(BaseQueryRunner):
method configuration_schema (line 58) | def configuration_schema(cls):
method enabled (line 75) | def enabled(cls):
method __init__ (line 78) | def __init__(self, configuration):
method _get_mappings (line 104) | def _get_mappings(self, url):
method _get_query_mappings (line 123) | def _get_query_mappings(self, url):
method get_schema (line 149) | def get_schema(self, *args, **kwargs):
method _parse_results (line 180) | def _parse_results(self, mappings, result_fields, raw_result, result_c...
method test_connection (line 324) | def test_connection(self):
class Kibana (line 336) | class Kibana(BaseElasticSearch):
method enabled (line 338) | def enabled(cls):
method _execute_simple_query (line 341) | def _execute_simple_query(self, url, auth, _from, mappings, result_fie...
method run_query (line 356) | def run_query(self, query, user):
class ElasticSearch (line 425) | class ElasticSearch(BaseElasticSearch):
method enabled (line 427) | def enabled(cls):
method name (line 431) | def name(cls):
method run_query (line 434) | def run_query(self, query, user):
FILE: redash/query_runner/elasticsearch2.py
class ElasticSearch2 (line 37) | class ElasticSearch2(BaseHTTPQueryRunner):
method name (line 41) | def name(cls):
method __init__ (line 44) | def __init__(self, *args, **kwargs):
method get_response (line 48) | def get_response(self, url, auth=None, http_method="get", **kwargs):
method test_connection (line 54) | def test_connection(self):
method run_query (line 59) | def run_query(self, query, user):
method _build_query (line 67) | def _build_query(self, query: str) -> Tuple[dict, str, Optional[list]]:
method _parse_mappings (line 75) | def _parse_mappings(cls, mappings_data: dict):
method get_mappings (line 102) | def get_mappings(self):
method get_schema (line 106) | def get_schema(self, *args, **kwargs):
method _parse_results (line 113) | def _parse_results(cls, result_fields, raw_result): # noqa: C901
class OpenDistroSQLElasticSearch (line 241) | class OpenDistroSQLElasticSearch(ElasticSearch2):
method __init__ (line 242) | def __init__(self, *args, **kwargs):
method _build_query (line 246) | def _build_query(self, query: str) -> Tuple[dict, str, Optional[list]]:
method name (line 252) | def name(cls):
method type (line 256) | def type(cls):
class XPackSQLElasticSearch (line 260) | class XPackSQLElasticSearch(ElasticSearch2):
method __init__ (line 261) | def __init__(self, *args, **kwargs):
method _build_query (line 265) | def _build_query(self, query: str) -> Tuple[dict, str, Optional[list]]:
method _parse_results (line 271) | def _parse_results(cls, result_fields, raw_result):
method name (line 298) | def name(cls):
method type (line 302) | def type(cls):
FILE: redash/query_runner/exasol.py
function _exasol_type_mapper (line 14) | def _exasol_type_mapper(val, data_type):
function _type_mapper (line 40) | def _type_mapper(data_type):
class Exasol (line 64) | class Exasol(BaseQueryRunner):
method configuration_schema (line 68) | def configuration_schema(cls):
method _get_connection (line 83) | def _get_connection(self):
method run_query (line 98) | def run_query(self, query, user):
method get_schema (line 119) | def get_schema(self, get_stats=False):
method enabled (line 153) | def enabled(cls):
FILE: redash/query_runner/excel.py
class Excel (line 24) | class Excel(BaseQueryRunner):
method enabled (line 28) | def enabled(cls):
method configuration_schema (line 32) | def configuration_schema(cls):
method __init__ (line 38) | def __init__(self, configuration):
method test_connection (line 42) | def test_connection(self):
method run_query (line 45) | def run_query(self, query, user):
method get_schema (line 109) | def get_schema(self):
FILE: redash/query_runner/google_analytics.py
function parse_ga_response (line 39) | def parse_ga_response(response):
class GoogleAnalytics (line 89) | class GoogleAnalytics(BaseSQLQueryRunner):
method type (line 93) | def type(cls):
method name (line 97) | def name(cls):
method enabled (line 101) | def enabled(cls):
method configuration_schema (line 105) | def configuration_schema(cls):
method __init__ (line 113) | def __init__(self, configuration):
method _get_analytics_service (line 117) | def _get_analytics_service(self):
method _get_tables (line 128) | def _get_tables(self, schema):
method test_connection (line 151) | def test_connection(self):
method run_query (line 159) | def run_query(self, query, user):
FILE: redash/query_runner/google_analytics4.py
function format_column_value (line 41) | def format_column_value(column_name, value, columns):
function get_formatted_column_json (line 57) | def get_formatted_column_json(column_name):
function parse_ga_response (line 74) | def parse_ga_response(response):
class GoogleAnalytics4 (line 106) | class GoogleAnalytics4(BaseQueryRunner):
method type (line 110) | def type(cls):
method name (line 114) | def name(cls):
method enabled (line 118) | def enabled(cls):
method configuration_schema (line 122) | def configuration_schema(cls):
method _get_access_token (line 133) | def _get_access_token(self):
method run_query (line 146) | def run_query(self, query, user):
method test_connection (line 166) | def test_connection(self):
FILE: redash/query_runner/google_search_console.py
function parse_ga_response (line 38) | def parse_ga_response(response, dimensions):
function get_formatted_value (line 78) | def get_formatted_value(column_type, value):
class GoogleSearchConsole (line 93) | class GoogleSearchConsole(BaseSQLQueryRunner):
method type (line 97) | def type(cls):
method name (line 101) | def name(cls):
method enabled (line 105) | def enabled(cls):
method configuration_schema (line 109) | def configuration_schema(cls):
method __init__ (line 120) | def __init__(self, configuration):
method _get_search_service (line 124) | def _get_search_service(self):
method test_connection (line 135) | def test_connection(self):
method run_query (line 143) | def run_query(self, query, user):
FILE: redash/query_runner/google_spreadsheets.py
function _load_key (line 36) | def _load_key(filename):
function _get_columns_and_column_names (line 41) | def _get_columns_and_column_names(row):
function _value_eval_list (line 60) | def _value_eval_list(row_values, col_types):
class WorksheetNotFoundError (line 87) | class WorksheetNotFoundError(Exception):
method __init__ (line 88) | def __init__(self, worksheet_num, worksheet_count):
class WorksheetNotFoundByTitleError (line 95) | class WorksheetNotFoundByTitleError(Exception):
method __init__ (line 96) | def __init__(self, worksheet_title):
function parse_query (line 101) | def parse_query(query):
function parse_worksheet (line 118) | def parse_worksheet(worksheet):
function parse_spreadsheet (line 135) | def parse_spreadsheet(spreadsheet, worksheet_num_or_title):
function is_url_key (line 152) | def is_url_key(key):
function parse_api_error (line 156) | def parse_api_error(error):
class SpreadsheetWrapper (line 167) | class SpreadsheetWrapper:
method __init__ (line 168) | def __init__(self, spreadsheet):
method worksheets (line 171) | def worksheets(self):
method get_worksheet_by_index (line 174) | def get_worksheet_by_index(self, index):
method get_worksheet_by_title (line 177) | def get_worksheet_by_title(self, title):
class TimeoutSession (line 184) | class TimeoutSession(Session):
method request (line 185) | def request(self, *args, **kwargs):
class GoogleSpreadsheet (line 190) | class GoogleSpreadsheet(BaseQueryRunner):
method __init__ (line 193) | def __init__(self, configuration):
method name (line 198) | def name(cls):
method type (line 202) | def type(cls):
method enabled (line 206) | def enabled(cls):
method configuration_schema (line 210) | def configuration_schema(cls):
method _get_spreadsheet_service (line 218) | def _get_spreadsheet_service(self):
method test_connection (line 233) | def test_connection(self):
method run_query (line 246) | def run_query(self, query, user):
FILE: redash/query_runner/graphite.py
function _transform_result (line 17) | def _transform_result(response):
class Graphite (line 40) | class Graphite(BaseQueryRunner):
method configuration_schema (line 44) | def configuration_schema(cls):
method __init__ (line 57) | def __init__(self, configuration):
method test_connection (line 69) | def test_connection(self):
method run_query (line 78) | def run_query(self, query, user):
FILE: redash/query_runner/hive_ds.py
class Hive (line 48) | class Hive(BaseSQLQueryRunner):
method configuration_schema (line 53) | def configuration_schema(cls):
method type (line 67) | def type(cls):
method enabled (line 71) | def enabled(cls):
method _get_tables (line 74) | def _get_tables(self, schema):
method _get_connection (line 103) | def _get_connection(self):
method run_query (line 115) | def run_query(self, query, user):
class HiveHttp (line 159) | class HiveHttp(Hive):
method name (line 161) | def name(cls):
method type (line 165) | def type(cls):
method configuration_schema (line 169) | def configuration_schema(cls):
method _get_connection (line 198) | def _get_connection(self):
FILE: redash/query_runner/ignite.py
class Ignite (line 36) | class Ignite(BaseSQLQueryRunner):
method configuration_schema (line 41) | def configuration_schema(cls):
method name (line 60) | def name(cls):
method type (line 64) | def type(cls):
method enabled (line 68) | def enabled(cls):
method _get_tables (line 71) | def _get_tables(self, schema):
method normalise_column (line 100) | def normalise_column(self, col):
method normalise_row (line 107) | def normalise_row(self, row):
method server_to_connection (line 110) | def server_to_connection(self, s):
method _parse_results (line 123) | def _parse_results(self, c):
method run_query (line 130) | def run_query(self, query, user):
FILE: redash/query_runner/impala_ds.py
class Impala (line 44) | class Impala(BaseSQLQueryRunner):
method configuration_schema (line 48) | def configuration_schema(cls):
method type (line 74) | def type(cls):
method _get_tables (line 77) | def _get_tables(self, schema_dict):
method run_query (line 95) | def run_query(self, query, user):
FILE: redash/query_runner/influx_db.py
function _get_type (line 29) | def _get_type(value):
function _transform_result (line 33) | def _transform_result(results):
class InfluxDB (line 69) | class InfluxDB(BaseQueryRunner):
method configuration_schema (line 74) | def configuration_schema(cls):
method enabled (line 82) | def enabled(cls):
method type (line 86) | def type(cls):
method run_query (line 89) | def run_query(self, query, user):
FILE: redash/query_runner/influx_db_v2.py
class InfluxDBv2 (line 39) | class InfluxDBv2(BaseQueryRunner):
method _get_influx_kwargs (line 46) | def _get_influx_kwargs(self) -> Dict:
method _create_cert_file (line 59) | def _create_cert_file(self, key: str) -> str:
method _cleanup_cert_files (line 76) | def _cleanup_cert_files(self, influx_kwargs: Dict) -> None:
method configuration_schema (line 86) | def configuration_schema(cls: Type[T]) -> Dict:
method enabled (line 112) | def enabled(cls: Type[T]) -> bool:
method test_connection (line 120) | def test_connection(self) -> None:
method _get_type (line 144) | def _get_type(self, type_: str) -> str:
method _get_data_from_tables (line 153) | def _get_data_from_tables(self, tables: Any) -> Dict:
method run_query (line 178) | def run_query(self, query: str, user: str) -> Tuple[Optional[str], Opt...
FILE: redash/query_runner/jql.py
class ResultSet (line 9) | class ResultSet:
method __init__ (line 10) | def __init__(self):
method add_row (line 14) | def add_row(self, row):
method add_column (line 20) | def add_column(self, column, column_type=TYPE_STRING):
method to_json (line 28) | def to_json(self):
method merge (line 31) | def merge(self, set):
function parse_issue (line 35) | def parse_issue(issue, field_mapping): # noqa: C901
function parse_issues (line 94) | def parse_issues(data, field_mapping):
function parse_count (line 103) | def parse_count(data):
class FieldMapping (line 111) | class FieldMapping:
method __init__ (line 112) | def __init__(cls, query_field_mapping):
method get_output_field_name (line 132) | def get_output_field_name(cls, field_name):
method get_dict_members (line 138) | def get_dict_members(cls, field_name):
method get_dict_output_field_name (line 145) | def get_dict_output_field_name(cls, field_name, member_name):
class JiraJQL (line 152) | class JiraJQL(BaseHTTPQueryRunner):
method name (line 161) | def name(cls):
method __init__ (line 164) | def __init__(self, configuration):
method run_query (line 168) | def run_query(self, query, user):
FILE: redash/query_runner/json_ds.py
class QueryParseError (line 19) | class QueryParseError(Exception):
function parse_query (line 23) | def parse_query(query):
function _get_column_by_name (line 47) | def _get_column_by_name(columns, column_name):
function _get_type (line 55) | def _get_type(value):
function add_column (line 59) | def add_column(columns, column_name, column_type):
function _apply_path_search (line 64) | def _apply_path_search(response, path, default=None):
function _normalize_json (line 82) | def _normalize_json(data, path):
function _sort_columns_with_fields (line 93) | def _sort_columns_with_fields(columns, fields):
function parse_json (line 101) | def parse_json(data, fields):
class JSON (line 133) | class JSON(BaseHTTPQueryRunner):
method configuration_schema (line 138) | def configuration_schema(cls):
method __init__ (line 150) | def __init__(self, configuration):
method test_connection (line 154) | def test_connection(self):
method run_query (line 157) | def run_query(self, query, user):
method _run_json_query (line 168) | def _run_json_query(self, query):
method _get_all_results (line 200) | def _get_all_results(self, url, method, result_path, pagination, **req...
method _get_json_response (line 219) | def _get_json_response(self, url, method, **request_options):
class RequestPagination (line 225) | class RequestPagination:
method next (line 226) | def next(self, url, request_options, response):
method from_config (line 235) | def from_config(configuration, pagination):
class UrlPagination (line 247) | class UrlPagination(RequestPagination):
method __init__ (line 248) | def __init__(self, pagination):
method next (line 253) | def next(self, url, request_options, response):
class TokenPagination (line 262) | class TokenPagination(RequestPagination):
method __init__ (line 263) | def __init__(self, pagination):
method next (line 268) | def next(self, url, request_options, response):
FILE: redash/query_runner/kylin.py
class Kylin (line 59) | class Kylin(BaseQueryRunner):
method configuration_schema (line 61) | def configuration_schema(cls):
method run_query (line 79) | def run_query(self, query, user):
method get_schema (line 106) | def get_schema(self, get_stats=False):
method test_connection (line 123) | def test_connection(self):
method get_columns (line 127) | def get_columns(self, colmetas):
method get_rows (line 138) | def get_rows(self, columns, results):
method get_table_schema (line 141) | def get_table_schema(self, table):
FILE: redash/query_runner/memsql_ds.py
class MemSQL (line 47) | class MemSQL(BaseSQLQueryRunner):
method configuration_schema (line 52) | def configuration_schema(cls):
method type (line 66) | def type(cls):
method enabled (line 70) | def enabled(cls):
method _get_tables (line 73) | def _get_tables(self, schema):
method run_query (line 100) | def run_query(self, query, user):
FILE: redash/query_runner/mongodb.py
function parse_oids (line 48) | def parse_oids(oids):
function datetime_parser (line 55) | def datetime_parser(dct):
function parse_query_json (line 72) | def parse_query_json(query: str):
function _get_column_by_name (line 77) | def _get_column_by_name(columns, column_name):
function _parse_dict (line 85) | def _parse_dict(dic: dict, flatten: bool = False) -> dict:
function parse_results (line 111) | def parse_results(results: list, flatten: bool = False) -> list:
function _sorted_fields (line 134) | def _sorted_fields(fields):
class MongoDB (line 145) | class MongoDB(BaseQueryRunner):
method configuration_schema (line 149) | def configuration_schema(cls):
method enabled (line 183) | def enabled(cls):
method __init__ (line 186) | def __init__(self, configuration):
method custom_json_encoder (line 201) | def custom_json_encoder(cls, dec, o):
method _get_db (line 210) | def _get_db(self):
method test_connection (line 228) | def test_connection(self):
method _merge_property_names (line 235) | def _merge_property_names(self, columns, document):
method _is_collection_a_view (line 240) | def _is_collection_a_view(self, db, collection_name):
method _get_collection_fields (line 246) | def _get_collection_fields(self, db, collection_name):
method get_schema (line 278) | def get_schema(self, get_stats=False):
method run_query (line 293) | def run_query(self, query, user): # noqa: C901
FILE: redash/query_runner/mssql.py
class SqlServer (line 33) | class SqlServer(BaseSQLQueryRunner):
method configuration_schema (line 42) | def configuration_schema(cls):
method enabled (line 67) | def enabled(cls):
method name (line 71) | def name(cls):
method type (line 75) | def type(cls):
method _get_tables (line 78) | def _get_tables(self, schema):
method run_query (line 106) | def run_query(self, query, user):
FILE: redash/query_runner/mssql_odbc.py
class SQLServerODBC (line 20) | class SQLServerODBC(BaseSQLQueryRunner):
method configuration_schema (line 29) | def configuration_schema(cls):
method enabled (line 70) | def enabled(cls):
method name (line 74) | def name(cls):
method type (line 78) | def type(cls):
method supports_auto_limit (line 82) | def supports_auto_limit(self):
method _get_tables (line 85) | def _get_tables(self, schema):
method run_query (line 113) | def run_query(self, query, user):
FILE: redash/query_runner/mysql.py
class Result (line 46) | class Result:
method __init__ (line 47) | def __init__(self):
class Mysql (line 51) | class Mysql(BaseSQLQueryRunner):
method configuration_schema (line 55) | def configuration_schema(cls):
method name (line 120) | def name(cls):
method enabled (line 124) | def enabled(cls):
method _connection (line 127) | def _connection(self):
method _get_tables (line 149) | def _get_tables(self, schema):
method run_query (line 209) | def run_query(self, query, user):
method _run_query (line 229) | def _run_query(self, query, user, connection, r, ev):
method _get_ssl_parameters (line 266) | def _get_ssl_parameters(self):
method _cancel (line 281) | def _cancel(self, thread_id):
class RDSMySQL (line 303) | class RDSMySQL(Mysql):
method name (line 305) | def name(cls):
method type (line 309) | def type(cls):
method configuration_schema (line 313) | def configuration_schema(cls):
method _get_ssl_parameters (line 330) | def _get_ssl_parameters(self):
FILE: redash/query_runner/nz.py
class Netezza (line 70) | class Netezza(BaseSQLQueryRunner):
method configuration_schema (line 74) | def configuration_schema(cls):
method type (line 90) | def type(cls):
method __init__ (line 93) | def __init__(self, configuration):
method connection (line 98) | def connection(self):
method get_schema (line 109) | def get_schema(self, get_stats=False):
method enabled (line 131) | def enabled(cls):
method type_map (line 135) | def type_map(self, typid, func):
method run_query (line 151) | def run_query(self, query, user):
FILE: redash/query_runner/oracle.py
class Oracle (line 40) | class Oracle(BaseSQLQueryRunner):
method get_col_type (line 47) | def get_col_type(cls, col_type, scale):
method enabled (line 58) | def enabled(cls):
method configuration_schema (line 62) | def configuration_schema(cls):
method type (line 82) | def type(cls):
method _get_tables (line 85) | def _get_tables(self, schema):
method _convert_number (line 114) | def _convert_number(cls, value):
method output_handler (line 121) | def output_handler(cls, cursor, name, default_type, length, precision,...
method run_query (line 137) | def run_query(self, query, user):
FILE: redash/query_runner/pg.py
function _wait (line 58) | def _wait(conn, timeout=None):
function full_table_name (line 74) | def full_table_name(schema, name):
function build_schema (line 81) | def build_schema(query_result, schema):
function _create_cert_file (line 115) | def _create_cert_file(configuration, key, ssl_config):
function _cleanup_ssl_certs (line 125) | def _cleanup_ssl_certs(ssl_config):
function _get_ssl_config (line 131) | def _get_ssl_config(configuration):
function _parse_dsn (line 141) | def _parse_dsn(configuration):
class PostgreSQL (line 150) | class PostgreSQL(BaseSQLQueryRunner):
method configuration_schema (line 154) | def configuration_schema(cls):
method type (line 193) | def type(cls):
method custom_json_encoder (line 197) | def custom_json_encoder(cls, dec, o):
method _get_definitions (line 208) | def _get_definitions(self, schema, query):
method _get_tables (line 216) | def _get_tables(self, schema):
method _get_connection (line 255) | def _get_connection(self):
method run_query (line 271) | def run_query(self, query, user):
class Redshift (line 306) | class Redshift(PostgreSQL):
method type (line 308) | def type(cls):
method name (line 312) | def name(cls):
method _get_connection (line 315) | def _get_connection(self):
method configuration_schema (line 334) | def configuration_schema(cls):
method annotate_query (line 369) | def annotate_query(self, query, metadata):
method _get_tables (line 383) | def _get_tables(self, schema):
class RedshiftIAM (line 418) | class RedshiftIAM(Redshift):
method type (line 420) | def type(cls):
method name (line 424) | def name(cls):
method enabled (line 428) | def enabled(cls):
method _login_method_selection (line 431) | def _login_method_selection(self):
method configuration_schema (line 443) | def configuration_schema(cls):
method _get_connection (line 489) | def _get_connection(self):
class CockroachDB (line 547) | class CockroachDB(PostgreSQL):
method type (line 549) | def type(cls):
FILE: redash/query_runner/phoenix.py
class Phoenix (line 52) | class Phoenix(BaseQueryRunner):
method configuration_schema (line 56) | def configuration_schema(cls):
method enabled (line 64) | def enabled(cls):
method type (line 68) | def type(cls):
method get_schema (line 71) | def get_schema(self, get_stats=False):
method run_query (line 94) | def run_query(self, query, user):
FILE: redash/query_runner/pinot.py
class Pinot (line 38) | class Pinot(BaseQueryRunner):
method configuration_schema (line 44) | def configuration_schema(cls):
method enabled (line 61) | def enabled(cls):
method __init__ (line 64) | def __init__(self, configuration):
method run_query (line 70) | def run_query(self, query, user):
method get_schema (line 100) | def get_schema(self, get_stats=False):
method get_schema_names (line 121) | def get_schema_names(self):
method get_pinot_table_schema (line 124) | def get_pinot_table_schema(self, pinot_table_name):
method get_table_names (line 127) | def get_table_names(self):
method get_metadata_from_controller (line 130) | def get_metadata_from_controller(self, path):
FILE: redash/query_runner/presto.py
class Presto (line 42) | class Presto(BaseQueryRunner):
method configuration_schema (line 46) | def configuration_schema(cls):
method enabled (line 71) | def enabled(cls):
method type (line 75) | def type(cls):
method get_schema (line 78) | def get_schema(self, get_stats=False):
method run_query (line 101) | def run_query(self, query, user):
FILE: redash/query_runner/prometheus.py
function get_instant_rows (line 19) | def get_instant_rows(metrics_data):
function get_range_rows (line 33) | def get_range_rows(metrics_data):
function convert_query_range (line 52) | def convert_query_range(payload):
class Prometheus (line 75) | class Prometheus(BaseQueryRunner):
method _get_datetime_now (line 78) | def _get_datetime_now(self):
method _get_prometheus_kwargs (line 81) | def _get_prometheus_kwargs(self):
method _create_cert_file (line 100) | def _create_cert_file(self, key):
method _cleanup_cert_files (line 111) | def _cleanup_cert_files(self, promehteus_kwargs):
method configuration_schema (line 122) | def configuration_schema(cls):
method test_connection (line 142) | def test_connection(self):
method get_schema (line 156) | def get_schema(self, get_stats=False):
method run_query (line 180) | def run_query(self, query, user):
FILE: redash/query_runner/python.py
class CustomPrint (line 41) | class CustomPrint:
method __init__ (line 44) | def __init__(self):
method write (line 48) | def write(self, text):
method enable (line 54) | def enable(self):
method disable (line 57) | def disable(self):
method __call__ (line 60) | def __call__(self, *args):
method _call_print (line 63) | def _call_print(self, *objects, **kwargs):
class Python (line 67) | class Python(BaseQueryRunner):
method configuration_schema (line 99) | def configuration_schema(cls):
method enabled (line 113) | def enabled(cls):
method __init__ (line 116) | def __init__(self, configuration):
method custom_import (line 140) | def custom_import(self, name, globals=None, locals=None, fromlist=(), ...
method custom_write (line 154) | def custom_write(obj):
method custom_get_item (line 162) | def custom_get_item(obj, key):
method custom_get_iter (line 166) | def custom_get_iter(obj):
method custom_inplacevar (line 170) | def custom_inplacevar(op, x, y):
method add_result_column (line 178) | def add_result_column(result, column_name, friendly_name, column_type):
method add_result_row (line 196) | def add_result_row(result, values):
method execute_query (line 209) | def execute_query(data_source_name_or_id, query, result_type=None):
method get_source_schema (line 238) | def get_source_schema(data_source_name_or_id):
method get_query_result (line 255) | def get_query_result(query_id):
method dataframe_to_result (line 274) | def dataframe_to_result(self, result, df):
method get_current_user (line 281) | def get_current_user(self):
method test_connection (line 284) | def test_connection(self):
method validate_result (line 287) | def validate_result(self, result):
method run_query (line 306) | def run_query(self, query, user):
FILE: redash/query_runner/query_results.py
class PermissionError (line 23) | class PermissionError(Exception):
class CreateTableError (line 27) | class CreateTableError(Exception):
function extract_query_params (line 31) | def extract_query_params(query):
function extract_query_ids (line 35) | def extract_query_ids(query):
function extract_cached_query_ids (line 40) | def extract_cached_query_ids(query):
function _load_query (line 45) | def _load_query(user, query_id):
function replace_query_parameters (line 59) | def replace_query_parameters(query_text, params):
function get_query_results (line 66) | def get_query_results(user, query_id, bring_from_cache, params=None):
function create_tables_from_query_ids (line 85) | def create_tables_from_query_ids(user, connection, query_ids, query_para...
function fix_column_name (line 105) | def fix_column_name(name):
function flatten (line 109) | def flatten(value):
function create_table (line 120) | def create_table(connection, table_name, query_results):
function prepare_parameterized_query (line 145) | def prepare_parameterized_query(query, query_params):
class Results (line 156) | class Results(BaseQueryRunner):
method configuration_schema (line 161) | def configuration_schema(cls):
method name (line 165) | def name(cls):
method run_query (line 168) | def run_query(self, query, user):
FILE: redash/query_runner/risingwave.py
class RisingWave (line 5) | class RisingWave(PostgreSQL):
method type (line 7) | def type(cls):
method name (line 11) | def name(cls):
method _get_tables (line 14) | def _get_tables(self, schema):
FILE: redash/query_runner/rockset.py
function _get_type (line 13) | def _get_type(value):
class RocksetAPI (line 27) | class RocksetAPI:
method __init__ (line 28) | def __init__(self, api_key, api_server, vi_id):
method _request (line 33) | def _request(self, endpoint, method="GET", body=None):
method list_workspaces (line 46) | def list_workspaces(self):
method list_collections (line 50) | def list_collections(self, workspace="commons"):
method collection_columns (line 54) | def collection_columns(self, workspace, collection):
method query (line 58) | def query(self, sql):
class Rockset (line 65) | class Rockset(BaseSQLQueryRunner):
method configuration_schema (line 69) | def configuration_schema(cls):
method type (line 87) | def type(cls):
method __init__ (line 90) | def __init__(self, configuration):
method _get_tables (line 98) | def _get_tables(self, schema):
method run_query (line 108) | def run_query(self, query, user):
FILE: redash/query_runner/salesforce.py
class Salesforce (line 61) | class Salesforce(BaseQueryRunner):
method enabled (line 65) | def enabled(cls):
method configuration_schema (line 69) | def configuration_schema(cls):
method test_connection (line 87) | def test_connection(self):
method _get_sf (line 93) | def _get_sf(self):
method _clean_value (line 104) | def _clean_value(self, value):
method _get_value (line 111) | def _get_value(self, dct, dots):
method _get_column_name (line 119) | def _get_column_name(self, key, parents=[]):
method _build_columns (line 122) | def _build_columns(self, sf, child, parents=[]):
method _build_rows (line 138) | def _build_rows(self, columns, records):
method run_query (line 150) | def run_query(self, query, user):
method get_schema (line 173) | def get_schema(self, get_stats=False):
FILE: redash/query_runner/script.py
function query_to_script_path (line 7) | def query_to_script_path(path, query):
function run_script (line 18) | def run_script(script, shell):
class Script (line 30) | class Script(BaseQueryRunner):
method enabled (line 34) | def enabled(cls):
method configuration_schema (line 38) | def configuration_schema(cls):
method type (line 52) | def type(cls):
method __init__ (line 55) | def __init__(self, configuration):
method test_connection (line 67) | def test_connection(self):
method run_query (line 70) | def run_query(self, query, user):
FILE: redash/query_runner/snowflake.py
class Snowflake (line 38) | class Snowflake(BaseSQLQueryRunner):
method configuration_schema (line 42) | def configuration_schema(cls):
method enabled (line 80) | def enabled(cls):
method determine_type (line 84) | def determine_type(cls, data_type, scale):
method _get_connection (line 90) | def _get_connection(self):
method _column_name (line 132) | def _column_name(self, column_name):
method _parse_results (line 138) | def _parse_results(self, cursor):
method run_query (line 147) | def run_query(self, query, user):
method _run_query_without_warehouse (line 165) | def _run_query_without_warehouse(self, query):
method _database_name_includes_schema (line 182) | def _database_name_includes_schema(self):
method get_schema (line 185) | def get_schema(self, get_stats=False):
FILE: redash/query_runner/sparql_endpoint.py
class SPARQLEndpointQueryRunner (line 26) | class SPARQLEndpointQueryRunner(BaseQueryRunner):
method __init__ (line 38) | def __init__(self, configuration):
method _setup_environment (line 44) | def _setup_environment(self):
method _transform_sparql_results (line 62) | def _transform_sparql_results(results):
method name (line 106) | def name(cls):
method enabled (line 110) | def enabled(cls):
method type (line 114) | def type(cls):
method remove_comments (line 117) | def remove_comments(self, string):
method run_query (line 120) | def run_query(self, query, user):
method configuration_schema (line 158) | def configuration_schema(cls):
method get_schema (line 175) | def get_schema(self, get_stats=False):
method _get_graphs_schema (line 187) | def _get_graphs_schema(self):
method _get_common_prefixes_schema (line 204) | def _get_common_prefixes_schema():
FILE: redash/query_runner/sqlite.py
class Sqlite (line 13) | class Sqlite(BaseSQLQueryRunner):
method configuration_schema (line 17) | def configuration_schema(cls):
method type (line 25) | def type(cls):
method __init__ (line 28) | def __init__(self, configuration):
method _get_tables (line 33) | def _get_tables(self, schema):
method run_query (line 54) | def run_query(self, query, user):
FILE: redash/query_runner/tinybird.py
class Tinybird (line 11) | class Tinybird(ClickHouse):
method configuration_schema (line 21) | def configuration_schema(cls):
method _get_tables (line 44) | def _get_tables(self, schema):
method _send_query (line 59) | def _send_query(self, data, session_id=None, session_check=None):
method _collect_tinybird_schema (line 65) | def _collect_tinybird_schema(self, schema, endpoint, resource_type):
method _get_from_tinybird (line 88) | def _get_from_tinybird(self, endpoint, params=None):
FILE: redash/query_runner/treasuredata.py
class TreasureData (line 44) | class TreasureData(BaseQueryRunner):
method configuration_schema (line 49) | def configuration_schema(cls):
method enabled (line 68) | def enabled(cls):
method type (line 72) | def type(cls):
method get_schema (line 75) | def get_schema(self, get_stats=False):
method run_query (line 93) | def run_query(self, query, user):
FILE: redash/query_runner/trino.py
function _convert_row_types (line 32) | def _convert_row_types(value):
class Trino (line 65) | class Trino(BaseQueryRunner):
method configuration_schema (line 70) | def configuration_schema(cls):
method enabled (line 113) | def enabled(cls):
method type (line 117) | def type(cls):
method get_schema (line 120) | def get_schema(self, get_stats=False):
method _get_catalogs (line 149) | def _get_catalogs(self):
method _get_trino_user (line 166) | def _get_trino_user(self, user):
method _get_client_tags (line 185) | def _get_client_tags(self):
method run_query (line 192) | def run_query(self, query, user):
FILE: redash/query_runner/uptycs.py
class Uptycs (line 13) | class Uptycs(BaseSQLQueryRunner):
method configuration_schema (line 18) | def configuration_schema(cls):
method generate_header (line 37) | def generate_header(self, key, secret):
method transformed_to_redash_json (line 47) | def transformed_to_redash_json(self, data):
method api_call (line 63) | def api_call(self, sql):
method run_query (line 99) | def run_query(self, query, user):
method get_schema (line 104) | def get_schema(self, get_stats=False):
FILE: redash/query_runner/url.py
class Url (line 6) | class Url(BaseHTTPQueryRunner):
method test_connection (line 9) | def test_connection(self):
method run_query (line 12) | def run_query(self, query, user):
FILE: redash/query_runner/vertica.py
class Vertica (line 37) | class Vertica(BaseSQLQueryRunner):
method configuration_schema (line 41) | def configuration_schema(cls):
method enabled (line 67) | def enabled(cls):
method _get_tables (line 75) | def _get_tables(self, schema):
method run_query (line 97) | def run_query(self, query, user):
FILE: redash/query_runner/yandex_disk.py
class YandexDisk (line 32) | class YandexDisk(BaseSQLQueryRunner):
method type (line 36) | def type(cls):
method name (line 40) | def name(cls):
method configuration_schema (line 44) | def configuration_schema(cls):
method __init__ (line 54) | def __init__(self, configuration):
method _get_tables (line 60) | def _get_tables(self, schema):
method test_connection (line 88) | def test_connection(self):
method _send_query (line 91) | def _send_query(self, url_path="", **kwargs):
method run_query (line 106) | def run_query(self, query, user):
FILE: redash/query_runner/yandex_metrica.py
function parse_ym_response (line 54) | def parse_ym_response(response):
class QuotaException (line 82) | class QuotaException(Exception):
class YandexMetrica (line 86) | class YandexMetrica(BaseSQLQueryRunner):
method type (line 90) | def type(cls):
method name (line 95) | def name(cls):
method configuration_schema (line 99) | def configuration_schema(cls):
method __init__ (line 107) | def __init__(self, configuration):
method _get_tables (line 113) | def _get_tables(self, schema):
method test_connection (line 126) | def test_connection(self):
method _send_query (line 130) | def _send_query(self, path="stat/v1/data", **kwargs):
method run_query (line 148) | def run_query(self, query, user):
class YandexAppMetrica (line 178) | class YandexAppMetrica(YandexMetrica):
method type (line 180) | def type(cls):
method name (line 185) | def name(cls):
method __init__ (line 188) | def __init__(self, configuration):
FILE: redash/security.py
function csp_allows_embeding (line 14) | def csp_allows_embeding(fn):
function init_app (line 23) | def init_app(app):
FILE: redash/serializers/__init__.py
function public_widget (line 22) | def public_widget(widget):
function public_dashboard (line 52) | def public_dashboard(dashboard):
class Serializer (line 68) | class Serializer:
class QuerySerializer (line 72) | class QuerySerializer(Serializer):
method __init__ (line 73) | def __init__(self, object_or_list, **kwargs):
method serialize (line 77) | def serialize(self):
function serialize_query (line 102) | def serialize_query(
function serialize_visualization (line 153) | def serialize_visualization(object, with_query=True):
function serialize_widget (line 170) | def serialize_widget(object):
function serialize_alert (line 187) | def serialize_alert(alert, full=True):
function serialize_dashboard (line 209) | def serialize_dashboard(obj, with_widgets=False, user=None, with_favorit...
class DashboardSerializer (line 263) | class DashboardSerializer(Serializer):
method __init__ (line 264) | def __init__(self, object_or_list, **kwargs):
method serialize (line 268) | def serialize(self):
function serialize_job (line 293) | def serialize_job(job):
FILE: redash/serializers/query_result.py
function _convert_format (line 12) | def _convert_format(fmt):
function _convert_bool (line 25) | def _convert_bool(value):
function _convert_datetime (line 34) | def _convert_datetime(value, fmt):
function _get_column_lists (line 47) | def _get_column_lists(columns):
function serialize_query_result (line 75) | def serialize_query_result(query_result, is_api_user):
function serialize_query_result_to_dsv (line 83) | def serialize_query_result_to_dsv(query_result, delimiter):
function serialize_query_result_to_xlsx (line 103) | def serialize_query_result_to_xlsx(query_result):
FILE: redash/settings/__init__.py
function email_server_is_configured (line 249) | def email_server_is_configured():
FILE: redash/settings/dynamic_settings.py
function query_time_limit (line 5) | def query_time_limit(is_scheduled, user_id, org_id):
function periodic_jobs (line 14) | def periodic_jobs():
function ssh_tunnel_auth (line 33) | def ssh_tunnel_auth():
function database_key_definitions (line 45) | def database_key_definitions(default):
FILE: redash/settings/helpers.py
function fix_assets_path (line 5) | def fix_assets_path(path):
function array_from_string (line 10) | def array_from_string(s):
function set_from_string (line 18) | def set_from_string(s):
function parse_boolean (line 22) | def parse_boolean(s):
function cast_int_or_default (line 33) | def cast_int_or_default(val, default=None):
function int_or_none (line 40) | def int_or_none(value):
function add_decode_responses_to_redis_url (line 47) | def add_decode_responses_to_redis_url(url):
FILE: redash/tasks/__init__.py
function init_app (line 29) | def init_app(app):
FILE: redash/tasks/alerts.py
function notify_subscriptions (line 11) | def notify_subscriptions(alert, new_state, metadata):
function should_notify (line 20) | def should_notify(alert, new_state):
function check_alerts_for_query (line 29) | def check_alerts_for_query(query_id, metadata):
FILE: redash/tasks/databricks.py
function get_databricks_databases (line 10) | def get_databricks_databases(data_source_id, redis_key):
function get_database_tables_with_columns (line 22) | def get_database_tables_with_columns(data_source_id, database_name, redi...
function get_databricks_tables (line 39) | def get_databricks_tables(data_source_id, database_name):
function get_databricks_table_columns (line 49) | def get_databricks_table_columns(data_source_id, database_name, table_na...
FILE: redash/tasks/failure_report.py
function key (line 13) | def key(user_id):
function comment_for (line 17) | def comment_for(failure):
function send_aggregated_errors (line 27) | def send_aggregated_errors():
function send_failure_report (line 33) | def send_failure_report(user_id):
function notify_of_failure (line 68) | def notify_of_failure(message, query):
function track_failure (line 87) | def track_failure(query, error):
FILE: redash/tasks/general.py
function record_event (line 15) | def record_event(raw_event):
function version_check (line 33) | def version_check():
function subscribe (line 38) | def subscribe(form):
function send_mail (line 55) | def send_mail(to, subject, html, text):
function test_connection (line 65) | def test_connection(data_source_id):
function get_schema (line 76) | def get_schema(data_source_id, refresh):
function sync_user_details (line 91) | def sync_user_details():
FILE: redash/tasks/queries/execution.py
function _job_lock_id (line 24) | def _job_lock_id(query_hash, data_source_id):
function _unlock (line 28) | def _unlock(query_hash, data_source_id):
function enqueue_query (line 32) | def enqueue_query(query, data_source, user_id, is_api_key=False, schedul...
function signal_handler (line 126) | def signal_handler(*args):
class QueryExecutionError (line 130) | class QueryExecutionError(Exception):
function _resolve_user (line 134) | def _resolve_user(user_id, is_api_key, query_id):
function _get_size_iterative (line 150) | def _get_size_iterative(dict_obj):
class QueryExecutor (line 174) | class QueryExecutor:
method __init__ (line 175) | def __init__(self, query, data_source_id, user_id, is_api_key, metadat...
method run (line 197) | def run(self):
method _annotate_query (line 265) | def _annotate_query(self, query_runner):
method _log_progress (line 272) | def _log_progress(self, state):
method _load_data_source (line 286) | def _load_data_source(self):
function execute_query (line 293) | def execute_query(
FILE: redash/tasks/queries/maintenance.py
function empty_schedules (line 22) | def empty_schedules():
function _should_refresh_query (line 33) | def _should_refresh_query(query):
function _apply_default_parameters (line 55) | def _apply_default_parameters(query):
class RefreshQueriesError (line 75) | class RefreshQueriesError(Exception):
function _apply_auto_limit (line 79) | def _apply_auto_limit(query_text, query):
function refresh_queries (line 84) | def refresh_queries():
function cleanup_query_results (line 120) | def cleanup_query_results():
function remove_ghost_locks (line 143) | def remove_ghost_locks():
function refresh_schema (line 162) | def refresh_schema(data_source_id):
function refresh_schemas (line 193) | def refresh_schemas():
FILE: redash/tasks/schedule.py
class StatsdRecordingScheduler (line 24) | class StatsdRecordingScheduler(Scheduler):
function job_id (line 35) | def job_id(kwargs):
function prep (line 42) | def prep(kwargs):
function schedule (line 53) | def schedule(kwargs):
function periodic_job_definitions (line 57) | def periodic_job_definitions():
function schedule_periodic_jobs (line 94) | def schedule_periodic_jobs(jobs):
FILE: redash/tasks/worker.py
class CancellableJob (line 25) | class CancellableJob(BaseJob):
method cancel (line 26) | def cancel(self, pipeline=None):
method is_cancelled (line 33) | def is_cancelled(self):
class StatsdRecordingQueue (line 37) | class StatsdRecordingQueue(BaseQueue):
method enqueue_job (line 42) | def enqueue_job(self, *args, **kwargs):
class CancellableQueue (line 48) | class CancellableQueue(BaseQueue):
class RedashQueue (line 52) | class RedashQueue(StatsdRecordingQueue, CancellableQueue):
class StatsdRecordingWorker (line 56) | class StatsdRecordingWorker(BaseWorker):
method execute_job (line 61) | def execute_job(self, job, queue):
class HardLimitingWorker (line 74) | class HardLimitingWorker(BaseWorker):
method stop_executing_job (line 93) | def stop_executing_job(self, job):
method soft_limit_exceeded (line 97) | def soft_limit_exceeded(self, job):
method enforce_hard_limit (line 106) | def enforce_hard_limit(self, job):
method monitor_work_horse (line 116) | def monitor_work_horse(self, job: "Job", queue: "Queue"):
class RedashWorker (line 194) | class RedashWorker(StatsdRecordingWorker, HardLimitingWorker):
FILE: redash/utils/__init__.py
function utcnow (line 32) | def utcnow():
function dt_from_timestamp (line 41) | def dt_from_timestamp(timestamp, tz_aware=True):
function slugify (line 50) | def slugify(s):
function gen_query_hash (line 54) | def gen_query_hash(sql):
function generate_token (line 67) | def generate_token(length):
class JSONEncoder (line 74) | class JSONEncoder(json.JSONEncoder):
method __init__ (line 77) | def __init__(self, **kwargs):
method default (line 83) | def default(self, o):
function json_loads (line 118) | def json_loads(data, *args, **kwargs):
function _sanitize_data (line 125) | def _sanitize_data(data):
function json_dumps (line 135) | def json_dumps(data, *args, **kwargs):
function mustache_render (line 146) | def mustache_render(template, context=None, **kwargs):
function mustache_render_escape (line 151) | def mustache_render_escape(template, context=None, **kwargs):
function build_url (line 156) | def build_url(request, host, path):
class UnicodeWriter (line 166) | class UnicodeWriter:
method __init__ (line 172) | def __init__(self, f, dialect=csv.excel, encoding=WRITER_ENCODING, **k...
method _encode_utf8 (line 179) | def _encode_utf8(self, val):
method writerow (line 185) | def writerow(self, row):
method writerows (line 197) | def writerows(self, rows):
function collect_parameters_from_request (line 202) | def collect_parameters_from_request(args):
function base_url (line 212) | def base_url(org):
function filter_none (line 219) | def filter_none(d):
function to_filename (line 223) | def to_filename(s):
function deprecated (line 229) | def deprecated():
function render_template (line 237) | def render_template(path, context):
FILE: redash/utils/configuration.py
class ConfigurationContainer (line 12) | class ConfigurationContainer(Mutable):
method coerce (line 14) | def coerce(cls, key, value):
method __init__ (line 24) | def __init__(self, config, schema=None):
method set_schema (line 28) | def set_schema(self, schema):
method schema (line 38) | def schema(self):
method is_valid (line 44) | def is_valid(self):
method validate (line 52) | def validate(self):
method to_json (line 55) | def to_json(self):
method iteritems (line 58) | def iteritems(self):
method to_dict (line 61) | def to_dict(self, mask_secrets=False):
method update (line 72) | def update(self, new_config):
method get (line 85) | def get(self, *args, **kwargs):
method __setitem__ (line 88) | def __setitem__(self, key, value):
method __getitem__ (line 92) | def __getitem__(self, item):
method __contains__ (line 98) | def __contains__(self, item):
method from_json (line 102) | def from_json(cls, config_in_json):
FILE: redash/utils/human_time.py
function parse_human_time (line 9) | def parse_human_time(s):
FILE: redash/utils/pandas.py
function get_column_types_from_dataframe (line 21) | def get_column_types_from_dataframe(df: pd.DataFrame) -> list:
function pandas_to_result (line 44) | def pandas_to_result(df: pd.DataFrame) -> dict:
FILE: redash/utils/query_order.py
function get_query_descriptor (line 39) | def get_query_descriptor(query, entity, attr):
function query_labels (line 51) | def query_labels(query):
function get_query_entity_by_alias (line 67) | def get_query_entity_by_alias(query, alias):
function get_query_entities (line 80) | def get_query_entities(query):
function is_labeled_query (line 104) | def is_labeled_query(expr):
function get_query_entity (line 110) | def get_query_entity(expr):
function get_mapper (line 120) | def get_mapper(mixed):
function get_polymorphic_mappers (line 165) | def get_polymorphic_mappers(mixed):
function get_descriptor (line 172) | def get_descriptor(entity, attr):
function get_all_descriptors (line 199) | def get_all_descriptors(expr):
class QuerySorterException (line 216) | class QuerySorterException(Exception):
class QuerySorter (line 220) | class QuerySorter:
method __init__ (line 221) | def __init__(self, silent=True, separator="-"):
method assign_order_by (line 225) | def assign_order_by(self, entity, attr, func):
method parse_sort_arg (line 233) | def parse_sort_arg(self, arg):
method __call__ (line 246) | def __call__(self, query, *args):
function sort_query (line 255) | def sort_query(query, *args, **kwargs):
FILE: redash/utils/requests_session.py
class ConfiguredSession (line 19) | class ConfiguredSession(requests_or_advocate.Session):
method request (line 20) | def request(self, *args, **kwargs):
FILE: redash/utils/sentry.py
function before_send (line 17) | def before_send(event, hint):
function init (line 26) | def init():
FILE: redash/version_check.py
function usage_data (line 13) | def usage_data():
function run_version_check (line 61) | def run_version_check():
function reset_new_version_status (line 85) | def reset_new_version_status():
function get_latest_version (line 91) | def get_latest_version():
function _compare_and_update (line 95) | def _compare_and_update(latest_version):
FILE: redash/worker.py
class StatsdRecordingJobDecorator (line 15) | class StatsdRecordingJobDecorator(rq_job): # noqa
class CurrentJobFilter (line 28) | class CurrentJobFilter(logging.Filter):
method filter (line 29) | def filter(self, record):
function get_job_logger (line 38) | def get_job_logger(name):
FILE: tests/__init__.py
function authenticate_request (line 31) | def authenticate_request(c, user):
function authenticated_user (line 37) | def authenticated_user(c, user=None):
class BaseTestCase (line 46) | class BaseTestCase(TestCase):
method setUp (line 47) | def setUp(self):
method tearDown (line 60) | def tearDown(self):
method make_request (line 66) | def make_request(
method get_request (line 108) | def get_request(self, path, org=None, headers=None, client=None):
method post_request (line 116) | def post_request(self, path, data=None, org=None, headers=None):
method assertResponseEqual (line 122) | def assertResponseEqual(self, expected, actual):
FILE: tests/destinations/test_webhook.py
function test_webhook_notify_handles_unicode (line 8) | def test_webhook_notify_handles_unicode():
FILE: tests/factories.py
class ModelFactory (line 10) | class ModelFactory:
method __init__ (line 11) | def __init__(self, model, **kwargs):
method _get_kwargs (line 15) | def _get_kwargs(self, override_kwargs):
method create (line 25) | def create(self, **override_kwargs):
class Sequence (line 33) | class Sequence:
method __init__ (line 34) | def __init__(self, string):
method __call__ (line 38) | def __call__(self):
class Factory (line 175) | class Factory:
method __init__ (line 176) | def __init__(self):
method user (line 182) | def user(self):
method data_source (line 191) | def data_source(self):
method create_org (line 198) | def create_org(self, **kwargs):
method create_user (line 210) | def create_user(self, **kwargs):
method create_admin (line 219) | def create_admin(self, **kwargs):
method create_group (line 234) | def create_group(self, **kwargs):
method create_alert (line 242) | def create_alert(self, **kwargs):
method create_alert_subscription (line 248) | def create_alert_subscription(self, **kwargs):
method create_data_source (line 254) | def create_data_source(self, **kwargs):
method create_dashboard (line 272) | def create_dashboard(self, **kwargs):
method create_query (line 277) | def create_query(self, **kwargs):
method create_query_with_params (line 282) | def create_query_with_params(self, **kwargs):
method create_access_permission (line 287) | def create_access_permission(self, **kwargs):
method create_query_result (line 292) | def create_query_result(self, **kwargs):
method create_visualization (line 302) | def create_visualization(self, **kwargs):
method create_visualization_with_params (line 307) | def create_visualization_with_params(self, **kwargs):
method create_widget (line 312) | def create_widget(self, **kwargs):
method create_api_key (line 320) | def create_api_key(self, **kwargs):
method create_destination (line 325) | def create_destination(self, **kwargs):
method create_query_snippet (line 330) | def create_query_snippet(self, **kwargs):
FILE: tests/handlers/test_alerts.py
class TestAlertResourceGet (line 10) | class TestAlertResourceGet(BaseTestCase):
method test_returns_200_if_allowed (line 11) | def test_returns_200_if_allowed(self):
method test_returns_403_if_not_allowed (line 17) | def test_returns_403_if_not_allowed(self):
method test_returns_404_if_admin_from_another_org (line 25) | def test_returns_404_if_admin_from_another_org(self):
class TestAlertResourcePost (line 40) | class TestAlertResourcePost(BaseTestCase):
method test_updates_alert (line 41) | def test_updates_alert(self):
class TestAlertEvaluateResource (line 47) | class TestAlertEvaluateResource(BaseTestCase):
method test_evaluates_alert_and_notifies (line 49) | def test_evaluates_alert_and_notifies(self, mock_notify_subscriptions):
class TestAlertResourceDelete (line 67) | class TestAlertResourceDelete(BaseTestCase):
method test_removes_alert_and_subscriptions (line 68) | def test_removes_alert_and_subscriptions(self):
method test_returns_403_if_not_allowed (line 78) | def test_returns_403_if_not_allowed(self):
method test_returns_404_for_unauthorized_users (line 92) | def test_returns_404_for_unauthorized_users(self):
class TestAlertListGet (line 101) | class TestAlertListGet(BaseTestCase):
method test_returns_all_alerts (line 102) | def test_returns_all_alerts(self):
method test_returns_alerts_only_from_users_groups (line 111) | def test_returns_alerts_only_from_users_groups(self):
class TestAlertListPost (line 126) | class TestAlertListPost(BaseTestCase):
method test_returns_200_if_has_access_to_query (line 127) | def test_returns_200_if_has_access_to_query(self):
method test_fails_if_doesnt_have_access_to_query (line 145) | def test_fails_if_doesnt_have_access_to_query(self):
class TestAlertSubscriptionListResourcePost (line 163) | class TestAlertSubscriptionListResourcePost(BaseTestCase):
method test_subscribers_user_to_alert (line 164) | def test_subscribers_user_to_alert(self):
method test_doesnt_subscribers_user_to_alert_without_access (line 176) | def test_doesnt_subscribers_user_to_alert_without_access(self):
class TestAlertSubscriptionListResourceGet (line 191) | class TestAlertSubscriptionListResourceGet(BaseTestCase):
method test_returns_subscribers (line 192) | def test_returns_subscribers(self):
method test_doesnt_return_subscribers_when_not_allowed (line 198) | def test_doesnt_return_subscribers_when_not_allowed(self):
class TestAlertSubscriptionresourceDelete (line 207) | class TestAlertSubscriptionresourceDelete(BaseTestCase):
method test_only_subscriber_or_admin_can_unsubscribe (line 208) | def test_only_subscriber_or_admin_can_unsubscribe(self):
FILE: tests/handlers/test_authentication.py
class TestResetPassword (line 11) | class TestResetPassword(BaseTestCase):
method test_shows_reset_password_form (line 12) | def test_shows_reset_password_form(self):
class TestInvite (line 19) | class TestInvite(BaseTestCase):
method test_expired_invite_token (line 20) | def test_expired_invite_token(self):
method test_invalid_invite_token (line 28) | def test_invalid_invite_token(self):
method test_valid_token (line 32) | def test_valid_token(self):
method test_already_active_user (line 38) | def test_already_active_user(self):
class TestInvitePost (line 49) | class TestInvitePost(BaseTestCase):
method test_empty_password (line 50) | def test_empty_password(self):
method test_invalid_password (line 55) | def test_invalid_password(self):
method test_bad_token (line 60) | def test_bad_token(self):
method test_user_invited_before_invitation_pending_check (line 68) | def test_user_invited_before_invitation_pending_check(self):
method test_already_active_user (line 78) | def test_already_active_user(self):
method test_valid_password (line 92) | def test_valid_password(self):
class TestLogin (line 107) | class TestLogin(BaseTestCase):
method test_throttle_login (line 108) | def test_throttle_login(self):
method test_throttle_password_reset (line 118) | def test_throttle_password_reset(self):
class TestSession (line 129) | class TestSession(BaseTestCase):
method test_get (line 131) | def test_get(self):
FILE: tests/handlers/test_dashboards.py
class TestDashboardListResource (line 8) | class TestDashboardListResource(BaseTestCase):
method test_create_new_dashboard (line 9) | def test_create_new_dashboard(self):
class TestDashboardListGetResource (line 18) | class TestDashboardListGetResource(BaseTestCase):
method test_returns_dashboards (line 19) | def test_returns_dashboards(self):
method test_filters_with_tags (line 29) | def test_filters_with_tags(self):
method test_search_term (line 38) | def test_search_term(self):
class TestDashboardResourceGet (line 48) | class TestDashboardResourceGet(BaseTestCase):
method test_get_dashboard (line 49) | def test_get_dashboard(self):
method test_get_dashboard_with_slug (line 59) | def test_get_dashboard_with_slug(self):
method test_get_dashboard_filters_unauthorized_widgets (line 69) | def test_get_dashboard_filters_unauthorized_widgets(self):
method test_get_non_existing_dashboard (line 85) | def test_get_non_existing_dashboard(self):
class TestDashboardResourcePost (line 90) | class TestDashboardResourcePost(BaseTestCase):
method test_update_dashboard (line 91) | def test_update_dashboard(self):
method test_raises_error_in_case_of_conflict (line 102) | def test_raises_error_in_case_of_conflict(self):
method test_overrides_existing_if_no_version_specified (line 115) | def test_overrides_existing_if_no_version_specified(self):
method test_works_for_non_owner_with_permission (line 128) | def test_works_for_non_owner_with_permission(self):
class TestDashboardForkResourcePost (line 154) | class TestDashboardForkResourcePost(BaseTestCase):
method test_forks_a_dashboard (line 155) | def test_forks_a_dashboard(self):
class TestDashboardResourceDelete (line 163) | class TestDashboardResourceDelete(BaseTestCase):
method test_delete_dashboard (line 164) | def test_delete_dashboard(self):
class TestDashboardShareResourcePost (line 174) | class TestDashboardShareResourcePost(BaseTestCase):
method test_creates_api_key (line 175) | def test_creates_api_key(self):
method test_requires_admin_or_owner (line 182) | def test_requires_admin_or_owner(self):
class TestDashboardShareResourceDelete (line 195) | class TestDashboardShareResourceDelete(BaseTestCase):
method test_disables_api_key (line 196) | def test_disables_api_key(self):
method test_ignores_when_no_api_key_exists (line 204) | def test_ignores_when_no_api_key_exists(self):
method test_requires_admin_or_owner (line 210) | def test_requires_admin_or_owner(self):
FILE: tests/handlers/test_data_sources.py
class TestDataSourceGetSchema (line 7) | class TestDataSourceGetSchema(BaseTestCase):
method test_fails_if_user_doesnt_belong_to_org (line 8) | def test_fails_if_user_doesnt_belong_to_org(self):
class TestDataSourceListGet (line 26) | class TestDataSourceListGet(BaseTestCase):
method test_returns_each_data_source_once (line 27) | def test_returns_each_data_source_once(self):
method test_returns_data_sources_ordered_by_id (line 36) | def test_returns_data_sources_ordered_by_id(self):
class DataSourceTypesTest (line 44) | class DataSourceTypesTest(BaseTestCase):
method test_returns_data_for_admin (line 45) | def test_returns_data_for_admin(self):
method test_returns_403_for_non_admin (line 50) | def test_returns_403_for_non_admin(self):
class TestDataSourceResourceGet (line 55) | class TestDataSourceResourceGet(BaseTestCase):
method setUp (line 56) | def setUp(self):
method test_returns_all_data_for_admins (line 60) | def test_returns_all_data_for_admins(self):
method test_returns_only_view_only_for_users_without_list_permissions (line 67) | def test_returns_only_view_only_for_users_without_list_permissions(self):
method test_returns_limited_data_for_non_admin_in_the_default_group (line 76) | def test_returns_limited_data_for_non_admin_in_the_default_group(self):
method test_returns_403_for_non_admin_in_group_without_permission (line 85) | def test_returns_403_for_non_admin_in_group_without_permission(self):
class TestDataSourceResourcePost (line 92) | class TestDataSourceResourcePost(BaseTestCase):
method setUp (line 93) | def setUp(self):
method test_returns_400_when_configuration_invalid (line 97) | def test_returns_400_when_configuration_invalid(self):
method test_updates_data_source (line 108) | def test_updates_data_source(self):
class TestDataSourceResourceDelete (line 126) | class TestDataSourceResourceDelete(BaseTestCase):
method test_deletes_the_data_source (line 127) | def test_deletes_the_data_source(self):
class TestDataSourceListResourcePost (line 137) | class TestDataSourceListResourcePost(BaseTestCase):
method test_returns_400_when_missing_fields (line 138) | def test_returns_400_when_missing_fields(self):
method test_returns_400_when_configuration_invalid (line 147) | def test_returns_400_when_configuration_invalid(self):
method test_creates_data_source (line 158) | def test_creates_data_source(self):
class TestDataSourcePausePost (line 172) | class TestDataSourcePausePost(BaseTestCase):
method test_pauses_data_source (line 173) | def test_pauses_data_source(self):
method test_pause_sets_reason (line 183) | def test_pause_sets_reason(self):
method test_requires_admin (line 202) | def test_requires_admin(self):
class TestDataSourcePauseDelete (line 207) | class TestDataSourcePauseDelete(BaseTestCase):
method test_resumes_data_source (line 208) | def test_resumes_data_source(self):
method test_requires_admin (line 219) | def test_requires_admin(self):
FILE: tests/handlers/test_destinations.py
class TestDestinationListResource (line 14) | class TestDestinationListResource(BaseTestCase):
method test_get_returns_all_destinations (line 15) | def test_get_returns_all_destinations(self):
method test_get_returns_only_destinations_of_current_org (line 22) | def test_get_returns_only_destinations_of_current_org(self):
method test_post_creates_new_destination (line 30) | def test_post_creates_new_destination(self):
method test_post_requires_admin (line 40) | def test_post_requires_admin(self):
method test_returns_400_when_name_already_exists (line 49) | def test_returns_400_when_name_already_exists(self):
class TestDestinationResource (line 61) | class TestDestinationResource(BaseTestCase):
method test_get (line 62) | def test_get(self):
method test_delete (line 67) | def test_delete(self):
method test_post (line 77) | def test_post(self):
function test_discord_notify_calls_requests_post (line 100) | def test_discord_notify_calls_requests_post():
function test_asana_notify_calls_requests_post (line 152) | def test_asana_notify_calls_requests_post():
function test_slack_notify_calls_requests_post (line 205) | def test_slack_notify_calls_requests_post():
function test_webex_notify_calls_requests_post (line 258) | def test_webex_notify_calls_requests_post():
function test_webex_notify_handles_blank_entries (line 326) | def test_webex_notify_handles_blank_entries():
function test_webex_notify_handles_2d_array (line 357) | def test_webex_notify_handles_2d_array():
function test_webex_notify_handles_1d_array (line 410) | def test_webex_notify_handles_1d_array():
function test_datadog_notify_calls_requests_post (line 463) | def test_datadog_notify_calls_requests_post():
FILE: tests/handlers/test_embed.py
class TestUnembedables (line 5) | class TestUnembedables(BaseTestCase):
method test_not_embedable (line 6) | def test_not_embedable(self):
class TestEmbedVisualization (line 14) | class TestEmbedVisualization(BaseTestCase):
method test_sucesss (line 15) | def test_sucesss(self):
class TestPublicDashboard (line 31) | class TestPublicDashboard(BaseTestCase):
method test_success (line 32) | def test_success(self):
method test_works_for_logged_in_user (line 46) | def test_works_for_logged_in_user(self):
method test_bad_token (line 53) | def test_bad_token(self):
method test_inactive_token (line 57) | def test_inactive_token(self):
class TestAPIPublicDashboard (line 74) | class TestAPIPublicDashboard(BaseTestCase):
method test_success (line 75) | def test_success(self):
method test_works_for_logged_in_user (line 89) | def test_works_for_logged_in_user(self):
method test_bad_token (line 96) | def test_bad_token(self):
method test_inactive_token (line 100) | def test_inactive_token(self):
FILE: tests/handlers/test_favorites.py
class TestQueryFavoriteResource (line 4) | class TestQueryFavoriteResource(BaseTestCase):
method test_favorite (line 5) | def test_favorite(self):
method test_duplicate_favorite (line 14) | def test_duplicate_favorite(self):
method test_unfavorite (line 23) | def test_unfavorite(self):
class TestQueryFavoriteListResource (line 33) | class TestQueryFavoriteListResource(BaseTestCase):
method test_get_favorites (line 34) | def test_get_favorites(self):
FILE: tests/handlers/test_groups.py
class TestGroupDataSourceListResource (line 7) | class TestGroupDataSourceListResource(BaseTestCase):
method test_returns_only_groups_for_current_org (line 8) | def test_returns_only_groups_for_current_org(self):
method test_list (line 19) | def test_list(self):
class TestGroupResourceList (line 33) | class TestGroupResourceList(BaseTestCase):
method test_list_admin (line 34) | def test_list_admin(self):
method test_list (line 47) | def test_list(self):
class TestGroupResourcePost (line 64) | class TestGroupResourcePost(BaseTestCase):
method test_doesnt_change_builtin_groups (line 65) | def test_doesnt_change_builtin_groups(self):
class TestGroupResourceDelete (line 79) | class TestGroupResourceDelete(BaseTestCase):
method test_allowed_only_to_admin (line 80) | def test_allowed_only_to_admin(self):
method test_cant_delete_builtin_group (line 94) | def test_cant_delete_builtin_group(self):
method test_can_delete_group_with_data_sources (line 103) | def test_can_delete_group_with_data_sources(self):
class TestGroupResourceGet (line 118) | class TestGroupResourceGet(BaseTestCase):
method test_returns_group (line 119) | def test_returns_group(self):
method test_doesnt_return_if_user_not_member_or_admin (line 123) | def test_doesnt_return_if_user_not_member_or_admin(self):
FILE: tests/handlers/test_order_results.py
class TestOrderResults (line 7) | class TestOrderResults(BaseTestCase):
method setUp (line 8) | def setUp(self):
method test_no_order_no_fallback (line 39) | def test_no_order_no_fallback(self):
method test_no_order_yes_fallback (line 44) | def test_no_order_yes_fallback(self):
method test_invalid_order_no_fallback (line 50) | def test_invalid_order_no_fallback(self):
method test_invalid_order_yes_fallback (line 56) | def test_invalid_order_yes_fallback(self):
method test_valid_requested_order_no_fallback (line 62) | def test_valid_requested_order_no_fallback(self):
method test_valid_requested_order_yes_fallback (line 68) | def test_valid_requested_order_yes_fallback(self):
method test_requested_entity_no_fallback (line 74) | def test_requested_entity_no_fallback(self):
method test_requested_entity_yes_fallback (line 80) | def test_requested_entity_yes_fallback(self):
method test_order_by_attached (line 86) | def test_order_by_attached(self):
FILE: tests/handlers/test_paginate.py
class DummyResults (line 9) | class DummyResults:
class TestPaginate (line 16) | class TestPaginate(TestCase):
method setUp (line 17) | def setUp(self):
method test_returns_paginated_results (line 22) | def test_returns_paginated_results(self):
method test_raises_error_for_bad_page (line 29) | def test_raises_error_for_bad_page(self):
method test_raises_error_for_bad_page_size (line 33) | def test_raises_error_for_bad_page_size(self):
FILE: tests/handlers/test_permissions.py
class TestObjectPermissionsListGet (line 6) | class TestObjectPermissionsListGet(BaseTestCase):
method test_returns_empty_list_when_no_permissions (line 7) | def test_returns_empty_list_when_no_permissions(self):
method test_returns_permissions (line 15) | def test_returns_permissions(self):
method test_returns_404_for_outside_of_organization_users (line 32) | def test_returns_404_for_outside_of_organization_users(self):
class TestObjectPermissionsListPost (line 40) | class TestObjectPermissionsListPost(BaseTestCase):
method test_creates_permission_if_the_user_is_an_owner (line 41) | def test_creates_permission_if_the_user_is_an_owner(self):
method test_returns_403_if_the_user_isnt_owner (line 52) | def test_returns_403_if_the_user_isnt_owner(self):
method test_returns_400_if_the_grantee_isnt_from_organization (line 61) | def test_returns_400_if_the_grantee_isnt_from_organization(self):
method test_returns_404_if_the_user_from_different_org (line 70) | def test_returns_404_if_the_user_from_different_org(self):
method test_accepts_only_correct_access_types (line 79) | def test_accepts_only_correct_access_types(self):
class TestObjectPermissionsListDelete (line 90) | class TestObjectPermissionsListDelete(BaseTestCase):
method test_removes_permission (line 91) | def test_removes_permission(self):
method test_removes_permission_created_by_another_user (line 111) | def test_removes_permission_created_by_another_user(self):
method test_returns_404_for_outside_of_organization_users (line 135) | def test_returns_404_for_outside_of_organization_users(self):
method test_returns_403_for_non_owner (line 143) | def test_returns_403_for_non_owner(self):
method test_returns_200_even_if_there_is_no_permission (line 152) | def test_returns_200_even_if_there_is_no_permission(self):
class TestCheckPermissionsGet (line 163) | class TestCheckPermissionsGet(BaseTestCase):
method test_returns_true_for_existing_permission (line 164) | def test_returns_true_for_existing_permission(self):
method test_returns_false_for_existing_permission (line 184) | def test_returns_false_for_existing_permission(self):
method test_returns_404_for_outside_of_org_users (line 197) | def test_returns_404_for_outside_of_org_users(self):
FILE: tests/handlers/test_queries.py
class TestQueryResourceGet (line 8) | class TestQueryResourceGet(BaseTestCase):
method test_get_query (line 9) | def test_get_query(self):
method test_get_all_queries (line 20) | def test_get_all_queries(self):
method test_query_without_data_source_should_be_available_only_by_admin (line 27) | def test_query_without_data_source_should_be_available_only_by_admin(s...
method test_query_only_accessible_to_users_from_its_organization (line 38) | def test_query_only_accessible_to_users_from_its_organization(self):
method test_query_search (line 52) | def test_query_search(self):
class TestQueryResourcePost (line 77) | class TestQueryResourcePost(BaseTestCase):
method test_update_query (line 78) | def test_update_query(self):
method test_raises_error_in_case_of_conflict (line 100) | def test_raises_error_in_case_of_conflict(self):
method test_prevents_association_with_view_only_data_sources (line 113) | def test_prevents_association_with_view_only_data_sources(self):
method test_allows_association_with_authorized_dropdown_queries (line 129) | def test_allows_association_with_authorized_dropdown_queries(self):
method test_prevents_association_with_unauthorized_dropdown_queries (line 153) | def test_prevents_association_with_unauthorized_dropdown_queries(self):
method test_prevents_association_with_non_existing_dropdown_queries (line 172) | def test_prevents_association_with_non_existing_dropdown_queries(self):
method test_overrides_existing_if_no_version_specified (line 187) | def test_overrides_existing_if_no_version_specified(self):
method test_works_for_non_owner_with_permission (line 200) | def test_works_for_non_owner_with_permission(self):
class TestQueryListResourceGet (line 225) | class TestQueryListResourceGet(BaseTestCase):
method test_returns_queries (line 226) | def test_returns_queries(self):
method test_filters_with_tags (line 236) | def test_filters_with_tags(self):
method test_search_term (line 245) | def test_search_term(self):
class TestQueryListResourcePost (line 255) | class TestQueryListResourcePost(BaseTestCase):
method test_create_query (line 256) | def test_create_query(self):
method test_allows_association_with_authorized_dropdown_queries (line 276) | def test_allows_association_with_authorized_dropdown_queries(self):
method test_prevents_association_with_unauthorized_dropdown_queries (line 298) | def test_prevents_association_with_unauthorized_dropdown_queries(self):
method test_prevents_association_with_non_existing_dropdown_queries (line 316) | def test_prevents_association_with_non_existing_dropdown_queries(self):
class TestQueryArchiveResourceGet (line 329) | class TestQueryArchiveResourceGet(BaseTestCase):
method test_returns_queries (line 330) | def test_returns_queries(self):
method test_search_term (line 340) | def test_search_term(self):
class QueryRefreshTest (line 350) | class QueryRefreshTest(BaseTestCase):
method setUp (line 351) | def setUp(self):
method test_refresh_regular_query (line 357) | def test_refresh_regular_query(self):
method test_refresh_of_query_with_parameters (line 361) | def test_refresh_of_query_with_parameters(self):
method test_refresh_of_query_with_parameters_without_parameters (line 368) | def test_refresh_of_query_with_parameters_without_parameters(self):
method test_refresh_query_you_dont_have_access_to (line 375) | def test_refresh_query_you_dont_have_access_to(self):
method test_refresh_forbiden_with_query_api_key (line 383) | def test_refresh_forbiden_with_query_api_key(self):
class TestQueryRegenerateApiKey (line 395) | class TestQueryRegenerateApiKey(BaseTestCase):
method test_non_admin_cannot_regenerate_api_key_of_other_user (line 396) | def test_non_admin_cannot_regenerate_api_key_of_other_user(self):
method test_admin_can_regenerate_api_key_of_other_user (line 412) | def test_admin_can_regenerate_api_key_of_other_user(self):
method test_admin_can_regenerate_api_key_of_myself (line 428) | def test_admin_can_regenerate_api_key_of_myself(self):
method test_user_can_regenerate_api_key_of_myself (line 444) | def test_user_can_regenerate_api_key_of_myself(self):
class TestQueryForkResourcePost (line 456) | class TestQueryForkResourcePost(BaseTestCase):
method test_forks_a_query (line 457) | def test_forks_a_query(self):
method test_must_have_full_access_to_data_source (line 465) | def test_must_have_full_access_to_data_source(self):
class TestFormatSQLQueryAPI (line 474) | class TestFormatSQLQueryAPI(BaseTestCase):
method test_format_sql_query (line 475) | def test_format_sql_query(self):
FILE: tests/handlers/test_query_results.py
class TestRunQuery (line 6) | class TestRunQuery(BaseTestCase):
method test_run_query_with_no_data_source (line 7) | def test_run_query_with_no_data_source(self):
class TestQueryResultsCacheHeaders (line 13) | class TestQueryResultsCacheHeaders(BaseTestCase):
method test_uses_cache_headers_for_specific_result (line 14) | def test_uses_cache_headers_for_specific_result(self):
method test_doesnt_use_cache_headers_for_non_specific_result (line 21) | def test_doesnt_use_cache_headers_for_non_specific_result(self):
method test_returns_404_if_no_cached_result_found (line 28) | def test_returns_404_if_no_cached_result_found(self):
class TestQueryResultsContentDispositionHeaders (line 35) | class TestQueryResultsContentDispositionHeaders(BaseTestCase):
method test_supports_unicode (line 36) | def test_supports_unicode(self):
class TestQueryResultListAPI (line 48) | class TestQueryResultListAPI(BaseTestCase):
method test_get_existing_result (line 49) | def test_get_existing_result(self):
method test_execute_new_query (line 64) | def test_execute_new_query(self):
method test_add_limit_change_query_sql (line 82) | def test_add_limit_change_query_sql(self):
method test_add_limit_no_change_for_nonsql (line 97) | def test_add_limit_no_change_for_nonsql(self):
method test_execute_query_without_access (line 111) | def test_execute_query_without_access(self):
method test_execute_query_with_params (line 131) | def test_execute_query_with_params(self):
method test_execute_on_paused_data_source (line 174) | def test_execute_on_paused_data_source(self):
method test_execute_without_data_source (line 191) | def test_execute_without_data_source(self):
class TestQueryResultAPI (line 198) | class TestQueryResultAPI(BaseTestCase):
method test_has_no_access_to_data_source (line 199) | def test_has_no_access_to_data_source(self):
method test_has_view_only_access_to_data_source (line 206) | def test_has_view_only_access_to_data_source(self):
method test_has_full_access_to_data_source (line 213) | def test_has_full_access_to_data_source(self):
method test_execute_new_query (line 220) | def test_execute_new_query(self):
method test_execute_but_has_no_access_to_data_source (line 228) | def test_execute_but_has_no_access_to_data_source(self):
method test_execute_with_no_parameter_values (line 236) | def test_execute_with_no_parameter_values(self):
method test_prevents_execution_of_unsafe_queries_on_view_only_data_sources (line 244) | def test_prevents_execution_of_unsafe_queries_on_view_only_data_source...
method test_allows_execution_of_safe_queries_on_view_only_data_sources (line 252) | def test_allows_execution_of_safe_queries_on_view_only_data_sources(se...
method test_get_latest_query_result_with_apply_auto_limit (line 259) | def test_get_latest_query_result_with_apply_auto_limit(self):
method test_prevents_execution_of_unsafe_queries_using_api_key (line 272) | def test_prevents_execution_of_unsafe_queries_using_api_key(self):
method test_access_with_query_api_key (line 285) | def test_access_with_query_api_key(self):
method test_access_with_query_api_key_without_query_result_id (line 297) | def test_access_with_query_api_key_without_query_result_id(self):
method test_query_api_key_and_different_query_result (line 312) | def test_query_api_key_and_different_query_result(self):
method test_signed_in_user_and_different_query_result (line 324) | def test_signed_in_user_and_different_query_result(self):
class TestQueryResultDropdownResource (line 333) | class TestQueryResultDropdownResource(BaseTestCase):
method test_checks_for_access_to_the_query (line 334) | def test_checks_for_access_to_the_query(self):
class TestQueryDropdownsResource (line 343) | class TestQueryDropdownsResource(BaseTestCase):
method test_prevents_access_if_unassociated_and_doesnt_have_access (line 344) | def test_prevents_access_if_unassociated_and_doesnt_have_access(self):
method test_allows_access_if_unassociated_but_user_has_access (line 359) | def test_allows_access_if_unassociated_but_user_has_access(self):
method test_allows_access_if_associated_and_has_access_to_parent (line 377) | def test_allows_access_if_associated_and_has_access_to_parent(self):
method test_prevents_access_if_associated_and_doesnt_have_access_to_parent (line 393) | def test_prevents_access_if_associated_and_doesnt_have_access_to_paren...
class TestQueryResultExcelResponse (line 407) | class TestQueryResultExcelResponse(BaseTestCase):
method test_renders_excel_file (line 408) | def test_renders_excel_file(self):
method test_renders_excel_file_when_rows_have_missing_columns (line 419) | def test_renders_excel_file_when_rows_have_missing_columns(self):
class TestJobResource (line 435) | class TestJobResource(BaseTestCase):
method test_cancels_queued_queries (line 436) | def test_cancels_queued_queries(self):
FILE: tests/handlers/test_query_snippets.py
class TestQuerySnippetResource (line 5) | class TestQuerySnippetResource(BaseTestCase):
method test_get_snippet (line 6) | def test_get_snippet(self):
method test_update_snippet (line 14) | def test_update_snippet(self):
method test_delete_snippet (line 28) | def test_delete_snippet(self):
class TestQuerySnippetListResource (line 35) | class TestQuerySnippetListResource(BaseTestCase):
method test_create_snippet (line 36) | def test_create_snippet(self):
method test_list_all_snippets (line 46) | def test_list_all_snippets(self):
FILE: tests/handlers/test_settings.py
class TestOrganizationSettings (line 5) | class TestOrganizationSettings(BaseTestCase):
method test_post (line 6) | def test_post(self):
method test_updates_google_apps_domains (line 27) | def test_updates_google_apps_domains(self):
method test_get_returns_google_appas_domains (line 39) | def test_get_returns_google_appas_domains(self):
FILE: tests/handlers/test_users.py
class TestUserListResourcePost (line 7) | class TestUserListResourcePost(BaseTestCase):
method test_returns_403_for_non_admin (line 8) | def test_returns_403_for_non_admin(self):
method test_returns_400_when_missing_fields (line 12) | def test_returns_400_when_missing_fields(self):
method test_returns_400_when_using_temporary_email (line 29) | def test_returns_400_when_using_temporary_email(self):
method test_creates_user (line 40) | def test_creates_user(self):
method test_shows_invite_link_when_email_is_not_configured (line 51) | def test_shows_invite_link_when_email_is_not_configured(self, _):
method test_does_not_show_invite_link_when_email_is_configured (line 61) | def test_does_not_show_invite_link_when_email_is_configured(self, _):
method test_creates_user_case_insensitive_email (line 70) | def test_creates_user_case_insensitive_email(self):
method test_returns_400_when_email_taken (line 80) | def test_returns_400_when_email_taken(self):
method test_returns_400_when_email_taken_case_insensitive (line 88) | def test_returns_400_when_email_taken_case_insensitive(self):
class TestUserListGet (line 103) | class TestUserListGet(BaseTestCase):
method create_filters_fixtures (line 104) | def create_filters_fixtures(self):
method make_request_and_return_ids (line 120) | def make_request_and_return_ids(self, *args, **kwargs):
method assertUsersListMatches (line 124) | def assertUsersListMatches(self, actual_ids, expected_ids, unexpected_...
method test_returns_users_for_given_org_only (line 131) | def test_returns_users_for_given_org_only(self):
method test_gets_all_enabled (line 140) | def test_gets_all_enabled(self):
method test_gets_all_disabled (line 149) | def test_gets_all_disabled(self):
method test_gets_all_enabled_and_active (line 158) | def test_gets_all_enabled_and_active(self):
method test_gets_all_enabled_and_pending (line 172) | def test_gets_all_enabled_and_pending(self):
method test_gets_all_disabled_and_active (line 187) | def test_gets_all_disabled_and_active(self):
method test_gets_all_disabled_and_pending (line 201) | def test_gets_all_disabled_and_pending(self):
class TestUserResourceGet (line 217) | class TestUserResourceGet(BaseTestCase):
method test_returns_api_key_for_your_own_user (line 218) | def test_returns_api_key_for_your_own_user(self):
method test_returns_api_key_for_other_user_when_admin (line 222) | def test_returns_api_key_for_other_user_when_admin(self):
method test_doesnt_return_api_key_for_other_user (line 229) | def test_doesnt_return_api_key_for_other_user(self):
method test_doesnt_return_user_from_different_org (line 235) | def test_doesnt_return_user_from_different_org(self):
class TestUserResourcePost (line 243) | class TestUserResourcePost(BaseTestCase):
method test_returns_403_for_non_admin_changing_not_his_own (line 244) | def test_returns_403_for_non_admin_changing_not_his_own(self):
method test_returns_200_for_non_admin_changing_his_own (line 250) | def test_returns_200_for_non_admin_changing_his_own(self):
method test_marks_email_as_not_verified_when_changed (line 259) | def test_marks_email_as_not_verified_when_changed(self, _):
method test_doesnt_mark_email_as_not_verified_when_changed_and_email_server_is_not_configured (line 266) | def test_doesnt_mark_email_as_not_verified_when_changed_and_email_serv...
method test_returns_200_for_admin_changing_other_user (line 272) | def test_returns_200_for_admin_changing_other_user(self):
method test_fails_password_change_without_old_password (line 283) | def test_fails_password_change_without_old_password(self):
method test_fails_password_change_with_incorrect_old_password (line 291) | def test_fails_password_change_with_incorrect_old_password(self):
method test_changes_password (line 299) | def test_changes_password(self):
method test_returns_400_when_using_temporary_email (line 316) | def test_returns_400_when_using_temporary_email(self):
method test_changing_email_ends_any_other_sessions_of_current_user (line 332) | def test_changing_email_ends_any_other_sessions_of_current_user(self):
method test_changing_email_does_not_end_current_session (line 354) | def test_changing_email_does_not_end_current_session(self):
method test_admin_can_change_user_groups (line 374) | def test_admin_can_change_user_groups(self):
method test_admin_can_delete_user (line 388) | def test_admin_can_delete_user(self):
class TestUserDisable (line 398) | class TestUserDisable(BaseTestCase):
method test_non_admin_cannot_disable_user (line 399) | def test_non_admin_cannot_disable_user(self):
method test_admin_can_disable_user (line 410) | def test_admin_can_disable_user(self):
method test_admin_can_disable_another_admin (line 422) | def test_admin_can_disable_another_admin(self):
method test_admin_cannot_disable_self (line 434) | def test_admin_cannot_disable_self(self):
method test_admin_can_enable_user (line 445) | def test_admin_can_enable_user(self):
method test_admin_can_enable_another_admin (line 457) | def test_admin_can_enable_another_admin(self):
method test_disabled_user_cannot_login (line 469) | def test_disabled_user_cannot_login(self):
method test_disabled_user_should_not_access_api (line 488) | def test_disabled_user_should_not_access_api(self):
method test_disabled_user_should_not_receive_restore_password_email (line 504) | def test_disabled_user_should_not_receive_restore_password_email(self):
class TestUserRegenerateApiKey (line 527) | class TestUserRegenerateApiKey(BaseTestCase):
method test_non_admin_cannot_regenerate_other_user_api_key (line 528) | def test_non_admin_cannot_regenerate_other_user_api_key(self):
method test_admin_can_regenerate_other_user_api_key (line 543) | def test_admin_can_regenerate_other_user_api_key(self):
method test_admin_can_regenerate_api_key_myself (line 554) | def test_admin_can_regenerate_api_key_myself(self):
method test_user_can_regenerate_api_key_myself (line 568) | def test_user_can_regenerate_api_key_myself(self):
FILE: tests/handlers/test_visualizations.py
class VisualizationResourceTest (line 5) | class VisualizationResourceTest(BaseTestCase):
method test_create_visualization (line 6) | def test_create_visualization(self):
method test_delete_visualization (line 23) | def test_delete_visualization(self):
method test_update_visualization (line 31) | def test_update_visualization(self):
method test_only_owner_collaborator_or_admin_can_create_visualization (line 43) | def test_only_owner_collaborator_or_admin_can_create_visualization(self):
method test_only_owner_collaborator_or_admin_can_edit_visualization (line 77) | def test_only_owner_collaborator_or_admin_can_edit_visualization(self):
method test_only_owner_collaborator_or_admin_can_delete_visualization (line 108) | def test_only_owner_collaborator_or_admin_can_delete_visualization(self):
method test_deleting_a_visualization_deletes_dashboard_widgets (line 147) | def test_deleting_a_visualization_deletes_dashboard_widgets(self):
FILE: tests/handlers/test_widgets.py
class WidgetAPITest (line 5) | class WidgetAPITest(BaseTestCase):
method create_widget (line 6) | def create_widget(self, dashboard, visualization, width=1):
method test_create_widget (line 18) | def test_create_widget(self):
method test_wont_create_widget_for_visualization_you_dont_have_access_to (line 25) | def test_wont_create_widget_for_visualization_you_dont_have_access_to(...
method test_create_text_widget (line 43) | def test_create_text_widget(self):
method test_delete_widget (line 59) | def test_delete_widget(self):
FILE: tests/metrics/test_database.py
class TestDatabaseMetrics (line 7) | class TestDatabaseMetrics(BaseTestCase):
method test_db_request_records_statsd_metrics (line 8) | def test_db_request_records_statsd_metrics(self, timing):
FILE: tests/metrics/test_request.py
class TestRequestMetrics (line 7) | class TestRequestMetrics(BaseTestCase):
method test_flask_request_records_statsd_metrics (line 8) | def test_flask_request_records_statsd_metrics(self, timing):
FILE: tests/models/test_alerts.py
class TestAlertAll (line 9) | class TestAlertAll(BaseTestCase):
method test_returns_all_alerts_for_given_groups (line 10) | def test_returns_all_alerts_for_given_groups(self):
method test_return_each_alert_only_once (line 34) | def test_return_each_alert_only_once(self):
function get_results (line 45) | def get_results(value):
class TestAlertEvaluate (line 49) | class TestAlertEvaluate(BaseTestCase):
method create_alert (line 50) | def create_alert(self, results, column="foo", value="1"):
method test_evaluate_triggers_alert_when_equal (line 58) | def test_evaluate_triggers_alert_when_equal(self):
method test_evaluate_number_value_and_string_threshold (line 62) | def test_evaluate_number_value_and_string_threshold(self):
method test_evaluate_return_unknown_when_missing_column (line 66) | def test_evaluate_return_unknown_when_missing_column(self):
method test_evaluate_return_unknown_when_empty_results (line 70) | def test_evaluate_return_unknown_when_empty_results(self):
method test_evaluates_correctly_with_first_selector (line 75) | def test_evaluates_correctly_with_first_selector(self):
method test_evaluates_correctly_with_min_selector (line 89) | def test_evaluates_correctly_with_min_selector(self):
method test_evaluates_correctly_with_max_selector (line 102) | def test_evaluates_correctly_with_max_selector(self):
method test_evaluate_alerts_without_query_rel (line 115) | def test_evaluate_alerts_without_query_rel(self):
method test_evaluate_return_unknown_when_value_is_none (line 122) | def test_evaluate_return_unknown_when_value_is_none(self):
class TestNextState (line 127) | class TestNextState(TestCase):
method test_numeric_value (line 128) | def test_numeric_value(self):
method test_numeric_value_and_plain_string (line 133) | def test_numeric_value_and_plain_string(self):
method test_non_numeric_value (line 136) | def test_non_numeric_value(self):
method test_string_value (line 139) | def test_string_value(self):
method test_boolean_value (line 142) | def test_boolean_value(self):
class TestAlertRenderTemplate (line 147) | class TestAlertRenderTemplate(BaseTestCase):
method create_alert (line 148) | def create_alert(self, results, column="foo", value="5"):
method test_render_custom_alert_template (line 156) | def test_render_custom_alert_template(self):
method test_render_custom_alert_template_query_table (line 197) | def test_render_custom_alert_template_query_table(self):
FILE: tests/models/test_api_keys.py
class TestApiKeyGetByObject (line 5) | class TestApiKeyGetByObject(BaseTestCase):
method test_returns_none_if_not_exists (line 6) | def test_returns_none_if_not_exists(self):
method test_returns_only_active_key (line 10) | def test_returns_only_active_key(self):
FILE: tests/models/test_changes.py
function create_object (line 5) | def create_object(factory):
class TestChangesProperty (line 18) | class TestChangesProperty(BaseTestCase):
method test_returns_initial_state (line 19) | def test_returns_initial_state(self):
class TestLogChange (line 26) | class TestLogChange(BaseTestCase):
method obj (line 27) | def obj(self):
method test_properly_logs_first_creation (line 39) | def test_properly_logs_first_creation(self):
method test_skips_unnecessary_fields (line 47) | def test_skips_unnecessary_fields(self):
method test_properly_log_modification (line 57) | def test_properly_log_modification(self):
method test_logs_create_method (line 74) | def test_logs_create_method(self):
FILE: tests/models/test_dashboards.py
class DashboardTest (line 5) | class DashboardTest(BaseTestCase):
method create_tagged_dashboard (line 6) | def create_tagged_dashboard(self, tags):
method test_all_tags (line 22) | def test_all_tags(self):
class TestDashboardsByUser (line 33) | class TestDashboardsByUser(BaseTestCase):
method test_returns_only_users_dashboards (line 34) | def test_returns_only_users_dashboards(self):
method test_returns_drafts_by_the_user (line 44) | def test_returns_drafts_by_the_user(self):
method test_returns_correct_number_of_dashboards (line 54) | def test_returns_correct_number_of_dashboards(self):
FILE: tests/models/test_data_sources.py
class DataSourceTest (line 9) | class DataSourceTest(BaseTestCase):
method test_get_schema (line 10) | def test_get_schema(self):
method test_get_schema_uses_cache (line 20) | def test_get_schema_uses_cache(self):
method test_get_schema_skips_cache_with_refresh_true (line 31) | def test_get_schema_skips_cache_with_refresh_true(self):
method test_schema_sorter (line 44) | def test_schema_sorter(self):
method test_model_uses_schema_sorter (line 65) | def test_model_uses_schema_sorter(self):
method test_expires_schema (line 90) | def test_expires_schema(self, mock_redis):
class TestDataSourceCreate (line 101) | class TestDataSourceCreate(BaseTestCase):
method test_adds_data_source_to_default_group (line 102) | def test_adds_data_source_to_default_group(self):
class TestDataSourceIsPaused (line 112) | class TestDataSourceIsPaused(BaseTestCase):
method test_returns_false_by_default (line 113) | def test_returns_false_by_default(self):
method test_persists_selection (line 116) | def test_persists_selection(self):
method test_allows_setting_reason (line 123) | def test_allows_setting_reason(self):
method test_resume_clears_reason (line 129) | def test_resume_clears_reason(self):
method test_reason_is_none_by_default (line 134) | def test_reason_is_none_by_default(self):
class TestDataSourceDelete (line 138) | class TestDataSourceDelete(BaseTestCase):
method test_deletes_the_data_source (line 139) | def test_deletes_the_data_source(self):
method test_sets_queries_data_source_to_null (line 145) | def test_sets_queries_data_source_to_null(self):
method test_deletes_child_models (line 153) | def test_deletes_child_models(self):
method test_deletes_schema (line 166) | def test_deletes_schema(self, mock_redis):
FILE: tests/models/test_parameterized_query.py
class TestParameterizedQuery (line 15) | class TestParameterizedQuery(TestCase):
method test_returns_empty_list_for_regular_query (line 16) | def test_returns_empty_list_for_regular_query(self):
method test_finds_all_params_when_missing (line 20) | def test_finds_all_params_when_missing(self):
method test_finds_all_params (line 24) | def test_finds_all_params(self):
method test_deduplicates_params (line 28) | def test_deduplicates_params(self):
method test_handles_nested_params (line 34) | def test_handles_nested_params(self):
method test_handles_objects (line 40) | def test_handles_objects(self):
method test_raises_on_parameters_not_in_schema (line 46) | def test_raises_on_parameters_not_in_schema(self):
method test_raises_on_invalid_text_parameters (line 53) | def test_raises_on_invalid_text_parameters(self):
method test_raises_on_unexpected_validation_error (line 61) | def test_raises_on_unexpected_validation_error(self, _):
method test_validates_text_parameters (line 68) | def test_validates_text_parameters(self):
method test_validates_text_pattern_parameters (line 76) | def test_validates_text_pattern_parameters(self):
method test_raises_on_invalid_text_pattern_parameters (line 84) | def test_raises_on_invalid_text_pattern_parameters(self):
method test_raises_on_invalid_number_parameters (line 91) | def test_raises_on_invalid_number_parameters(self):
method test_validates_number_parameters (line 98) | def test_validates_number_parameters(self):
method test_coerces_number_parameters (line 106) | def test_coerces_number_parameters(self):
method test_raises_on_invalid_date_parameters (line 114) | def test_raises_on_invalid_date_parameters(self):
method test_raises_on_none_for_date_parameters (line 121) | def test_raises_on_none_for_date_parameters(self):
method test_validates_date_parameters (line 128) | def test_validates_date_parameters(self):
method test_raises_on_invalid_enum_parameters (line 136) | def test_raises_on_invalid_enum_parameters(self):
method test_raises_on_unlisted_enum_value_parameters (line 143) | def test_raises_on_unlisted_enum_value_parameters(self):
method test_raises_on_unlisted_enum_list_value_parameters (line 150) | def test_raises_on_unlisted_enum_list_value_parameters(self):
method test_validates_enum_parameters (line 164) | def test_validates_enum_parameters(self):
method test_validates_enum_list_value_parameters (line 172) | def test_validates_enum_list_value_parameters(self):
method test_validation_accepts_integer_values_for_dropdowns (line 191) | def test_validation_accepts_integer_values_for_dropdowns(self, _):
method test_raises_on_invalid_query_parameters (line 200) | def test_raises_on_invalid_query_parameters(self, _):
method test_raises_on_unlisted_query_value_parameters (line 211) | def test_raises_on_unlisted_query_value_parameters(self, _):
method test_validates_query_parameters (line 222) | def test_validates_query_parameters(self, _):
method test_raises_on_invalid_date_range_parameters (line 230) | def test_raises_on_invalid_date_range_parameters(self):
method test_validates_date_range_parameters (line 237) | def test_validates_date_range_parameters(self):
method test_raises_on_unexpected_param_types (line 245) | def test_raises_on_unexpected_param_types(self):
method test_is_not_safe_if_expecting_text_parameter (line 252) | def test_is_not_safe_if_expecting_text_parameter(self):
method test_is_safe_if_not_expecting_text_parameter (line 258) | def test_is_safe_if_not_expecting_text_parameter(self):
method test_is_safe_if_not_expecting_any_parameters (line 264) | def test_is_safe_if_not_expecting_any_parameters(self):
method test_dropdown_values_prefers_name_and_value_columns (line 277) | def test_dropdown_values_prefers_name_and_value_columns(self, _):
method test_dropdown_values_compromises_for_first_column (line 288) | def test_dropdown_values_compromises_for_first_column(self, _):
method test_dropdown_supports_upper_cased_columns (line 299) | def test_dropdown_supports_upper_cased_columns(self, _):
method test_dropdown_values_raises_when_query_is_detached_from_data_source (line 307) | def test_dropdown_values_raises_when_query_is_detached_from_data_sourc...
FILE: tests/models/test_permissions.py
class TestAccessPermissionGrant (line 6) | class TestAccessPermissionGrant(BaseTestCase):
method test_creates_correct_object (line 7) | def test_creates_correct_object(self):
method test_returns_existing_object_if_exists (line 21) | def test_returns_existing_object_if_exists(self):
class TestAccessPermissionRevoke (line 40) | class TestAccessPermissionRevoke(BaseTestCase):
method test_deletes_nothing_when_no_permission_exists (line 41) | def test_deletes_nothing_when_no_permission_exists(self):
method test_deletes_permission (line 45) | def test_deletes_permission(self):
method test_deletes_permission_for_only_given_grantee_on_given_grant_type (line 55) | def test_deletes_permission_for_only_given_grantee_on_given_grant_type...
method test_deletes_all_permissions_if_no_type_given (line 83) | def test_deletes_all_permissions_if_no_type_given(self):
class TestAccessPermissionFind (line 103) | class TestAccessPermissionFind(BaseTestCase):
class TestAccessPermissionExists (line 107) | class TestAccessPermissionExists(BaseTestCase):
FILE: tests/models/test_queries.py
class QueryTest (line 11) | class QueryTest(BaseTestCase):
method test_changing_query_text_changes_hash (line 12) | def test_changing_query_text_changes_hash(self):
method create_tagged_query (line 20) | def create_tagged_query(self, tags):
method test_all_tags (line 25) | def test_all_tags(self):
method test_search_finds_in_name (line 35) | def test_search_finds_in_name(self):
method test_search_finds_in_description (line 45) | def test_search_finds_in_description(self):
method test_search_finds_in_multi_byte_name_and_description (line 56) | def test_search_finds_in_multi_byte_name_and_description(self):
method test_search_by_id_returns_query (line 67) | def test_search_by_id_returns_query(self):
method test_search_by_number (line 78) | def test_search_by_number(self):
method test_search_respects_groups (line 85) | def test_search_respects_groups(self):
method test_returns_each_query_only_once (line 110) | def test_returns_each_query_only_once(self):
method test_save_updates_updated_at_field (line 127) | def test_save_updates_updated_at_field(self):
method test_search_is_case_insensitive (line 136) | def test_search_is_case_insensitive(self):
method test_search_query_parser_or (line 141) | def test_search_query_parser_or(self):
method test_search_query_parser_negation (line 149) | def test_search_query_parser_negation(self):
method test_search_query_parser_parenthesis (line 157) | def test_search_query_parser_parenthesis(self):
method test_search_query_parser_hyphen (line 167) | def test_search_query_parser_hyphen(self):
method test_search_query_parser_emails (line 176) | def test_search_query_parser_emails(self):
method test_past_scheduled_queries (line 192) | def test_past_scheduled_queries(self):
method test_search_by_user_finds_in_user (line 204) | def test_search_by_user_finds_in_user(self):
method test_search_by_user_finds_in_multi_byte_user (line 221) | def test_search_by_user_finds_in_multi_byte_user(self):
class QueryRecentTest (line 239) | class QueryRecentTest(BaseTestCase):
method test_global_recent (line 240) | def test_global_recent(self):
method test_recent_excludes_drafts (line 256) | def test_recent_excludes_drafts(self):
method test_recent_for_user (line 283) | def test_recent_for_user(self):
method test_respects_groups (line 304) | def test_respects_groups(self):
class TestQueryByUser (line 330) | class TestQueryByUser(BaseTestCase):
method test_returns_only_users_queries (line 331) | def test_returns_only_users_queries(self):
method test_returns_drafts_by_the_user (line 341) | def test_returns_drafts_by_the_user(self):
method test_returns_only_queries_from_groups_the_user_is_member_in (line 351) | def test_returns_only_queries_from_groups_the_user_is_member_in(self):
class TestQueryFork (line 362) | class TestQueryFork(BaseTestCase):
method assert_visualizations (line 363) | def assert_visualizations(self, origin_q, origin_v, forked_q, forked_v):
method test_fork_with_visualizations (line 370) | def test_fork_with_visualizations(self):
method test_fork_from_query_that_has_no_visualization (line 432) | def test_fork_from_query_that_has_no_visualization(self):
method test_fork_keeps_query_tags (line 454) | def test_fork_keeps_query_tags(self):
class TestQueryUpdateLatestResult (line 462) | class TestQueryUpdateLatestResult(BaseTestCase):
method setUp (line 463) | def setUp(self):
method test_updates_existing_queries (line 472) | def test_updates_existing_queries(self):
method test_doesnt_update_queries_with_different_hash (line 493) | def test_doesnt_update_queries_with_different_hash(self):
method test_doesnt_update_queries_with_different_data_source (line 514) | def test_doesnt_update_queries_with_different_data_source(self):
FILE: tests/models/test_query_results.py
class QueryResultTest (line 8) | class QueryResultTest(BaseTestCase):
method test_get_latest_returns_none_if_not_found (line 9) | def test_get_latest_returns_none_if_not_found(self):
method test_get_latest_returns_when_found (line 13) | def test_get_latest_returns_when_found(self):
method test_get_latest_doesnt_return_query_from_different_data_source (line 19) | def test_get_latest_doesnt_return_query_from_different_data_source(self):
method test_get_latest_doesnt_return_if_ttl_expired (line 26) | def test_get_latest_doesnt_return_if_ttl_expired(self):
method test_get_latest_returns_if_ttl_not_expired (line 34) | def test_get_latest_returns_if_ttl_not_expired(self):
method test_get_latest_returns_the_most_recent_result (line 42) | def test_get_latest_returns_the_most_recent_result(self):
method test_get_latest_returns_the_last_cached_result_for_negative_ttl (line 51) | def test_get_latest_returns_the_last_cached_result_for_negative_ttl(se...
method test_store_result_does_not_modify_query_update_at (line 61) | def test_store_result_does_not_modify_query_update_at(self):
FILE: tests/models/test_users.py
class TestUserUpdateGroupAssignments (line 8) | class TestUserUpdateGroupAssignments(BaseTestCase):
method test_default_group_always_added (line 9) | def test_default_group_always_added(self):
method test_update_group_assignments (line 17) | def test_update_group_assignments(self):
class TestUserFindByEmail (line 27) | class TestUserFindByEmail(BaseTestCase):
method test_finds_users (line 28) | def test_finds_users(self):
method test_finds_users_case_insensitive (line 36) | def test_finds_users_case_insensitive(self):
class TestUserGetByEmailAndOrg (line 43) | class TestUserGetByEmailAndOrg(BaseTestCase):
method test_get_user_by_email_and_org (line 44) | def test_get_user_by_email_and_org(self):
method test_get_user_by_email_and_org_case_insensitive (line 50) | def test_get_user_by_email_and_org_case_insensitive(self):
class TestUserSearch (line 57) | class TestUserSearch(BaseTestCase):
method test_non_unicode_search_string (line 58) | def test_non_unicode_search_string(self):
class TestUserRegenerateApiKey (line 64) | class TestUserRegenerateApiKey(BaseTestCase):
method test_regenerate_api_key (line 65) | def test_regenerate_api_key(self):
class TestUserDetail (line 75) | class TestUserDetail(BaseTestCase):
method test_userdetail_db_default (line 80) | def test_userdetail_db_default(self):
method test_userdetail_db_default_save (line 85) | def test_userdetail_db_default_save(self):
method test_sync (line 97) | def test_sync(self):
class TestUserGetActualUser (line 108) | class TestUserGetActualUser(BaseTestCase):
method test_default_user (line 109) | def test_default_user(self):
method test_api_user (line 114) | def test_api_user(self):
FILE: tests/query_runner/test_athena.py
class TestGlueSchema (line 14) | class TestGlueSchema(TestCase):
method setUp (line 15) | def setUp(self):
method tearDown (line 28) | def tearDown(self):
method test_external_table (line 31) | def test_external_table(self):
method test_partitioned_table (line 82) | def test_partitioned_table(self):
method test_view (line 136) | def test_view(self):
method test_dodgy_table_does_not_break_schema_listing (line 168) | def test_dodgy_table_does_not_break_schema_listing(self):
method test_no_storage_descriptor_table (line 210) | def test_no_storage_descriptor_table(self):
method test_multi_catalog_tables (line 234) | def test_multi_catalog_tables(self):
FILE: tests/query_runner/test_azure_kusto.py
class TestAzureKusto (line 7) | class TestAzureKusto(TestCase):
method setUp (line 8) | def setUp(self):
method test_get_schema (line 19) | def test_get_schema(self, mock_run_query):
FILE: tests/query_runner/test_basequeryrunner.py
class TestBaseQueryRunner (line 6) | class TestBaseQueryRunner(unittest.TestCase):
method setUp (line 7) | def setUp(self):
method test_duplicate_column_names_assigned_correctly (line 10) | def test_duplicate_column_names_assigned_correctly(self):
FILE: tests/query_runner/test_basesql_queryrunner.py
class TestBaseSQLQueryRunner (line 7) | class TestBaseSQLQueryRunner(unittest.TestCase):
method setUp (line 8) | def setUp(self):
method test_check_query_limit_no_limit (line 11) | def test_check_query_limit_no_limit(self):
method test_check_query_limit_non_select (line 15) | def test_check_query_limit_non_select(self):
method test_check_query_limit_invalid_1 (line 19) | def test_check_query_limit_invalid_1(self):
method test_check_query_limit_invalid_2 (line 23) | def test_check_query_limit_invalid_2(self):
method test_check_query_with_limit (line 27) | def test_check_query_with_limit(self):
method test_check_query_with_offset (line 31) | def test_check_query_with_offset(self):
method test_add_limit_query_no_limit (line 35) | def test_add_limit_query_no_limit(self):
method test_add_limit_query_with_punc (line 39) | def test_add_limit_query_with_punc(self):
method test_apply_auto_limit_origin_no_limit_1 (line 43) | def test_apply_auto_limit_origin_no_limit_1(self):
method test_apply_auto_limit_origin_have_limit_1 (line 48) | def test_apply_auto_limit_origin_have_limit_1(self):
method test_apply_auto_limit_origin_have_limit_2 (line 53) | def test_apply_auto_limit_origin_have_limit_2(self):
method test_apply_auto_limit_origin_no_limit_2 (line 58) | def test_apply_auto_limit_origin_no_limit_2(self):
method test_apply_auto_limit_non_select_query (line 63) | def test_apply_auto_limit_non_select_query(self):
method test_apply_auto_limit_error_query (line 72) | def test_apply_auto_limit_error_query(self):
method test_apply_auto_limit_multi_query_add_limit_1 (line 77) | def test_apply_auto_limit_multi_query_add_limit_1(self):
method test_apply_auto_limit_multi_query_add_limit_2 (line 89) | def test_apply_auto_limit_multi_query_add_limit_2(self):
method test_apply_auto_limit_multi_query_end_with_punc (line 94) | def test_apply_auto_limit_multi_query_end_with_punc(self):
method test_apply_auto_limit_multi_query_last_not_select (line 99) | def test_apply_auto_limit_multi_query_last_not_select(self):
method test_apply_auto_limit_last_command_comment (line 104) | def test_apply_auto_limit_last_command_comment(self):
method test_apply_auto_limit_last_command_comment_2 (line 109) | def test_apply_auto_limit_last_command_comment_2(self):
method test_apply_auto_limit_inline_comment (line 114) | def test_apply_auto_limit_inline_comment(self):
method test_gen_query_hash_baseSQL (line 119) | def test_gen_query_hash_baseSQL(self):
method test_gen_query_hash_NoneSQL (line 127) | def test_gen_query_hash_NoneSQL(self):
FILE: tests/query_runner/test_bigquery.py
class TestBigQueryQueryRunner (line 6) | class TestBigQueryQueryRunner(unittest.TestCase):
method test_annotate_query_with_use_query_annotation_option (line 7) | def test_annotate_query_with_use_query_annotation_option(self):
method test_annotate_query_without_use_query_annotation_option (line 29) | def test_annotate_query_without_use_query_annotation_option(self):
FILE: tests/query_runner/test_cass.py
class TestCassandra (line 7) | class TestCassandra(TestCase):
method test_generate_ssl_options_dict_creates_plain_protocol_dict (line 8) | def test_generate_ssl_options_dict_creates_plain_protocol_dict(self):
method test_generate_ssl_options_dict_creates_certificate_dict (line 13) | def test_generate_ssl_options_dict_creates_certificate_dict(self):
FILE: tests/query_runner/test_clickhouse.py
class TestClickHouseQueriesSplit (line 55) | class TestClickHouseQueriesSplit(TestCase):
method test_split (line 56) | def test_split(self):
class TestClickHouse (line 75) | class TestClickHouse(TestCase):
method test_send_single_query (line 77) | def test_send_single_query(self, post_request):
method test_send_multi_query (line 116) | def test_send_multi_query(self, post_request):
method assert_session_params (line 176) | def assert_session_params(self, kwargs, expected_check, expected_timeo...
FILE: tests/query_runner/test_databricks.py
class TestSplitMultipleSQLStatements (line 6) | class TestSplitMultipleSQLStatements(TestCase):
method _assertSplitSql (line 7) | def _assertSplitSql(self, sql, expected_stmt):
method test_splits_multiple_statements_by_semicolon (line 17) | def test_splits_multiple_statements_by_semicolon(self):
method test_keeps_original_syntax (line 44) | def test_keeps_original_syntax(self):
method test_keeps_comments (line 79) | def test_keeps_comments(self):
method test_skips_empty_statements (line 105) | def test_skips_empty_statements(self):
FILE: tests/query_runner/test_drill.py
class TestConvertType (line 14) | class TestConvertType(TestCase):
method test_converts_booleans (line 15) | def test_converts_booleans(self):
method test_converts_strings (line 23) | def test_converts_strings(self):
method test_converts_integer (line 29) | def test_converts_integer(self):
method test_converts_float (line 32) | def test_converts_float(self):
method test_converts_date (line 35) | def test_converts_date(self):
class TestParseResponse (line 53) | class TestParseResponse(TestCase):
method test_parse_empty_reponse (line 54) | def test_parse_empty_reponse(self):
method test_parse_regular_response (line 63) | def test_parse_regular_response(self):
FILE: tests/query_runner/test_duckdb.py
class TestDuckDBSchema (line 7) | class TestDuckDBSchema(TestCase):
method setUp (line 8) | def setUp(self) -> None:
method test_simple_schema_build (line 12) | def test_simple_schema_build(self, mock_run_query) -> None:
method test_struct_column_expansion (line 47) | def test_struct_column_expansion(self, mock_run_query) -> None:
method test_nested_struct_expansion (line 91) | def test_nested_struct_expansion(self) -> None:
method test_motherduck_catalog_included (line 119) | def test_motherduck_catalog_included(self, mock_run_query) -> None:
method test_error_propagation (line 150) | def test_error_propagation(self, mock_run_query) -> None:
FILE: tests/query_runner/test_e6data.py
function test_run_query (line 19) | def test_run_query(mock_cursor):
function test_test_connection (line 42) | def test_test_connection(mock_cursor):
function test_get_schema (line 57) | def test_get_schema(mock_get_columns, mock_get_tables):
FILE: tests/query_runner/test_elasticsearch2.py
class TestElasticSearch (line 9) | class TestElasticSearch(TestCase):
method test_parse_mappings (line 10) | def test_parse_mappings(self):
method test_parse_aggregation (line 34) | def test_parse_aggregation(self):
method test_parse_sub_aggregation (line 75) | def test_parse_sub_aggregation(self):
class TestXPackSQL (line 116) | class TestXPackSQL(TestCase):
method test_parse_results (line 117) | def test_parse_results(self):
class TestElasticSearch2 (line 142) | class TestElasticSearch2(TestCase):
method test_build_query (line 144) | def test_build_query(self, mock_init):
FILE: tests/query_runner/test_google_analytics4.py
class TestFormatColumnValue (line 11) | class TestFormatColumnValue(TestCase):
method setUp (line 12) | def setUp(self):
method test_string_value (line 36) | def test_string_value(self):
method test_for_date (line 44) | def test_for_date(self):
method test_for_date_hour (line 52) | def test_for_date_hour(self):
method test_for_date_hour_minute (line 60) | def test_for_date_hour_minute(self):
method test_when_exception_raise (line 68) | def test_when_exception_raise(self):
class TestGetFormattedColumnJson (line 76) | class TestGetFormattedColumnJson(TestCase):
method test_date_column (line 77) | def test_date_column(self):
method test_date_hour_column (line 87) | def test_date_hour_column(self):
method test_other_string (line 97) | def test_other_string(self):
class TestParseGaResponse (line 108) | class TestParseGaResponse(TestCase):
method test_parse_ga_response (line 109) | def test_parse_ga_response(self):
method test_parse_ga_response_with_date_hour (line 131) | def test_parse_ga_response_with_date_hour(self):
FILE: tests/query_runner/test_google_search_console.py
class TestParseGaResponse (line 10) | class TestParseGaResponse(TestCase):
method test_parse_ga_response (line 11) | def test_parse_ga_response(self):
method test_parse_ga_response_with_date (line 67) | def test_parse_ga_response_with_date(self):
class TestFormatColumnValue (line 123) | class TestFormatColumnValue(TestCase):
method test_string_value (line 124) | def test_string_value(self):
method test_number_value (line 132) | def test_number_value(self):
method test_for_date (line 140) | def test_for_date(self):
method test_for_date_hour (line 148) | def test_for_date_hour(self):
method test_for_date_hour_minute (line 156) | def test_for_date_hour_minute(self):
method test_when_exception_raise (line 164) | def test_when_exception_raise(self):
FILE: tests/query_runner/test_google_spreadsheets.py
class TestValueEvalList (line 25) | class TestValueEvalList(TestCase):
method test_handles_unicode (line 26) | def test_handles_unicode(self):
method test_handles_boolean (line 30) | def test_handles_boolean(self):
method test_handles_empty_values (line 35) | def test_handles_empty_values(self):
method test_handles_float (line 40) | def test_handles_float(self):
method test_handles_datetime (line 45) | def test_handles_datetime(self):
class TestParseSpreadsheet (line 54) | class TestParseSpreadsheet(TestCase):
method test_returns_meaningful_error_for_missing_worksheet (line 55) | def test_returns_meaningful_error_for_missing_worksheet(self):
method test_returns_meaningful_error_for_missing_worksheet_by_title (line 62) | def test_returns_meaningful_error_for_missing_worksheet_by_title(self):
class TestParseWorksheet (line 81) | class TestParseWorksheet(TestCase):
method test_parse_empty_worksheet (line 82) | def test_parse_empty_worksheet(self):
method test_parse_only_headers_worksheet (line 85) | def test_parse_only_headers_worksheet(self):
method test_parse_regular_worksheet (line 88) | def test_parse_regular_worksheet(self):
method test_parse_worksheet_with_duplicate_column_names (line 91) | def test_parse_worksheet_with_duplicate_column_names(self):
class TestParseQuery (line 111) | class TestParseQuery(TestCase):
method test_parse_query (line 112) | def test_parse_query(self):
method test_parse_query_ignored (line 116) | def test_parse_query_ignored(self):
method test_parse_query_title (line 126) | def test_parse_query_title(self):
method test_parse_query_failed (line 145) | def test_parse_query_failed(self):
class TestGetColumnsAndColumnNames (line 151) | class TestGetColumnsAndColumnNames(TestCase):
method test_get_columns (line 152) | def test_get_columns(self):
method test_get_columns_with_duplicated (line 158) | def test_get_columns_with_duplicated(self):
method test_get_columns_with_blank (line 164) | def test_get_columns_with_blank(self):
class TestIsUrlKey (line 171) | class TestIsUrlKey(TestCase):
method test_is_url_key (line 172) | def test_is_url_key(self):
class TestConnection (line 180) | class TestConnection(TestCase):
method test_connect_succuess (line 183) | def test_connect_succuess(self, mock_client, _mock_auth_default):
method test_connect_fail_with_transport_error (line 193) | def test_connect_fail_with_transport_error(self, mock_auth_default):
method test_connect_fail_with_api_error (line 200) | def test_connect_fail_with_api_error(self, mock_auth_default):
FILE: tests/query_runner/test_http.py
class RequiresAuthQueryRunner (line 12) | class RequiresAuthQueryRunner(BaseHTTPQueryRunner):
class TestBaseHTTPQueryRunner (line 16) | class TestBaseHTTPQueryRunner(TestCase):
method test_requires_authentication_default (line 17) | def test_requires_authentication_default(self):
method test_requires_authentication_true (line 23) | def test_requires_authentication_true(self):
method test_get_auth_with_values (line 28) | def test_get_auth_with_values(self):
method test_get_auth_empty (line 32) | def test_get_auth_empty(self):
method test_get_auth_empty_requires_authentication (line 36) | def test_get_auth_empty_requires_authentication(self):
method test_get_response_success (line 41) | def test_get_response_success(self, mock_get):
method test_get_response_success_custom_auth (line 55) | def test_get_response_success_custom_auth(self, mock_get):
method test_get_response_failure (line 70) | def test_get_response_failure(self, mock_get):
method test_get_response_httperror_exception (line 83) | def test_get_response_httperror_exception(self, mock_get):
method test_get_response_requests_exception (line 99) | def test_get_response_requests_exception(self, mock_get):
method test_get_response_generic_exception (line 116) | def test_get_response_generic_exception(self, mock_get):
FILE: tests/query_runner/test_ignite.py
class TestIgnite (line 7) | class TestIgnite(TestCase):
method test_server_to_connection (line 8) | def test_server_to_connection(self):
method test_normalise_row (line 22) | def test_normalise_row(self):
method test_parse_query_results (line 37) | def test_parse_query_results(self):
FILE: tests/query_runner/test_influx_db.py
function test_influxdb_result_types_with_rows (line 26) | def test_influxdb_result_types_with_rows():
function test_influxdb_result_types_with_no_rows_are_string (line 44) | def test_influxdb_result_types_with_no_rows_are_string():
FILE: tests/query_runner/test_influx_db_v2.py
function influx_table_list (line 14) | def influx_table_list():
class TestInfluxDBv2 (line 46) | class TestInfluxDBv2:
method test_get_influx_kwargs (line 48) | def test_get_influx_kwargs(self, create_cert_file_mock: mock.MagicMock):
method test_create_cert_file (line 105) | def test_create_cert_file(self, named_temporary_file_mock: mock.MagicM...
method test_cleanup_cert_files (line 130) | def test_cleanup_cert_files(self, os_mock: mock.MagicMock):
method test_configuration_schema (line 157) | def test_configuration_schema(self):
method test_enabled (line 177) | def test_enabled(self):
method test_test_connection (line 183) | def test_test_connection(
method test_get_type (line 234) | def test_get_type(self):
method test_get_data_from_tables (line 251) | def test_get_data_from_tables(self, influx_table_list: TableList):
method test_run_query (line 278) | def test_run_query(
FILE: tests/query_runner/test_jql.py
class TestFieldMapping (line 6) | class TestFieldMapping(TestCase):
method test_empty (line 7) | def test_empty(self):
method test_with_mappings (line 14) | def test_with_mappings(self):
class TestParseIssue (line 40) | class TestParseIssue(TestCase):
method test_no_mapping (line 61) | def test_no_mapping(self):
method test_mapping (line 75) | def test_mapping(self):
method test_mapping_nonexisting_field (line 104) | def test_mapping_nonexisting_field(self):
FILE: tests/query_runner/test_json_ds.py
function mock_api (line 11) | def mock_api(url, method, **request_options):
class TestJSON (line 54) | class TestJSON(TestCase):
method setUp (line 55) | def setUp(self):
method test_basics (line 59) | def test_basics(self):
method test_token_pagination (line 66) | def test_token_pagination(self):
method test_url_pagination (line 78) | def test_url_pagination(self):
FILE: tests/query_runner/test_mongodb.py
class TestMongoDB (line 19) | class TestMongoDB(TestCase):
method test_username_password_present_overrides_username_from_uri (line 20) | def test_username_password_present_overrides_username_from_uri(self, m...
method test_username_password_absent_does_not_pass_args (line 33) | def test_username_password_absent_does_not_pass_args(self, mongo_client):
method test_run_query_with_fields (line 41) | def test_run_query_with_fields(self, mongo_client):
method test_run_query_with_func (line 55) | def test_run_query_with_func(self, mongo_client):
method test_run_query_with_aggregate (line 74) | def test_run_query_with_aggregate(self, mongo_client):
method _test_query (line 95) | def _test_query(self, query, return_value, expected):
class TestParseQueryJson (line 109) | class TestParseQueryJson(TestCase):
method test_ignores_non_isodate_fields (line 110) | def test_ignores_non_isodate_fields(self):
method test_parses_isodate_fields (line 116) | def test_parses_isodate_fields(self):
method test_parses_isodate_in_nested_fields (line 128) | def test_parses_isodate_in_nested_fields(self):
method test_handles_nested_fields (line 141) | def test_handles_nested_fields(self):
method test_supports_extended_json_types (line 165) | def test_supports_extended_json_types(self):
method test_supports_relative_timestamps (line 182) | def test_supports_relative_timestamps(self):
class TestMongoResults (line 190) | class TestMongoResults(TestCase):
method test_parses_regular_results (line 191) | def test_parses_regular_results(self):
method test_parses_nested_results (line 206) | def test_parses_nested_results(self):
method test_parses_flatten_nested_results (line 249) | def test_parses_flatten_nested_results(self):
FILE: tests/query_runner/test_oracle.py
class TestOracle (line 6) | class TestOracle(unittest.TestCase):
method setUp (line 7) | def setUp(self):
method test_add_limit_query_no_limit (line 10) | def test_add_limit_query_no_limit(self):
method test_add_limit_query_with_punc (line 14) | def test_add_limit_query_with_punc(self):
method test_apply_auto_limit_origin_no_limit_1 (line 18) | def test_apply_auto_limit_origin_no_limit_1(self):
method test_apply_auto_limit_origin_have_limit_1 (line 23) | def test_apply_auto_limit_origin_have_limit_1(self):
FILE: tests/query_runner/test_pg.py
class TestParameters (line 6) | class TestParameters(TestCase):
method test_parse_dsn (line 7) | def test_parse_dsn(self):
method test_parse_dsn_not_permitted (line 11) | def test_parse_dsn_not_permitted(self):
class TestBuildSchema (line 16) | class TestBuildSchema(TestCase):
method test_handles_dups_between_public_and_other_schemas (line 17) | def test_handles_dups_between_public_and_other_schemas(self):
method test_build_schema_with_data_types (line 39) | def test_build_schema_with_data_types(self):
FILE: tests/query_runner/test_prometheus.py
class TestPrometheus (line 10) | class TestPrometheus(TestCase):
method setUp (line 11) | def setUp(self):
method test_get_instant_rows (line 34) | def test_get_instant_rows(self):
method test_get_range_rows (line 53) | def test_get_range_rows(self):
method test_get_datetime_now (line 85) | def test_get_datetime_now(self, datetime_mock: mock.MagicMock):
method test_get_prometheus_kwargs (line 92) | def test_get_prometheus_kwargs(self, create_cert_file_mock: mock.Magic...
method test_create_cert_file (line 140) | def test_create_cert_file(self, named_temporary_file_mock: mock.MagicM...
method test_cleanup_cert_files (line 165) | def test_cleanup_cert_files(self, os_mock: mock.MagicMock):
method test_configuration_schema (line 193) | def test_configuration_schema(self):
method test_enabled (line 213) | def test_enabled(self):
method test_test_connection (line 218) | def test_test_connection(
method test_get_schema (line 269) | def test_get_schema(
method test_run_query (line 320) | def test_run_query(
FILE: tests/query_runner/test_python.py
class TestPythonQueryRunner (line 9) | class TestPythonQueryRunner(TestCase):
method setUp (line 10) | def setUp(self):
method test_print_in_query_string_success (line 14) | def test_print_in_query_string_success(self, mock_dt):
method test_empty_result (line 20) | def test_empty_result(self):
method test_none_result (line 25) | def test_none_result(self):
method test_invalid_result_type_string (line 30) | def test_invalid_result_type_string(self):
method test_invalid_result_type_int (line 35) | def test_invalid_result_type_int(self):
method test_invalid_result_missing_rows (line 40) | def test_invalid_result_missing_rows(self):
method test_invalid_result_not_list_rows (line 45) | def test_invalid_result_not_list_rows(self):
method test_invalid_result_missing_columns (line 50) | def test_invalid_result_missing_columns(self):
method test_invalid_result_not_list_columns (line 55) | def test_invalid_result_not_list_columns(self):
method test_valid_result_type (line 60) | def test_valid_result_type(self):
method test_valid_result_type_with_print (line 79) | def test_valid_result_type_with_print(self, mock_dt):
class TestPython (line 100) | class TestPython(TestCase):
method test_sorted_safe_builtins (line 101) | def test_sorted_safe_builtins(self):
FILE: tests/query_runner/test_query_results.py
class TestExtractQueryIds (line 25) | class TestExtractQueryIds(TestCase):
method test_works_with_simple_query (line 26) | def test_works_with_simple_query(self):
method test_finds_queries_to_load (line 30) | def test_finds_queries_to_load(self):
method test_finds_queries_in_joins (line 34) | def test_finds_queries_in_joins(self):
method test_finds_queries_with_whitespace_characters (line 38) | def test_finds_queries_with_whitespace_characters(self):
class TestCreateTable (line 43) | class TestCreateTable(TestCase):
method test_creates_table_with_colons_in_column_name (line 44) | def test_creates_table_with_colons_in_column_name(self):
method test_creates_table_with_double_quotes_in_column_name (line 54) | def test_creates_table_with_double_quotes_in_column_name(self):
method test_creates_table (line 64) | def test_creates_table(self):
method test_creates_table_with_missing_columns (line 71) | def test_creates_table_with_missing_columns(self):
method test_creates_table_with_spaces_in_column_name (line 81) | def test_creates_table_with_spaces_in_column_name(self):
method test_creates_table_with_dashes_in_column_name (line 91) | def test_creates_table_with_dashes_in_column_name(self):
method test_creates_table_with_non_ascii_in_column_name (line 102) | def test_creates_table_with_non_ascii_in_column_name(self):
method test_creates_table_with_decimal_and_timedelta_in_column_value (line 112) | def test_creates_table_with_decimal_and_timedelta_in_column_value(self):
method test_shows_meaningful_error_on_failure_to_create_table (line 122) | def test_shows_meaningful_error_on_failure_to_create_table(self):
method test_loads_results (line 129) | def test_loads_results(self):
method test_loads_list_and_dict_results (line 137) | def test_loads_list_and_dict_results(self):
class TestGetQuery (line 146) | class TestGetQuery(BaseTestCase):
method test_raises_exception_for_query_from_different_account (line 148) | def test_raises_exception_for_query_from_different_account(self):
method test_raises_exception_for_query_with_different_groups (line 154) | def test_raises_exception_for_query_with_different_groups(self):
method test_returns_query (line 161) | def test_returns_query(self):
method test_returns_query_when_user_has_view_only_access (line 168) | def test_returns_query_when_user_has_view_only_access(self):
class TestExtractCachedQueryIds (line 177) | class TestExtractCachedQueryIds(TestCase):
method test_works_with_simple_query (line 178) | def test_works_with_simple_query(self):
method test_finds_queries_to_load (line 182) | def test_finds_queries_to_load(self):
method test_finds_queries_in_joins (line 186) | def test_finds_queries_in_joins(self):
method test_finds_queries_with_whitespace_characters (line 190) | def test_finds_queries_with_whitespace_characters(self):
class TestExtractParamQueryIds (line 195) | class TestExtractParamQueryIds(TestCase):
method test_works_with_simple_query (line 196) | def test_works_with_simple_query(self):
method test_ignores_non_param_queries (line 200) | def test_ignores_non_param_queries(self):
method test_ignores_cached_queries_to_load (line 204) | def test_ignores_cached_queries_to_load(self):
method test_finds_queries_to_load (line 208) | def test_finds_queries_to_load(self):
method test_finds_queries_in_joins (line 212) | def test_finds_queries_in_joins(self):
class TestPrepareParameterizedQuery (line 217) | class TestPrepareParameterizedQuery(TestCase):
method test_param_query_replacement (line 218) | def test_param_query_replacement(self):
class TestReplaceQueryParameters (line 223) | class TestReplaceQueryParameters(TestCase):
method test_replace_query_params (line 224) | def test_replace_query_params(self):
class TestFixColumnName (line 229) | class TestFixColumnName(TestCase):
method test_fix_column_name (line 230) | def test_fix_column_name(self):
class TestGetQueryResult (line 234) | class TestGetQueryResult(BaseTestCase):
method test_cached_query_result (line 235) | def test_cached_query_result(self):
method test_non_cached_query_result (line 241) | def test_non_cached_query_result(self):
FILE: tests/query_runner/test_script.py
class TestQueryToScript (line 10) | class TestQueryToScript(BaseTestCase):
method test_unspecified (line 13) | def test_unspecified(self):
method test_specified (line 16) | def test_specified(self):
class TestRunScript (line 23) | class TestRunScript(BaseTestCase):
method test_success (line 26) | def test_success(self):
method test_failure (line 30) | def test_failure(self):
FILE: tests/query_runner/test_tinybird.py
class TestTinybird (line 52) | class TestTinybird(TestCase):
method test_get_schema_scans_pipes_and_datasources (line 54) | def test_get_schema_scans_pipes_and_datasources(self, get_request):
method test_run_query (line 75) | def test_run_query(self, get_request):
method _mock_tinybird_schema_requests (line 110) | def _mock_tinybird_schema_requests(self, endpoint, **kwargs):
method _build_query_runner (line 122) | def _build_query_runner(self):
FILE: tests/query_runner/test_trino.py
class TestTrino (line 13) | class TestTrino(TestCase):
method test_get_schema_no_catalog_set (line 22) | def test_get_schema_no_catalog_set(self, mock_run_query, mock__get_cat...
method test_get_schema_catalog_set (line 28) | def test_get_schema_catalog_set(self, mock_run_query, mock__get_catalo...
method _assert_schema_catalog (line 32) | def _assert_schema_catalog(self, mock_run_query, mock__get_catalogs, r...
method test__get_catalogs (line 57) | def test__get_catalogs(self, mock_run_query):
method test_get_client_tags_parses_comma_separated_values (line 64) | def test_get_client_tags_parses_comma_separated_values(self):
method test_get_client_tags_returns_none_when_empty (line 68) | def test_get_client_tags_returns_none_when_empty(self):
class TestConvertRowTypes (line 73) | class TestConvertRowTypes(TestCase):
method test_plain_values_unchanged (line 74) | def test_plain_values_unchanged(self):
method test_named_row_tuple_to_dict (line 79) | def test_named_row_tuple_to_dict(self):
method test_nested_row_tuple (line 84) | def test_nested_row_tuple(self):
method test_row_tuple_inside_list (line 90) | def test_row_tuple_inside_list(self):
method test_unnamed_fields_get_positional_names (line 95) | def test_unnamed_fields_get_positional_names(self):
FILE: tests/query_runner/test_utils.py
class TestGuessType (line 13) | class TestGuessType(TestCase):
method test_handles_unicode (line 14) | def test_handles_unicode(self):
method test_detects_booleans (line 17) | def test_detects_booleans(self):
method test_detects_strings (line 26) | def test_detects_strings(self):
method test_detects_integer (line 31) | def test_detects_integer(self):
method test_detects_float (line 35) | def test_detects_float(self):
method test_detects_date (line 39) | def test_detects_date(self):
FILE: tests/query_runner/test_yandex_disk.py
function mock_yandex_disk (line 31) | def mock_yandex_disk():
function test_yandex_disk_type (line 36) | def test_yandex_disk_type():
function test_yandex_disk_name (line 41) | def test_yandex_disk_name():
function test__send_query (line 47) | def test__send_query(mock_requests_get):
function test_test_connection (line 65) | def test_test_connection(mock_requests_get, configuration, error_message):
function test_get_tables (line 82) | def test_get_tables(mock_yandex_disk):
function mock_ext_readers_return (line 97) | def mock_ext_readers_return(url, **params):
function mock_ext_readers_return_multiple_sheets (line 101) | def mock_ext_readers_return_multiple_sheets(url, **params):
function test_run_query (line 107) | def test_run_query(mocked_requests, mock_yandex_disk):
function test_run_query_with_empty_query (line 139) | def test_run_query_with_empty_query(mock_yandex_disk):
function test_run_query_nonstring_yaml (line 145) | def test_run_query_nonstring_yaml(mock_yandex_disk):
function test_run_query_bad_yaml (line 153) | def test_run_query_bad_yaml(mock_yandex_disk):
function test_run_query_without_path (line 160) | def test_run_query_without_path(mock_yandex_disk):
function test_run_query_unsupported_extension (line 167) | def test_run_query_unsupported_extension(mock_yandex_disk):
function test_run_query_read_file_error (line 174) | def test_run_query_read_file_error(mock_yandex_disk):
function test_run_query_multiple_sheets (line 186) | def test_run_query_multiple_sheets(mocked_requests, mock_yandex_disk):
function test_read_xlsx (line 222) | def test_read_xlsx():
function test_read_csv (line 231) | def test_read_csv():
function test_tsv (line 240) | def test_tsv():
FILE: tests/query_runner/test_yandex_metrica.py
function mock_yandex_response (line 63) | def mock_yandex_response():
function mocked_requests_get (line 92) | def mocked_requests_get(monkeypatch, mock_yandex_response):
function test_yandex_metrica_query (line 96) | def test_yandex_metrica_query(mocked_requests_get):
function test_yandex_metrica_429 (line 104) | def test_yandex_metrica_429(mocked_requests_get):
FILE: tests/serializers/test_query_results.py
class QueryResultSerializationTest (line 26) | class QueryResultSerializationTest(BaseTestCase):
method test_serializes_all_keys_for_authenticated_users (line 27) | def test_serializes_all_keys_for_authenticated_users(self):
method test_doesnt_serialize_sensitive_keys_for_unauthenticated_users (line 32) | def test_doesnt_serialize_sensitive_keys_for_unauthenticated_users(self):
class DsvSerializationTest (line 38) | class DsvSerializationTest(BaseTestCase):
method delimited_content (line 39) | def delimited_content(self, delimiter):
method test_serializes_booleans_correctly (line 43) | def test_serializes_booleans_correctly(self):
method test_serializes_datatime_with_correct_format (line 52) | def test_serializes_datatime_with_correct_format(self):
method test_serializes_datatime_as_is_in_case_of_error (line 64) | def test_serializes_datatime_as_is_in_case_of_error(self):
method test_serializes_tsv_format (line 72) | def test_serializes_tsv_format(self):
FILE: tests/tasks/test_alerts.py
class TestCheckAlertsForQuery (line 9) | class TestCheckAlertsForQuery(BaseTestCase):
method test_notifies_subscribers_when_should (line 10) | def test_notifies_subscribers_when_should(self):
method test_doesnt_notify_when_nothing_changed (line 19) | def test_doesnt_notify_when_nothing_changed(self):
method test_doesnt_notify_when_muted (line 28) | def test_doesnt_notify_when_muted(self):
class TestNotifySubscriptions (line 38) | class TestNotifySubscriptions(BaseTestCase):
method test_calls_notify_for_subscribers (line 39) | def test_calls_notify_for_subscribers(self):
FILE: tests/tasks/test_empty_schedule.py
class TestEmptyScheduleQuery (line 11) | class TestEmptyScheduleQuery(BaseTestCase):
method test_empty_schedules (line 12) | def test_empty_schedules(self):
FILE: tests/tasks/test_failure_report.py
class TestSendAggregatedErrorsTask (line 14) | class TestSendAggregatedErrorsTask(BaseTestCase):
method setUp (line 15) | def setUp(self):
method notify (line 20) | def notify(self, message="Oh no, I failed!", query=None, **kwargs):
method send_email (line 28) | def send_email(self, user, render_template):
method test_schedules_email_if_failure_count_is_beneath_limit (line 34) | def test_schedules_email_if_failure_count_is_beneath_limit(self):
method test_does_not_report_if_failure_count_is_beyond_limit (line 39) | def test_does_not_report_if_failure_count_is_beyond_limit(self):
method test_does_not_report_if_organization_is_not_subscribed (line 44) | def test_does_not_report_if_organization_is_not_subscribed(self):
method test_does_not_report_if_query_owner_is_disabled (line 50) | def test_does_not_report_if_query_owner_is_disabled(self):
method test_does_not_indicate_when_not_near_limit_for_a_query (line 56) | def test_does_not_indicate_when_not_near_limit_for_a_query(self):
method test_indicates_when_near_limit_for_a_query (line 62) | def test_indicates_when_near_limit_for_a_query(self):
method test_aggregates_different_queries_in_a_single_report (line 68) | def test_aggregates_different_queries_in_a_single_report(self):
method test_counts_failures_for_each_reason (line 74) | def test_counts_failures_for_each_reason(self):
method test_shows_latest_failure_time (line 91) | def test_shows_latest_failure_time(self):
FILE: tests/tasks/test_queries.py
function fetch_job (line 16) | def fetch_job(*args, **kwargs):
function create_job (line 29) | def create_job(*args, **kwargs):
class TestEnqueueTask (line 35) | class TestEnqueueTask(BaseTestCase):
method test_multiple_enqueue_of_same_query (line 36) | def test_multiple_enqueue_of_same_query(self, enqueue, _):
method test_multiple_enqueue_of_expired_job (line 67) | def test_multiple_enqueue_of_expired_job(self, enqueue, fetch_job):
method test_reenqueue_during_job_cancellation (line 94) | def test_reenqueue_during_job_cancellation(self, enqueue, my_fetch_job):
method test_limits_query_time (line 127) | def test_limits_query_time(self, _, enqueue, __):
method test_multiple_enqueue_of_different_query (line 143) | def test_multiple_enqueue_of_different_query(self, enqueue, _):
class QueryExecutorTests (line 176) | class QueryExecutorTests(BaseTestCase):
method test_success (line 177) | def test_success(self, _):
method test_success_scheduled (line 189) | def test_success_scheduled(self, _):
method test_failure_scheduled (line 216) | def test_failure_scheduled(self, _):
method test_success_after_failure (line 244) | def test_success_after_failure(self, _):
method test_adhoc_success_after_scheduled_failure (line 281) | def test_adhoc_success_after_scheduled_failure(self, _):
FILE: tests/tasks/test_refresh_queries.py
class TestRefreshQuery (line 10) | class TestRefreshQuery(BaseTestCase):
method test_enqueues_outdated_queries_for_sqlquery (line 11) | def test_enqueues_outdated_queries_for_sqlquery(self):
method test_enqueues_outdated_queries_for_non_sqlquery (line 46) | def test_enqueues_outdated_queries_for_non_sqlquery(self):
method test_doesnt_enqueue_outdated_queries_for_paused_data_source_for_sqlquery (line 78) | def test_doesnt_enqueue_outdated_queries_for_paused_data_source_for_sq...
method test_doesnt_enqueue_outdated_queries_for_paused_data_source_for_non_sqlquery (line 103) | def test_doesnt_enqueue_outdated_queries_for_paused_data_source_for_no...
method test_enqueues_parameterized_queries_for_sqlquery (line 131) | def test_enqueues_parameterized_queries_for_sqlquery(self):
method test_enqueues_parameterized_queries_for_non_sqlquery (line 161) | def test_enqueues_parameterized_queries_for_non_sqlquery(self):
method test_doesnt_enqueue_parameterized_queries_with_invalid_parameters (line 193) | def test_doesnt_enqueue_parameterized_queries_with_invalid_parameters(...
method test_doesnt_enqueue_parameterized_queries_with_dropdown_queries_that_are_detached_from_data_source (line 217) | def test_doesnt_enqueue_parameterized_queries_with_dropdown_queries_th...
FILE: tests/tasks/test_refresh_schemas.py
class TestRefreshSchemas (line 7) | class TestRefreshSchemas(BaseTestCase):
method test_calls_refresh_of_all_data_sources (line 8) | def test_calls_refresh_of_all_data_sources(self):
method test_skips_paused_data_sources (line 14) | def test_skips_paused_data_sources(self):
FILE: tests/tasks/test_schedule.py
class TestSchedule (line 8) | class TestSchedule(TestCase):
method setUp (line 9) | def setUp(self):
method test_schedules_a_new_job (line 14) | def test_schedules_a_new_job(self):
method test_doesnt_reschedule_an_existing_job (line 26) | def test_doesnt_reschedule_an_existing_job(self):
method test_reschedules_a_modified_job (line 35) | def test_reschedules_a_modified_job(self):
method test_removes_jobs_that_are_no_longer_defined (line 48) | def test_removes_jobs_that_are_no_longer_defined(self):
class TestSchedulerMetrics (line 65) | class TestSchedulerMetrics(TestCase):
method setUp (line 66) | def setUp(self):
method test_scheduler_enqueue_job_metric (line 71) | def test_scheduler_enqueue_job_metric(self):
FILE: tests/tasks/test_worker.py
class TestWorkerMetrics (line 13) | class TestWorkerMetrics(BaseTestCase):
method tearDown (line 14) | def tearDown(self):
method test_worker_records_success_metrics (line 19) | def test_worker_records_success_metrics(self, incr):
method test_worker_records_failure_metrics (line 43) | def test_worker_records_failure_metrics(self, _, incr):
class TestQueueMetrics (line 72) | class TestQueueMetrics(BaseTestCase):
method tearDown (line 73) | def tearDown(self):
method test_enqueue_query_records_created_metric (line 78) | def test_enqueue_query_records_created_metric(self, incr):
method test_job_delay_records_created_metric (line 93) | def test_job_delay_records_created_metric(self, incr):
FILE: tests/test_authentication.py
class TestApiKeyAuthentication (line 30) | class TestApiKeyAuthentication(BaseTestCase):
method setUp (line 34) | def setUp(self):
method test_no_api_key (line 42) | def test_no_api_key(self):
method test_wrong_api_key (line 47) | def test_wrong_api_key(self):
method test_correct_api_key (line 52) | def test_correct_api_key(self):
method test_no_query_id (line 57) | def test_no_query_id(self):
method test_user_api_key (line 62) | def test_user_api_key(self):
method test_disabled_user_api_key (line 69) | def test_disabled_user_api_key(self):
method test_api_key_header (line 77) | def test_api_key_header(self):
method test_api_key_header_with_wrong_key (line 82) | def test_api_key_header_with_wrong_key(self):
method test_api_key_for_wrong_org (line 87) | def test_api_key_for_wrong_org(self):
class TestHMACAuthentication (line 98) | class TestHMACAuthentication(BaseTestCase):
method setUp (line 102) | def setUp(self):
method signature (line 110) | def signature(self, expires):
method test_no_signature (line 113) | def test_no_signature(self):
method test_wrong_signature (line 118) | def test_wrong_signature(self):
method test_correct_signature (line 126) | def test_correct_signature(self):
method test_no_query_id (line 137) | def test_no_query_id(self):
method test_user_api_key (line 145) | def test_user_api_key(self):
class TestSessionAuthentication (line 163) | class TestSessionAuthentication(BaseTestCase):
method test_prefers_api_key_over_session_user_id (line 164) | def test_prefers_api_key_over_session_user_id(self):
class TestCreateAndLoginUser (line 180) | class TestCreateAndLoginUser(BaseTestCase):
method test_logins_valid_user (line 181) | def test_logins_valid_user(self):
method test_creates_vaild_new_user (line 188) | def test_creates_vaild_new_user(self):
method test_updates_user_name (line 199) | def test_updates_user_name(self):
class TestVerifyProfile (line 207) | class TestVerifyProfile(BaseTestCase):
method test_no_domain_allowed_for_org (line 208) | def test_no_domain_allowed_for_org(self):
method test_domain_not_in_org_domains_list (line 212) | def test_domain_not_in_org_domains_list(self):
method test_domain_in_org_domains_list (line 217) | def test_domain_in_org_domains_list(self):
method test_org_in_public_mode_accepts_any_domain (line 228) | def test_org_in_public_mode_accepts_any_domain(self):
method test_user_not_in_domain_but_account_exists (line 234) | def test_user_not_in_domain_but_account_exists(self):
class TestGetLoginUrl (line 241) | class TestGetLoginUrl(BaseTestCase):
method test_when_multi_org_enabled_and_org_exists (line 242) | def test_when_multi_org_enabled_and_org_exists(self):
method test_when_multi_org_enabled_and_org_doesnt_exist (line 246) | def test_when_multi_org_enabled_and_org_doesnt_exist(self):
class TestRedirectToUrlAfterLoggingIn (line 251) | class TestRedirectToUrlAfterLoggingIn(BaseTestCase):
method setUp (line 252) | def setUp(self):
method test_no_next_param (line 257) | def test_no_next_param(self):
method test_simple_path_in_next_param (line 265) | def test_simple_path_in_next_param(self):
method test_starts_scheme_url_in_next_param (line 273) | def test_starts_scheme_url_in_next_param(self):
method test_without_scheme_url_in_next_param (line 281) | def test_without_scheme_url_in_next_param(self):
method test_without_scheme_with_path_url_in_next_param (line 289) | def test_without_scheme_with_path_url_in_next_param(self):
class TestRemoteUserAuth (line 298) | class TestRemoteUserAuth(BaseTestCase):
method setUp (line 301) | def setUp(self):
method override_settings (line 307) | def override_settings(self, overrides):
method assert_correct_user_attributes (line 330) | def assert_correct_user_attributes(
method get_test_user (line 349) | def get_test_user(self, email="test@example.com", org=None):
method test_remote_login_disabled (line 358) | def test_remote_login_disabled(self):
method test_remote_login_default_header (line 370) | def test_remote_login_default_header(self):
method test_remote_login_custom_header (line 379) | def test_remote_login_custom_header(self):
class TestUserForgotPassword (line 391) | class TestUserForgotPassword(BaseTestCase):
method test_user_should_receive_password_reset_link (line 392) | def test_user_should_receive_password_reset_link(self):
method test_disabled_user_should_not_receive_password_reset_link (line 400) | def test_disabled_user_should_not_receive_password_reset_link(self):
class TestJWTAuthentication (line 417) | class TestJWTAuthentication(BaseTestCase):
method setUp (line 418) | def setUp(self):
method tearDown (line 438) | def tearDown(self):
method test_jwt_no_token (line 445) | def test_jwt_no_token(self):
method test_jwt_from_pem_file (line 449) | def test_jwt_from_pem_file(self):
method test_jwk_decode (line 470) | def test_jwk_decode(self, mock_get):
FILE: tests/test_cli.py
class DataSourceCommandTests (line 13) | class DataSourceCommandTests(BaseTestCase):
method test_interactive_new (line 14) | def test_interactive_new(self):
method test_options_new (line 30) | def test_options_new(self):
method test_bad_type_new (line 53) | def test_bad_type_new(self):
method test_bad_options_new (line 61) | def test_bad_options_new(self):
method test_list (line 80) | def test_list(self):
method test_connection_test (line 119) | def test_connection_test(self):
method test_connection_bad_test (line 131) | def test_connection_bad_test(self):
method test_connection_delete (line 143) | def test_connection_delete(self):
method test_connection_bad_delete (line 156) | def test_connection_bad_delete(self):
method test_options_edit (line 169) | def test_options_edit(self):
method test_bad_type_edit (line 199) | def test_bad_type_edit(self):
method test_bad_options_edit (line 213) | def test_bad_options_edit(self):
class GroupCommandTests (line 240) | class GroupCommandTests(BaseTestCase):
method test_create (line 241) | def test_create(self):
method test_change_permissions (line 254) | def test_change_permissions(self):
method test_list (line 275) | def test_list(self):
class OrganizationCommandTests (line 330) | class OrganizationCommandTests(BaseTestCase):
method test_set_google_apps_domains (line 331) | def test_set_google_apps_domains(self):
method test_show_google_apps_domains (line 340) | def test_show_google_apps_domains(self):
method test_create (line 356) | def test_create(self):
method test_list (line 366) | def test_list(self):
class UserCommandTests (line 394) | class UserCommandTests(BaseTestCase):
method test_create_basic (line 395) | def test_create_basic(self):
method test_create_admin (line 409) | def test_create_admin(self):
method test_create_googleauth (line 430) | def test_create_googleauth(self):
method test_create_bad (line 443) | def test_create_bad(self):
method test_delete (line 455) | def test_delete(self):
method test_delete_bad (line 465) | def test_delete_bad(self):
method test_password (line 472) | def test_password(self):
method test_password_bad (line 481) | def test_password_bad(self):
method test_password_bad_org (line 488) | def test_password_bad_org(self):
method test_invite (line 498) | def test_invite(self):
method test_list (line 521) | def test_list(self):
method test_grant_admin (line 556) | def test_grant_admin(self):
FILE: tests/test_configuration.py
class TestConfigurationToJson (line 19) | class TestConfigurationToJson(TestCase):
method setUp (line 20) | def setUp(self):
method test_returns_plain_dict (line 24) | def test_returns_plain_dict(self):
method test_raises_exception_when_no_schema_set (line 27) | def test_raises_exception_when_no_schema_set(self):
method test_returns_dict_with_masked_secrets (line 31) | def test_returns_dict_with_masked_secrets(self):
class TestConfigurationUpdate (line 40) | class TestConfigurationUpdate(TestCase):
method setUp (line 41) | def setUp(self):
method test_rejects_invalid_new_config (line 45) | def test_rejects_invalid_new_config(self):
method test_fails_if_no_schema_set (line 48) | def test_fails_if_no_schema_set(self):
method test_ignores_secret_placehodler (line 52) | def test_ignores_secret_placehodler(self):
method test_updates_secret (line 56) | def test_updates_secret(self):
method test_doesnt_leave_leftovers (line 61) | def test_doesnt_leave_leftovers(self):
method test_works_for_schema_without_secret (line 71) | def test_works_for_schema_without_secret(self):
FILE: tests/test_handlers.py
class AuthenticationTestMixin (line 9) | class AuthenticationTestMixin:
method test_returns_404_when_not_unauthenticated (line 10) | def test_returns_404_when_not_unauthenticated(self):
method test_returns_content_when_authenticated (line 15) | def test_returns_content_when_authenticated(self):
class TestAuthentication (line 21) | class TestAuthentication(BaseTestCase):
method test_responds_with_success_for_signed_in_user (line 22) | def test_responds_with_success_for_signed_in_user(self):
method test_redirects_for_nonsigned_in_user (line 30) | def test_redirects_for_nonsigned_in_user(self):
method test_redirects_for_invalid_session_identifier (line 34) | def test_redirects_for_invalid_session_identifier(self):
class PingTest (line 43) | class PingTest(BaseTestCase):
method test_ping (line 44) | def test_ping(self):
class IndexTest (line 50) | class IndexTest(BaseTestCase):
method setUp (line 51) | def setUp(self):
method test_redirect_to_login_when_not_authenticated (line 60) | def test_redirect_to_login_when_not_authenticated(self):
method test_returns_content_when_authenticated (line 65) | def test_returns_content_when_authenticated(self):
class StatusTest (line 71) | class StatusTest(BaseTestCase):
method test_returns_data_for_super_admin (line 72) | def test_returns_data_for_super_admin(self):
method test_returns_403_for_non_admin (line 78) | def test_returns_403_for_non_admin(self):
method test_redirects_non_authenticated_user (line 82) | def test_redirects_non_authenticated_user(self):
class JobAPITest (line 87) | class JobAPITest(BaseTestCase, AuthenticationTestMixin):
method setUp (line 88) | def setUp(self):
class TestLogin (line 93) | class TestLogin(BaseTestCase):
method setUp (line 94) | def setUp(self):
method test_get_login_form (line 98) | def test_get_login_form(self):
method test_get_login_form_remote_auth (line 102) | def test_get_login_form_remote_auth(self):
method test_submit_non_existing_user (line 118) | def test_submit_non_existing_user(self):
method test_submit_correct_user_and_password (line 124) | def test_submit_correct_user_and_password(self):
method test_submit_case_insensitive_user_and_password (line 136) | def test_submit_case_insensitive_user_and_password(self):
method test_submit_correct_user_and_password_and_remember_me (line 151) | def test_submit_correct_user_and_password_and_remember_me(self):
method test_submit_correct_user_and_password_with_next (line 166) | def test_submit_correct_user_and_password_with_next(self):
method test_submit_incorrect_user (line 182) | def test_submit_incorrect_user(self):
method test_submit_incorrect_password (line 188) | def test_submit_incorrect_password(self):
method test_submit_empty_password (line 203) | def test_submit_empty_password(self):
method test_user_already_loggedin (line 211) | def test_user_already_loggedin(self):
method test_correct_user_and_password_when_password_login_disabled (line 217) | def test_correct_user_and_password_when_password_login_disabled(self):
class TestLogout (line 232) | class TestLogout(BaseTestCase):
method test_logout_when_not_loggedin (line 233) | def test_logout_when_not_loggedin(self):
method test_logout_when_loggedin (line 239) | def test_logout_when_loggedin(self):
class TestQuerySnippet (line 248) | class TestQuerySnippet(BaseTestCase):
method test_create (line 249) | def test_create(self):
method test_edit (line 265) | def test_edit(self):
method test_list (line 289) | def test_list(self):
method test_delete (line 311) | def test_delete(self):
FILE: tests/test_migrations.py
function test_only_single_head_revision_in_migrations (line 7) | def test_only_single_head_revision_in_migrations():
FILE: tests/test_models.py
class DashboardTest (line 13) | class DashboardTest(BaseTestCase):
method test_appends_suffix_to_slug_when_duplicate (line 14) | def test_appends_suffix_to_slug_when_duplicate(self):
class ShouldScheduleNextTest (line 29) | class ShouldScheduleNextTest(TestCase):
method test_interval_schedule_that_needs_reschedule (line 30) | def test_interval_schedule_that_needs_reschedule(self):
method test_interval_schedule_that_doesnt_need_reschedule (line 35) | def test_interval_schedule_that_doesnt_need_reschedule(self):
method test_exact_time_that_needs_reschedule (line 40) | def test_exact_time_that_needs_reschedule(self):
method test_exact_time_that_doesnt_need_reschedule (line 47) | def test_exact_time_that_doesnt_need_reschedule(self):
method test_exact_time_with_day_change (line 53) | def test_exact_time_with_day_change(self):
method test_exact_time_every_x_days_that_needs_reschedule (line 59) | def test_exact_time_every_x_days_that_needs_reschedule(self):
method test_exact_time_every_x_days_that_doesnt_need_reschedule (line 67) | def test_exact_time_every_x_days_that_doesnt_need_reschedule(self):
method test_exact_time_every_x_days_with_day_change (line 75) | def test_exact_time_every_x_days_with_day_change(self):
method test_exact_time_every_x_weeks_that_needs_reschedule (line 82) | def test_exact_time_every_x_weeks_that_needs_reschedule(self):
method test_exact_time_every_x_weeks_that_doesnt_need_reschedule (line 104) | def test_exact_time_every_x_weeks_that_doesnt_need_reschedule(self):
method test_backoff (line 126) | def test_backoff(self):
method test_next_iteration_overflow (line 132) | def test_next_iteration_overflow(self):
class QueryOutdatedQueriesTest (line 138) | class QueryOutdatedQueriesTest(BaseTestCase):
method schedule (line 139) | def schedule(self, **kwargs):
method create_scheduled_query (line 144) | def create_scheduled_query(self, **kwargs):
method fake_previous_execution (line 147) | def fake_previous_execution(self, query, **kwargs):
method test_outdated_queries_skips_unscheduled_queries (line 157) | def test_outdated_queries_skips_unscheduled_queries(self):
method test_outdated_queries_works_with_ttl_based_schedule (line 166) | def test_outdated_queries_works_with_ttl_based_schedule(self):
method test_outdated_queries_works_scheduled_queries_tracker (line 174) | def test_outdated_queries_works_scheduled_queries_tracker(self):
method test_skips_fresh_queries (line 183) | def test_skips_fresh_queries(self):
method test_outdated_queries_works_with_specific_time_schedule (line 191) | def test_outdated_queries_works_with_specific_time_schedule(self):
method test_enqueues_query_only_once (line 203) | def test_enqueues_query_only_once(self):
method test_enqueues_scheduled_query_without_latest_query_data (line 219) | def test_enqueues_scheduled_query_without_latest_query_data(self):
method test_enqueues_query_with_correct_data_source (line 233) | def test_enqueues_query_with_correct_data_source(self):
method test_enqueues_only_for_relevant_data_source (line 255) | def test_enqueues_only_for_relevant_data_source(self):
method test_failure_extends_schedule (line 271) | def test_failure_extends_schedule(self):
method test_schedule_until_after (line 287) | def test_schedule_until_after(self):
method test_schedule_until_before (line 300) | def test_schedule_until_before(self):
method test_skips_and_disables_faulty_queries (line 313) | def test_skips_and_disables_faulty_queries(self):
method test_skips_disabled_schedules (line 323) | def test_skips_disabled_schedules(self):
class QueryArchiveTest (line 329) | class QueryArchiveTest(BaseTestCase):
method test_archive_query_sets_flag (line 330) | def test_archive_query_sets_flag(self):
method test_archived_query_doesnt_return_in_all (line 337) | def test_archived_query_doesnt_return_in_all(self):
method test_removes_associated_widgets_from_dashboards (line 360) | def test_removes_associated_widgets_from_dashboards(self):
method test_removes_scheduling (line 368) | def test_removes_scheduling(self):
method test_deletes_alerts (line 375) | def test_deletes_alerts(self):
class TestUnusedQueryResults (line 385) | class TestUnusedQueryResults(BaseTestCase):
method test_returns_only_unused_query_results (line 386) | def test_returns_only_unused_query_results(self):
method test_returns_only_over_a_week_old_results (line 395) | def test_returns_only_over_a_week_old_results(self):
class TestQueryAll (line 405) | class TestQueryAll(BaseTestCase):
method test_returns_only_queries_in_given_groups (line 406) | def test_returns_only_queries_in_given_groups(self):
method test_skips_drafts (line 434) | def test_skips_drafts(self):
method test_includes_drafts_of_given_user (line 438) | def test_includes_drafts_of_given_user(self):
method test_order_by_relationship (line 445) | def test_order_by_relationship(self):
method test_update_query_hash_basesql_with_options (line 459) | def test_update_query_hash_basesql_with_options(self):
method test_update_query_hash_basesql_no_options (line 467) | def test_update_query_hash_basesql_no_options(self):
method test_update_query_hash_non_basesql (line 475) | def test_update_query_hash_non_basesql(self):
method test_update_query_hash_basesql_with_parameters (line 483) | def test_update_query_hash_basesql_with_parameters(self):
class TestGroup (line 492) | class TestGroup(BaseTestCase):
method test_returns_groups_with_specified_names (line 493) | def test_returns_groups_with_specified_names(self):
method test_returns_no_groups (line 506) | def test_returns_no_groups(self):
class TestQueryResultStoreResult (line 513) | class TestQueryResultStoreResult(BaseTestCase):
method setUp (line 514) | def setUp(self):
method test_stores_the_result (line 523) | def test_stores_the_result(self):
class TestEvents (line 542) | class TestEvents(BaseTestCase):
method raw_event (line 543) | def raw_event(self):
method test_records_event (line 559) | def test_records_event(self):
method test_records_additional_properties (line 570) | def test_records_additional_properties(self):
function _set_up_dashboard_test (line 580) | def _set_up_dashboard_test(d):
class TestDashboardAll (line 608) | class TestDashboardAll(BaseTestCase):
method setUp (line 609) | def setUp(self):
method test_requires_group_or_user_id (line 613) | def test_requires_group_or_user_id(self):
method test_returns_dashboards_based_on_groups (line 619) | def test_returns_dashboards_based_on_groups(self):
method test_returns_each_dashboard_once (line 637) | def test_returns_each_dashboard_once(self):
method test_returns_dashboard_you_have_partial_access_to (line 641) | def test_returns_dashboard_you_have_partial_access_to(self):
method test_returns_dashboards_created_by_user (line 647) | def test_returns_dashboards_created_by_user(self):
method test_returns_dashboards_with_text_widgets_to_creator (line 654) | def test_returns_dashboards_with_text_widgets_to_creator(self):
method test_returns_dashboards_from_current_org_only (line 673) | def test_returns_dashboards_from_current_org_only(self):
FILE: tests/test_monitor.py
function test_rq_job_ids_uses_rq_redis_connection (line 7) | def test_rq_job_ids_uses_rq_redis_connection():
FILE: tests/test_permissions.py
class TestHasAccess (line 11) | class TestHasAccess(BaseTestCase):
method test_allows_admin_regardless_of_groups (line 12) | def test_allows_admin_regardless_of_groups(self):
method test_allows_if_user_member_in_group_with_view_access (line 18) | def test_allows_if_user_member_in_group_with_view_access(self):
method test_allows_if_user_member_in_group_with_full_access (line 23) | def test_allows_if_user_member_in_group_with_full_access(self):
method test_allows_if_user_member_in_multiple_groups (line 28) | def test_allows_if_user_member_in_multiple_groups(self):
method test_not_allows_if_not_enough_permission (line 36) | def test_not_allows_if_not_enough_permission(self):
method test_allows_access_to_query_by_query_api_key (line 44) | def test_allows_access_to_query_by_query_api_key(self):
method test_doesnt_allow_access_to_query_by_different_api_key (line 50) | def test_doesnt_allow_access_to_query_by_different_api_key(self):
method test_allows_access_to_query_by_dashboard_api_key (line 57) | def test_allows_access_to_query_by_dashboard_api_key(self):
FILE: tests/test_utils.py
class TestBuildUrl (line 36) | class TestBuildUrl(TestCase):
method test_simple_case (line 37) | def test_simple_case(self):
method test_uses_current_request_port (line 43) | def test_uses_current_request_port(self):
method test_uses_current_request_schema (line 49) | def test_uses_current_request_schema(self):
method test_skips_port_for_default_ports (line 55) | def test_skips_port_for_default_ports(self):
class TestCollectParametersFromRequest (line 74) | class TestCollectParametersFromRequest(TestCase):
method test_ignores_non_prefixed_values (line 75) | def test_ignores_non_prefixed_values(self):
method test_takes_prefixed_values (line 78) | def test_takes_prefixed_values(self):
class TestSkipNones (line 85) | class TestSkipNones(TestCase):
method test_skips_nones (line 86) | def test_skips_nones(self):
class TestJsonDumps (line 92) | class TestJsonDumps(TestCase):
method test_handles_binary (line 93) | def test_handles_binary(self):
class TestGenerateToken (line 97) | class TestGenerateToken(TestCase):
method test_format (line 98) | def test_format(self):
class TestRenderTemplate (line 103) | class TestRenderTemplate(TestCase):
method test_render (line 104) | def test_render(self):
function mock_dataframe (line 126) | def mock_dataframe():
function test_get_column_types_from_dataframe (line 141) | def test_get_column_types_from_dataframe(mock_dataframe):
function test_pandas_to_result (line 156) | def test_pandas_to_result(mock_dataframe):
FILE: tests/utils/test_json_dumps.py
class TestJsonDumps (line 5) | class TestJsonDumps(BaseTestCase):
method test_data_with_nan_is_sanitized (line 10) | def test_data_with_nan_is_sanitized(self):
FILE: viz-lib/src/components/ColorPicker/Input.tsx
function preparePresets (line 10) | function preparePresets(presetColors: any, presetColumns: any) {
function validateColor (line 25) | function validateColor(value: any, callback: any, prefix = "#") {
type OwnProps (line 35) | type OwnProps = {
type Props (line 55) | type Props = OwnProps & typeof inputDefaultProps;
function Input (line 57) | function Input({ color, presetColors, presetColumns, onChange, onPressEn...
FILE: viz-lib/src/components/ColorPicker/Label.tsx
type OwnProps (line 7) | type OwnProps = {
type Props (line 23) | type Props = OwnProps & typeof labelDefaultProps;
function Label (line 26) | function Label({ className, color, presetColors, ...props }: Props) {
FILE: viz-lib/src/components/ColorPicker/Swatch.tsx
type OwnProps (line 8) | type OwnProps = {
type Props (line 24) | type Props = OwnProps & typeof swatchDefaultProps;
function Swatch (line 27) | function Swatch({ className, color, title, size, style, ...props }: Prop...
FILE: viz-lib/src/components/ColorPicker/index.tsx
type OwnProps (line 19) | type OwnProps = {
type Props (line 61) | type Props = OwnProps & typeof colorPickerDefaultProps;
function ColorPicker (line 63) | function ColorPicker({
FILE: viz-lib/src/components/ColorPicker/utils.ts
function validateColor (line 4) | function validateColor(value: any, fallback = null) {
function getColorName (line 9) | function getColorName(color: any, presetColors: any) {
FILE: viz-lib/src/components/ErrorBoundary.tsx
type OwnErrorMessageProps (line 18) | type OwnErrorMessageProps = {
type ErrorMessageProps (line 26) | type ErrorMessageProps = OwnErrorMessageProps & typeof errorMessageDefau...
function ErrorMessage (line 28) | function ErrorMessage({ children }: ErrorMessageProps) {
type OwnErrorBoundaryProps (line 34) | type OwnErrorBoundaryProps = {
type ErrorBoundaryState (line 38) | type ErrorBoundaryState = any;
type ErrorBoundaryProps (line 40) | type ErrorBoundaryProps = OwnErrorBoundaryProps & typeof ErrorBoundary.d...
class ErrorBoundary (line 42) | class ErrorBoundary extends React.Component