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 DialogWrapperChildProps (line 9) | type DialogWrapperChildProps = { type DialogComponentType (line 13) | type DialogComponentType = React.Com... FILE: client/app/components/DialogWrapper.jsx function openDialog (line 110) | function openDialog(DialogComponent, props) { function wrap (line 217) | function wrap(DialogComponent) { FILE: client/app/components/DynamicComponent.jsx function registerComponent (line 8) | function registerComponent(name, component) { function unregisterComponent (line 20) | function unregisterComponent(name) { class DynamicComponent (line 24) | class DynamicComponent extends React.Component { method componentDidMount (line 35) | componentDidMount() { method componentWillUnmount (line 39) | componentWillUnmount() { method render (line 43) | render() { FILE: client/app/components/EditInPlace.jsx class EditInPlace (line 7) | class EditInPlace extends React.Component { method constructor (line 31) | constructor(props) { method componentDidUpdate (line 38) | componentDidUpdate(_, prevState) { method render (line 98) | render() { FILE: client/app/components/EditParameterSettingsDialog.jsx function getDefaultTitle (line 20) | function getDefaultTitle(text) { function isTypeDateRange (line 24) | function isTypeDateRange(type) { function joinExampleList (line 28) | function joinExampleList(multiValuesOptions) { function NameInput (line 33) | function NameInput({ name, type, onChange, existingNames, setValidation ... function EditParameterSettingsDialog (line 71) | function EditParameterSettingsDialog(props) { FILE: client/app/components/EditVisualizationButton/QueryControlDropdown.jsx function QueryControlDropdown (line 17) | function QueryControlDropdown(props) { FILE: client/app/components/EditVisualizationButton/QueryResultsLink.jsx function QueryResultsLink (line 5) | function QueryResultsLink(props) { FILE: client/app/components/EditVisualizationButton/index.jsx function EditVisualizationButton (line 6) | function EditVisualizationButton(props) { FILE: client/app/components/EmailSettingsWarning.jsx function EmailSettingsWarning (line 9) | function EmailSettingsWarning({ featureName, className, mode, adminOnly ... FILE: client/app/components/FavoritesControl.jsx class FavoritesControl (line 5) | class FavoritesControl extends React.Component { method toggleItem (line 17) | toggleItem(event, item, callback) { method render (line 28) | render() { FILE: client/app/components/Filters.jsx constant ALL_VALUES (line 8) | const ALL_VALUES = "###Redash::Filters::SelectAll###"; constant NONE_VALUES (line 9) | const NONE_VALUES = "###Redash::Filters::Clear###"; function createFilterChangeHandler (line 21) | function createFilterChangeHandler(filters, onChange) { function filterData (line 41) | function filterData(rows, filters = []) { function Filters (line 69) | function Filters({ filters, onChange }) { FILE: client/app/components/HelpTrigger.jsx constant DOMAIN (line 15) | const DOMAIN = "https://redash.io"; constant HELP_PATH (line 16) | const HELP_PATH = "/help"; constant IFRAME_TIMEOUT (line 17) | const IFRAME_TIMEOUT = 20000; constant IFRAME_URL_UPDATE_MESSAGE (line 18) | const IFRAME_URL_UPDATE_MESSAGE = "iframe_url"; constant TYPES (line 20) | const TYPES = mapValues( function helpTriggerWithTypes (line 75) | function helpTriggerWithTypes(types, allowedDomains = [], drawerClassNam... function HelpTrigger (line 263) | function HelpTrigger(props) { FILE: client/app/components/InputWithCopy.jsx class InputWithCopy (line 7) | class InputWithCopy extends React.Component { method constructor (line 8) | constructor(props) { method componentWillUnmount (line 16) | componentWillUnmount() { method render (line 43) | render() { FILE: client/app/components/Link.tsx function DefaultLinkComponent (line 4) | function DefaultLinkComponent({ children, ...props }: React.AnchorHTMLAt... type LinkProps (line 10) | interface LinkProps extends Omit, "op... function SelectWithVirtualScroll (line 15) | function SelectWithVirtualScroll({ options, ...props }: VirtualScrollSel... FILE: client/app/components/SettingsWrapper.jsx function wrapSettingsTab (line 8) | function wrapSettingsTab(id, options, WrappedComponent) { FILE: client/app/components/TagsList.tsx type Tag (line 11) | type Tag = { type TagsListProps (line 16) | type TagsListProps = { function TagsList (line 22) | function TagsList({ tagsUrl, showUnselectAll = false, onUpdate }: TagsLi... FILE: client/app/components/TimeAgo.jsx function toMoment (line 9) | function toMoment(value) { function TimeAgo (line 14) | function TimeAgo({ date, placeholder, autoUpdate, variation }) { FILE: client/app/components/Timer.jsx function Timer (line 6) | function Timer({ from }) { FILE: client/app/components/Tooltip.tsx function Tooltip (line 5) | function Tooltip({ title, ...restProps }: TooltipProps) { FILE: client/app/components/UserGroups.jsx function UserGroups (line 9) | function UserGroups({ groups, linkGroups, ...props }) { FILE: client/app/components/admin/Layout.jsx function Layout (line 9) | function Layout({ activeTab, children }) { FILE: client/app/components/admin/RQStatus.jsx function CounterCard (line 13) | function CounterCard({ title, value, loading }) { function WorkersTable (line 83) | function WorkersTable({ loading, items }) { function QueuesTable (line 101) | function QueuesTable({ loading, items }) { function QueryJobsTable (line 119) | function QueryJobsTable({ loading, items }) { function OtherJobsTable (line 137) | function OtherJobsTable({ loading, items }) { FILE: client/app/components/admin/StatusBlock.jsx function General (line 12) | function General({ info }) { function DatabaseMetrics (line 31) | function DatabaseMetrics({ info }) { function Queues (line 49) | function Queues({ info }) { function Manager (line 68) | function Manager({ info }) { FILE: client/app/components/cards-list/CardsList.tsx type CardsListItem (line 11) | interface CardsListItem { type CardsListProps (line 18) | interface CardsListProps { type ListItemProps (line 23) | interface ListItemProps { function ListItem (line 28) | function ListItem({ item, keySuffix }: ListItemProps) { function CardsList (line 44) | function CardsList({ items = [], showSearch = false }: CardsListProps) { FILE: client/app/components/dashboards/AddWidgetDialog.jsx function VisualizationSelect (line 13) | function VisualizationSelect({ query, visualization, onChange }) { function AddWidgetDialog (line 68) | function AddWidgetDialog({ dialog, dashboard }) { FILE: client/app/components/dashboards/AutoHeightController.js constant WIDGET_SELECTOR (line 5) | const WIDGET_SELECTOR = '[data-widgetid="{0}"]'; constant WIDGET_CONTENT_SELECTOR (line 6) | const WIDGET_CONTENT_SELECTOR = [ constant INTERVAL (line 13) | const INTERVAL = 200; class AutoHeightController (line 15) | class AutoHeightController { method constructor (line 22) | constructor(handler) { method update (line 26) | update(widgets) { FILE: client/app/components/dashboards/CreateDashboardDialog.jsx function CreateDashboardDialog (line 12) | function CreateDashboardDialog({ dialog }) { FILE: client/app/components/dashboards/DashboardGrid.jsx constant SINGLE (line 33) | const SINGLE = "single-column"; constant MULTI (line 34) | const MULTI = "multi-column"; class DashboardGrid (line 86) | class DashboardGrid extends React.Component { method normalizeFrom (line 112) | static normalizeFrom(widget) { method constructor (line 135) | constructor(props) { method componentDidMount (line 148) | componentDidMount() { method componentDidUpdate (line 157) | componentDidUpdate() { method componentWillUnmount (line 162) | componentWillUnmount() { method render (line 228) | render() { FILE: client/app/components/dashboards/EditParameterMappingsDialog.jsx function getParamValuesSnapshot (line 15) | function getParamValuesSnapshot(mappings, dashboardParameters) { class EditParameterMappingsDialog (line 35) | class EditParameterMappingsDialog extends React.Component { method constructor (line 44) | constructor(props) { method saveWidget (line 64) | saveWidget() { method updateParamMappings (line 94) | updateParamMappings(parameterMappings) { method render (line 98) | render() { FILE: client/app/components/dashboards/ExpandedWidgetDialog.jsx function ExpandedWidgetDialog (line 10) | function ExpandedWidgetDialog({ dialog, widget, filters }) { FILE: client/app/components/dashboards/TextboxDialog.jsx function TextboxDialog (line 17) | function TextboxDialog({ dialog, isNew, ...props }) { FILE: client/app/components/dashboards/dashboard-widget/RestrictedWidget.jsx function RestrictedWidget (line 4) | function RestrictedWidget(props) { FILE: client/app/components/dashboards/dashboard-widget/TextboxWidget.jsx function TextboxWidget (line 9) | function TextboxWidget(props) { FILE: client/app/components/dashboards/dashboard-widget/VisualizationWidget.jsx function visualizationWidgetMenuOptions (line 25) | function visualizationWidgetMenuOptions({ widget, canEditDashboard, onPa... function RefreshIndicator (line 75) | function RefreshIndicator({ refreshStartedAt }) { function VisualizationWidgetHeader (line 90) | function VisualizationWidgetHeader({ function VisualizationWidgetFooter (line 147) | function VisualizationWidgetFooter({ widget, isPublic, onRefresh, onExpa... class VisualizationWidget (line 211) | class VisualizationWidget extends React.Component { method constructor (line 238) | constructor(props) { method componentDidMount (line 246) | componentDidMount() { method renderVisualization (line 276) | renderVisualization() { method render (line 319) | render() { FILE: client/app/components/dashboards/dashboard-widget/Widget.jsx function WidgetDropdownButton (line 14) | function WidgetDropdownButton({ extraOptions, showDeleteOption, onDelete... function WidgetDeleteButton (line 46) | function WidgetDeleteButton({ onClick }) { class Widget (line 64) | class Widget extends React.Component { method componentDidMount (line 92) | componentDidMount() { method render (line 111) | render() { FILE: client/app/components/dynamic-form/DynamicForm.jsx function normalizeEmptyValuesToNull (line 39) | function normalizeEmptyValuesToNull(fields, values) { function DynamicFormFields (line 49) | function DynamicFormFields({ fields, feedbackIcons, form }) { function DynamicFormActions (line 107) | function DynamicFormActions({ actions, isFormDirty }) { function DynamicForm (line 143) | function DynamicForm({ FILE: client/app/components/dynamic-form/DynamicFormField.jsx function DynamicFormField (line 62) | function DynamicFormField({ form, field, ...otherProps }) { FILE: client/app/components/dynamic-form/dynamicFormHelper.js function orderedInputs (line 4) | function orderedInputs(properties, order, targetOptions) { function normalizeSchema (line 32) | function normalizeSchema(configurationSchema) { function setDefaultValueToFields (line 67) | function setDefaultValueToFields(configurationSchema, options = {}) { function getFields (line 83) | function getFields(type = {}, target = { options: {} }) { function updateTargetWithValues (line 109) | function updateTargetWithValues(target, values) { function getBase64 (line 118) | function getBase64(file) { function hasFilledExtraField (line 127) | function hasFilledExtraField(type, target) { FILE: client/app/components/dynamic-form/fields/AceEditorField.jsx function AceEditorField (line 4) | function AceEditorField({ form, field, ...otherProps }) { FILE: client/app/components/dynamic-form/fields/CheckboxField.jsx function CheckboxField (line 5) | function CheckboxField({ form, field, ...otherProps }) { FILE: client/app/components/dynamic-form/fields/ContentField.jsx function ContentField (line 1) | function ContentField({ field }) { FILE: client/app/components/dynamic-form/fields/FileField.jsx function FileField (line 6) | function FileField({ form, field, ...otherProps }) { FILE: client/app/components/dynamic-form/fields/InputField.jsx function InputField (line 4) | function InputField({ form, field, ...otherProps }) { FILE: client/app/components/dynamic-form/fields/NumberField.jsx function NumberField (line 4) | function NumberField({ form, field, ...otherProps }) { FILE: client/app/components/dynamic-form/fields/SelectField.jsx function SelectField (line 4) | function SelectField({ form, field, ...otherProps }) { FILE: client/app/components/dynamic-form/fields/TextAreaField.jsx function TextAreaField (line 4) | function TextAreaField({ form, field, ...otherProps }) { FILE: client/app/components/dynamic-form/getFieldLabel.js function getFieldLabel (line 3) | function getFieldLabel(field) { FILE: client/app/components/dynamic-parameters/DateParameter.jsx constant DYNAMIC_DATE_OPTIONS (line 6) | const DYNAMIC_DATE_OPTIONS = [ function DateParameter (line 25) | function DateParameter(props) { FILE: client/app/components/dynamic-parameters/DateRangeParameter.jsx constant DYNAMIC_DATE_OPTIONS (line 7) | const DYNAMIC_DATE_OPTIONS = [ constant DYNAMIC_DATETIME_OPTIONS (line 91) | const DYNAMIC_DATETIME_OPTIONS = [ function DateRangeParameter (line 105) | function DateRangeParameter(props) { FILE: client/app/components/dynamic-parameters/DynamicButton.jsx function DynamicButton (line 18) | function DynamicButton({ options, selectedDynamicValue, onSelect, enable... FILE: client/app/components/dynamic-parameters/DynamicDatePicker.jsx class DynamicDatePicker (line 13) | class DynamicDatePicker extends React.Component { method constructor (line 44) | constructor(props) { method render (line 65) | render() { FILE: client/app/components/dynamic-parameters/DynamicDateRangePicker.jsx function isValidDateRangeValue (line 13) | function isValidDateRangeValue(value) { class DynamicDateRangePicker (line 17) | class DynamicDateRangePicker extends React.Component { method constructor (line 48) | constructor(props) { method render (line 69) | render() { FILE: client/app/components/empty-state/EmptyState.d.ts type DefaultStepKey (line 3) | type DefaultStepKey = "dataSources" | "queries" | "alerts" | "dashboards... type StepKey (line 4) | type StepKey = DefaultStepKey | K; type StepItem (line 6) | interface StepItem { type EmptyStateHelpMessageProps (line 11) | interface EmptyStateHelpMessageProps { type EmptyStateProps (line 17) | interface EmptyStateProps { class EmptyState (line 36) | class EmptyState extends React.Component> {} type StepProps (line 40) | interface StepProps { FILE: client/app/components/empty-state/EmptyState.jsx function Step (line 15) | function Step({ show, completed, text, url, urlText, onClick }) { function EmptyStateHelpMessage (line 47) | function EmptyStateHelpMessage({ helpTriggerType }) { function EmptyState (line 62) | function EmptyState({ FILE: client/app/components/groups/CreateGroupDialog.jsx class CreateGroupDialog (line 6) | class CreateGroupDialog extends React.Component { method render (line 21) | render() { FILE: client/app/components/groups/DeleteGroupButton.jsx function deleteGroup (line 10) | function deleteGroup(event, group, onGroupDeleted) { function DeleteGroupButton (line 26) | function DeleteGroupButton({ group, title, onClick, children, ...props }) { FILE: client/app/components/groups/DetailsPageSidebar.jsx function DetailsPageSidebar (line 12) | function DetailsPageSidebar({ FILE: client/app/components/groups/GroupName.jsx function updateGroupName (line 7) | function updateGroupName(group, name, onChange) { function GroupName (line 13) | function GroupName({ group, onChange, ...props }) { FILE: client/app/components/groups/ListItemAddon.jsx function ListItemAddon (line 5) | function ListItemAddon({ isSelected, isStaged, alreadyInGroup, deselecte... FILE: client/app/components/items-list/ItemsList.tsx type PaginationOptions (line 8) | interface PaginationOptions { type SearchOptions (line 13) | interface SearchOptions { type Controller (line 17) | interface Controller { type GenericItemSourceError (line 79) | type GenericItemSourceError = AxiosError | Error; type ItemsListWrapperProps (line 81) | interface ItemsListWrapperProps { type ItemsListWrapperState (line 86) | interface ItemsListWrapperState extends Controller { type ItemsSource (line 91) | type ItemsSource = any; type StateStorage (line 92) | type StateStorage = any; type ItemsListWrappedComponentProps (line 94) | interface ItemsListWrappedComponentProps { function wrap (line 98) | function wrap( FILE: client/app/components/items-list/classes/ItemsFetcher.js class ItemsFetcher (line 3) | class ItemsFetcher { method _getRequest (line 4) | _getRequest(state, context) { method _processResults (line 8) | _processResults({ results, count }, state, context) { method constructor (line 15) | constructor({ getRequest, doRequest, processResults }) { method fetch (line 21) | fetch(changes, state, context) { class PlainListFetcher (line 29) | class PlainListFetcher extends ItemsFetcher { method _getRequest (line 32) | _getRequest({ searchTerm, selectedTags }, context) { method _processResults (line 42) | _processResults(data, { paginator, sorter }, context) { method fetch (line 52) | fetch(changes, state, context) { class PaginatedListFetcher (line 72) | class PaginatedListFetcher extends ItemsFetcher { method _getRequest (line 73) | _getRequest({ paginator, sorter, searchTerm, selectedTags }, context) { FILE: client/app/components/items-list/classes/ItemsSource.d.ts type ItemsSourceOptions (line 1) | interface ItemsSourceOptions extends Partial { type GetResourceContext (line 9) | interface GetResourceContext extends ItemsSourceState { type GetResourceRequest (line 16) | type GetResourceRequest = any; type ItemsPage (line 18) | interface ItemsPage { type ResourceItemsSourceOptions (line 25) | interface ResourceItemsSourceOptions extends It... type ItemsSourceState (line 30) | type ItemsSourceState = { class ItemsSource (line 45) | class ItemsSource { class ResourceItemsSource (line 49) | class ResourceItemsSource { FILE: client/app/components/items-list/classes/ItemsSource.js class ItemsSource (line 6) | class ItemsSource { method _beforeUpdate (line 17) | _beforeUpdate() { method _afterUpdate (line 24) | _afterUpdate() { method _changed (line 32) | _changed(changes) { method constructor (line 64) | constructor({ method getState (line 88) | getState() { method setState (line 103) | setState(state) { class ResourceItemsSource (line 168) | class ResourceItemsSource extends ItemsSource { method constructor (line 169) | constructor({ getResource, getItemProcessor, ...rest }) { FILE: client/app/components/items-list/classes/Paginator.js class Paginator (line 3) | class Paginator { method totalPages (line 10) | get totalPages() { method setPage (line 14) | setPage(value, validate = true) { method setItemsPerPage (line 26) | setItemsPerPage(value, validate = true) { method setTotalCount (line 37) | setTotalCount(value, validate = true) { method constructor (line 48) | constructor({ page, itemsPerPage, totalCount, validate = true } = {}) { method getItemsForPage (line 54) | getItemsForPage(items) { FILE: client/app/components/items-list/classes/Sorter.js constant ORDER_BY_REVERSE (line 3) | const ORDER_BY_REVERSE = "-"; function compile (line 5) | function compile(field, reverse) { function parse (line 12) | function parse(compiled) { class Sorter (line 22) | class Sorter { method compiled (line 29) | get compiled() { method compiled (line 33) | set compiled(value) { method setField (line 39) | setField(value) { method setReverse (line 43) | setReverse(value) { method constructor (line 47) | constructor({ orderByField, orderByReverse } = {}, sortByIteratees = u... method toggleField (line 53) | toggleField(field) { method sort (line 65) | sort(items) { FILE: client/app/components/items-list/classes/StateStorage.js class StateStorage (line 6) | class StateStorage { method constructor (line 7) | constructor(state = {}) { method getState (line 11) | getState() { method setState (line 23) | setState() {} class UrlStateStorage (line 26) | class UrlStateStorage extends StateStorage { method getState (line 27) | getState() { method setState (line 49) | setState({ page, itemsPerPage, orderByField, orderByReverse, searchTer... FILE: client/app/components/items-list/components/EmptyState.jsx function EmptyState (line 5) | function EmptyState(props) { FILE: client/app/components/items-list/components/ItemsTable.jsx function sortable (line 13) | function sortable(...args) { method favorites (line 18) | favorites(overrides) { method avatar (line 27) | avatar(overrides, formatTitle) { method date (line 44) | date(overrides) { method dateTime (line 52) | dateTime(overrides) { method duration (line 60) | duration(overrides) { method timeAgo (line 70) | timeAgo(overrides, timeAgoCustomProps = undefined) { method custom (line 78) | custom(render, overrides) { class ItemsTable (line 94) | class ItemsTable extends React.Component { method prepareColumns (line 130) | prepareColumns() { method render (line 164) | render() { FILE: client/app/components/items-list/components/LoadingState.jsx function LoadingState (line 5) | function LoadingState(props) { FILE: client/app/components/items-list/components/Sidebar.jsx function SearchInput (line 13) | function SearchInput({ placeholder, value, showIcon, onChange, label }) { function Menu (line 61) | function Menu({ items, selected }) { function MenuIcon (line 109) | function MenuIcon({ icon }) { function ProfileImage (line 125) | function ProfileImage({ user }) { function Tags (line 143) | function Tags({ url, onChange, showUnselectAll }) { FILE: client/app/components/items-list/hooks/useItemsListExtraActions.js function useItemsListExtraActions (line 6) | function useItemsListExtraActions(controller, listColumns, ExtraActionsC... FILE: client/app/components/layouts/ContentWithSidebar.jsx function Sidebar (line 19) | function Sidebar({ className, children, ...props }) { function Content (line 32) | function Content({ className, children, ...props }) { function Layout (line 45) | function Layout({ children, className = undefined, ...props }) { FILE: client/app/components/proptypes.js function checkMoment (line 93) | function checkMoment(isRequired, props, propName, componentName) { FILE: client/app/components/queries/AddToDashboardDialog.jsx function AddToDashboardDialog (line 18) | function AddToDashboardDialog({ dialog, visualization }) { FILE: client/app/components/queries/ApiKeyDialog/index.jsx function ApiKeyDialog (line 17) | function ApiKeyDialog({ dialog, ...props }) { FILE: client/app/components/queries/EmbedQueryDialog.jsx class EmbedQueryDialog (line 16) | class EmbedQueryDialog extends React.Component { method constructor (line 29) | constructor(props) { method render (line 44) | render() { FILE: client/app/components/queries/QueryEditor/AutoLimitCheckbox.jsx function AutoLimitCheckbox (line 7) | function AutoLimitCheckbox({ available, checked, onChange }) { FILE: client/app/components/queries/QueryEditor/AutocompleteToggle.jsx function AutocompleteToggle (line 8) | function AutocompleteToggle({ available, enabled, onToggle }) { FILE: client/app/components/queries/QueryEditor/QueryEditorControls.jsx function ButtonTooltip (line 13) | function ButtonTooltip({ title, shortcut, ...props }) { function EditorControl (line 36) | function EditorControl({ FILE: client/app/components/queries/QueryEditor/ace.js function defineDummySnippets (line 18) | function defineDummySnippets(mode) { function buildTableColumnKeywords (line 34) | function buildTableColumnKeywords(table) { function buildKeywordsFromSchema (line 48) | function buildKeywordsFromSchema(schema) { function updateSchemaCompleter (line 81) | function updateSchemaCompleter(editorKey, schema = null) { FILE: client/app/components/queries/QueryEditor/index.jsx function resize (line 59) | function resize() { FILE: client/app/components/queries/ScheduleDialog.jsx constant WEEKDAYS_SHORT (line 16) | const WEEKDAYS_SHORT = moment.weekdaysShort(); constant WEEKDAYS_FULL (line 17) | const WEEKDAYS_FULL = moment.weekdays(); constant DATE_FORMAT (line 18) | const DATE_FORMAT = "YYYY-MM-DD"; constant HOUR_FORMAT (line 19) | const HOUR_FORMAT = "HH:mm"; function TimeEditor (line 22) | function TimeEditor(props) { class ScheduleDialog (line 52) | class ScheduleDialog extends React.Component { method getState (line 65) | getState() { method intervals (line 81) | get intervals() { method newSchedule (line 98) | set newSchedule(newProps) { method save (line 172) | save() { method render (line 191) | render() { FILE: client/app/components/queries/ScheduleDialog.test.js function getWrapper (line 35) | function getWrapper(schedule = {}, { onConfirm, onCancel, ...props } = {... function findByTestID (line 61) | function findByTestID(wrapper, id) { FILE: client/app/components/queries/SchedulePhrase.jsx class SchedulePhrase (line 10) | class SchedulePhrase extends React.Component { method content (line 24) | get content() { method render (line 46) | render() { FILE: client/app/components/queries/SchemaBrowser.jsx function SchemaItem (line 31) | function SchemaItem({ item, expanded, onToggle, onSelect, ...props }) { function SchemaLoadingState (line 132) | function SchemaLoadingState() { function SchemaList (line 140) | function SchemaList({ loading, schema, expandedFlags, onTableExpand, onI... function applyFilterOnSchema (line 187) | function applyFilterOnSchema(schema, filterString) { function SchemaBrowser (line 223) | function SchemaBrowser({ FILE: client/app/components/queries/editor-components/databricks/DatabricksSchemaBrowser.jsx function DatabricksSchemaBrowser (line 16) | function DatabricksSchemaBrowser({ FILE: client/app/components/queries/editor-components/databricks/useDatabricksSchema.js function getDatabases (line 6) | function getDatabases(dataSource, refresh = false) { function getSchema (line 17) | function getSchema(dataSource, databaseName, refresh = false) { function addDisplayNameWithoutDatabaseName (line 28) | function addDisplayNameWithoutDatabaseName(schema, databaseName) { function useDatabricksSchema (line 43) | function useDatabricksSchema(dataSource, options = null, onOptionsUpdate... FILE: client/app/components/queries/editor-components/editorComponents.js function registerEditorComponent (line 10) | function registerEditorComponent(componentName, component, dataSourceTyp... function getEditorComponents (line 24) | function getEditorComponents(dataSourceType) { FILE: client/app/components/query-snippets/QuerySnippetDialog.jsx function QuerySnippetDialog (line 10) | function QuerySnippetDialog({ querySnippet, dialog, readOnly }) { FILE: client/app/components/tags-control/EditTagsDialog.jsx function EditTagsDialog (line 8) | function EditTagsDialog({ dialog, tags, getAvailableTags }) { FILE: client/app/components/tags-control/TagsControl.jsx class TagsControl (line 8) | class TagsControl extends React.Component { method renderEditButton (line 35) | renderEditButton() { method render (line 58) | render() { function modelTagsControl (line 78) | function modelTagsControl({ archivedTooltip }) { FILE: client/app/components/visualizations/EditVisualizationDialog.jsx function updateQueryVisualizations (line 24) | function updateQueryVisualizations(query, visualization) { function saveVisualization (line 35) | function saveVisualization(visualization) { function confirmDialogClose (line 53) | function confirmDialogClose(isDirty) { function EditVisualizationDialog (line 70) | function EditVisualizationDialog({ dialog, visualization, query, queryRe... FILE: client/app/components/visualizations/VisualizationName.jsx function VisualizationName (line 6) | function VisualizationName({ visualization }) { FILE: client/app/components/visualizations/VisualizationRenderer.jsx function combineFilters (line 10) | function combineFilters(localFilters, globalFilters) { function areFiltersEqual (line 28) | function areFiltersEqual(a, b) { function VisualizationRenderer (line 39) | function VisualizationRenderer(props) { FILE: client/app/components/visualizations/visualizationComponents.jsx function wrapComponentWithSettings (line 12) | function wrapComponentWithSettings(WrappedComponent) { FILE: client/app/config/index.js function requireImages (line 33) | function requireImages() { function registerExtensions (line 39) | function registerExtensions() { FILE: client/app/lib/accessibility.ts type SrNotifyProps (line 3) | interface SrNotifyProps { function srNotify (line 10) | function srNotify({ text, expiry = 1000, container = document.body, poli... FILE: client/app/lib/calculateTextWidth.ts function calculateTextWidth (line 5) | function calculateTextWidth(text: string, container = document.body) { FILE: client/app/lib/hooks/useFullscreenHandler.js function useFullscreenHandler (line 5) | function useFullscreenHandler() { FILE: client/app/lib/hooks/useImmutableCallback.js function useImmutableCallback (line 9) | function useImmutableCallback(callback) { FILE: client/app/lib/hooks/useLazyRef.ts function useLazyRef (line 3) | function useLazyRef(getInitialValue: () => T) { FILE: client/app/lib/hooks/useSearchResults.js function useSearchResults (line 4) | function useSearchResults(fetch, { initialResults = null, debounceTimeou... FILE: client/app/lib/hooks/useUniqueId.ts function useUniqueId (line 4) | function useUniqueId(prefix: string) { FILE: client/app/lib/localOptions.js constant PREFIX (line 1) | const PREFIX = "localOptions:"; function get (line 3) | function get(key, defaultValue = undefined) { function set (line 11) | function set(key, value) { FILE: client/app/lib/pagination/paginator.js class Paginator (line 3) | class Paginator { method constructor (line 4) | constructor(rows, { page = 1, itemsPerPage = 20, totalCount = undefine... method setPage (line 12) | setPage(page) { method getPageRows (line 16) | getPageRows() { method updateRows (line 23) | updateRows(rows, totalCount = undefined) { method orderBy (line 32) | orderBy(column) { FILE: client/app/lib/queryFormat.ts type QueryFormatterMap (line 4) | interface QueryFormatterMap { function isFormatQueryAvailable (line 13) | function isFormatQueryAvailable(syntax: string) { function formatQuery (line 17) | function formatQuery(queryText: string, syntax: string) { FILE: client/app/lib/useQueryResultData.js function getQueryResultData (line 4) | function getQueryResultData(queryResult, queryResultStatus = null) { function useQueryResultData (line 20) | function useQueryResultData(queryResult) { FILE: client/app/lib/utils.js function formatDateTimeValue (line 23) | function formatDateTimeValue(value, format) { function formatDateTime (line 36) | function formatDateTime(value) { function formatDateTimePrecise (line 40) | function formatDateTimePrecise(value, withMilliseconds = false) { function formatDate (line 44) | function formatDate(value) { function localizeTime (line 48) | function localizeTime(time) { function secondsToInterval (line 58) | function secondsToInterval(count) { function pluralize (line 83) | function pluralize(text, count) { function durationHumanize (line 88) | function durationHumanize(durationInSeconds, options = {}) { function toHuman (line 102) | function toHuman(text) { function remove (line 106) | function remove(items, item) { function formatNumber (line 136) | function formatNumber(value, fractionDigits = 3) { function prettyNumberWithUnit (line 148) | function prettyNumberWithUnit(value, divisor, units = [], fractionDigits) { function prettySizeWithUnit (line 173) | function prettySizeWithUnit(bytes, fractionDigits) { function prettySize (line 177) | function prettySize(bytes) { function join (line 185) | function join(arr) { function formatColumnValue (line 193) | function formatColumnValue(value, columnType = null) { FILE: client/app/pages/admin/Jobs.jsx class Jobs (line 17) | class Jobs extends React.Component { method componentDidMount (line 31) | componentDidMount() { method componentWillUnmount (line 36) | componentWillUnmount() { method render (line 81) | render() { FILE: client/app/pages/admin/OutdatedQueries.jsx class OutdatedQueries (line 25) | class OutdatedQueries extends React.Component { method componentDidMount (line 75) | componentDidMount() { method componentWillUnmount (line 80) | componentWillUnmount() { method render (line 91) | render() { method doRequest (line 145) | doRequest(request, context) { method processResults (line 156) | processResults(items) { FILE: client/app/pages/admin/SystemStatus.jsx class SystemStatus (line 15) | class SystemStatus extends React.Component { method componentDidMount (line 33) | componentDidMount() { method componentWillUnmount (line 38) | componentWillUnmount() { method render (line 61) | render() { FILE: client/app/pages/alert/Alert.jsx constant MODES (line 21) | const MODES = { function getDefaultName (line 29) | function getDefaultName(alert) { class Alert (line 36) | class Alert extends React.Component { method componentDidMount (line 59) | componentDidMount() { method componentWillUnmount (line 106) | componentWillUnmount() { method render (line 229) | render() { FILE: client/app/pages/alert/AlertEdit.jsx class AlertEdit (line 19) | class AlertEdit extends React.Component { method componentDidMount (line 26) | componentDidMount() { method componentWillUnmount (line 30) | componentWillUnmount() { method render (line 47) | render() { FILE: client/app/pages/alert/AlertNew.jsx class AlertNew (line 17) | class AlertNew extends React.Component { method render (line 29) | render() { FILE: client/app/pages/alert/AlertView.jsx function AlertState (line 24) | function AlertState({ state, lastTriggered }) { class AlertView (line 51) | class AlertView extends React.Component { method render (line 63) | render() { FILE: client/app/pages/alert/components/AlertDestinations.jsx constant USER_EMAIL_DEST_ID (line 24) | const USER_EMAIL_DEST_ID = -1; function normalizeSub (line 26) | function normalizeSub(sub) { function ListItem (line 38) | function ListItem({ destination: { name, type }, user, unsubscribe }) { class AlertDestinations (line 66) | class AlertDestinations extends React.Component { method componentDidMount (line 76) | componentDidMount() { method render (line 175) | render() { FILE: client/app/pages/alert/components/Criteria.jsx constant CONDITIONS (line 14) | const CONDITIONS = { constant VALID_STRING_CONDITIONS (line 23) | const VALID_STRING_CONDITIONS = ["==", "!="]; function DisabledInput (line 25) | function DisabledInput({ children, minWidth }) { function Criteria (line 38) | function Criteria({ columnNames, resultValues, alertOptions, onChange, e... FILE: client/app/pages/alert/components/HorizontalFormItem.jsx function HorizontalFormItem (line 6) | function HorizontalFormItem({ children, label, className, ...props }) { FILE: client/app/pages/alert/components/MenuButton.jsx function MenuButton (line 14) | function MenuButton({ doDelete, canEdit, mute, unmute, evaluate, muted }) { FILE: client/app/pages/alert/components/NotificationTemplate.jsx function normalizeCustomTemplateData (line 16) | function normalizeCustomTemplateData(alert, query, columnNames, resultVa... function NotificationTemplate (line 33) | function NotificationTemplate({ alert, query, columnNames, resultValues,... FILE: client/app/pages/alert/components/Query.jsx function QueryFormItem (line 17) | function QueryFormItem({ query, queryResult, onChange, editMode }) { FILE: client/app/pages/alert/components/Rearm.jsx constant DURATIONS (line 10) | const DURATIONS = [ function RearmByDuration (line 18) | function RearmByDuration({ value, onChange, editMode }) { function RearmEditor (line 79) | function RearmEditor({ value, onChange }) { function RearmViewer (line 114) | function RearmViewer({ value }) { function Rearm (line 138) | function Rearm({ editMode, ...props }) { FILE: client/app/pages/alert/components/Title.jsx function Title (line 10) | function Title({ alert, editMode, name, onChange, children }) { FILE: client/app/pages/alerts/AlertsList.jsx constant STATE_CLASS (line 19) | const STATE_CLASS = { class AlertsList (line 25) | class AlertsList extends React.Component { method render (line 80) | render() { method getRequest (line 140) | getRequest() { method getResource (line 143) | getResource() { FILE: client/app/pages/dashboards/DashboardList.jsx function DashboardListExtraActions (line 79) | function DashboardListExtraActions(props) { function DashboardList (line 83) | function DashboardList({ controller }) { method getResource (line 172) | getResource({ params: { currentPage } }) { method getItemProcessor (line 179) | getItemProcessor() { FILE: client/app/pages/dashboards/DashboardPage.jsx function DashboardSettings (line 27) | function DashboardSettings({ dashboardConfiguration }) { function AddWidgetContainer (line 46) | function AddWidgetContainer({ dashboardConfiguration, className, ...prop... function DashboardComponent (line 74) | function DashboardComponent(props) { function DashboardPage (line 173) | function DashboardPage({ dashboardSlug, dashboardId, onError }) { FILE: client/app/pages/dashboards/PublicDashboardPage.jsx function PublicDashboard (line 22) | function PublicDashboard({ dashboard }) { class PublicDashboardPage (line 59) | class PublicDashboardPage extends React.Component { method componentDidMount (line 74) | componentDidMount() { method render (line 80) | render() { FILE: client/app/pages/dashboards/components/DashboardHeader.jsx function getDashboardTags (line 24) | function getDashboardTags() { function buttonType (line 28) | function buttonType(value) { function DashboardPageTitle (line 32) | function DashboardPageTitle({ dashboardConfiguration }) { function RefreshButton (line 66) | function RefreshButton({ dashboardConfiguration }) { function DashboardMoreOptionsButton (line 114) | function DashboardMoreOptionsButton({ dashboardConfiguration }) { function DashboardControl (line 183) | function DashboardControl({ dashboardConfiguration, headerExtra }) { function DashboardEditControl (line 253) | function DashboardEditControl({ dashboardConfiguration, headerExtra }) { function DashboardHeader (line 302) | function DashboardHeader({ dashboardConfiguration, headerExtra }) { FILE: client/app/pages/dashboards/components/DashboardListEmptyState.tsx type DashboardListEmptyStateProps (line 12) | interface DashboardListEmptyStateProps { function DashboardListEmptyState (line 18) | function DashboardListEmptyState({ page, searchTerm, selectedTags }: Das... FILE: client/app/pages/dashboards/components/ShareDashboardDialog.jsx constant API_SHARE_URL (line 14) | const API_SHARE_URL = "api/dashboards/{id}/share"; class ShareDashboardDialog (line 16) | class ShareDashboardDialog extends React.Component { method constructor (line 29) | constructor(props) { method headerContent (line 41) | static get headerContent() { method render (line 96) | render() { FILE: client/app/pages/dashboards/hooks/useDashboard.js function getAffectedWidgets (line 23) | function getAffectedWidgets(widgets, updatedParameters = []) { function useDashboard (line 38) | function useDashboard(dashboardData) { FILE: client/app/pages/dashboards/hooks/useDataSources.js function useDataSources (line 8) | function useDataSources() { FILE: client/app/pages/dashboards/hooks/useDuplicateDashboard.js function keepCurrentUrlParams (line 7) | function keepCurrentUrlParams(targetUrl) { function useDuplicateDashboard (line 18) | function useDuplicateDashboard(dashboard) { FILE: client/app/pages/dashboards/hooks/useEditModeHandler.js function getChangedPositions (line 12) | function getChangedPositions(widgets, nextPositions = {}) { function useEditModeHandler (line 20) | function useEditModeHandler(canEditDashboard, widgets) { FILE: client/app/pages/dashboards/hooks/useRefreshRateHandler.js function getLimitedRefreshRate (line 7) | function getLimitedRefreshRate(refreshRate) { function getRefreshRateFromUrl (line 12) | function getRefreshRateFromUrl() { function useRefreshRateHandler (line 17) | function useRefreshRateHandler(refreshDashboard) { FILE: client/app/pages/data-sources/DataSourcesList.jsx function DataSourcesListComponent (line 21) | function DataSourcesListComponent({ dataSources, onClickCreate }) { class DataSourcesList (line 47) | class DataSourcesList extends React.Component { method componentDidMount (line 66) | componentDidMount() { method componentWillUnmount (line 90) | componentWillUnmount() { method render (line 130) | render() { FILE: client/app/pages/data-sources/EditDataSource.jsx class EditDataSource (line 18) | class EditDataSource extends React.Component { method componentDidMount (line 34) | componentDidMount() { method renderForm (line 102) | renderForm() { method render (line 139) | render() { FILE: client/app/pages/destinations/DestinationsList.jsx class DestinationsList (line 19) | class DestinationsList extends React.Component { method componentDidMount (line 36) | componentDidMount() { method renderDestinations (line 88) | renderDestinations() { method render (line 113) | render() { FILE: client/app/pages/destinations/EditDestination.jsx class EditDestination (line 17) | class EditDestination extends React.Component { method componentDidMount (line 33) | componentDidMount() { method renderForm (line 80) | renderForm() { method render (line 105) | render() { FILE: client/app/pages/groups/GroupDataSources.jsx class GroupDataSources (line 33) | class GroupDataSources extends React.Component { method componentDidMount (line 101) | componentDidMount() { method render (line 172) | render() { method getRequest (line 237) | getRequest(unused, { params: { groupId } }) { method getResource (line 240) | getResource() { FILE: client/app/pages/groups/GroupMembers.jsx class GroupMembers (line 30) | class GroupMembers extends React.Component { method componentDidMount (line 82) | componentDidMount() { method render (line 135) | render() { method getRequest (line 200) | getRequest(unused, { params: { groupId } }) { method getResource (line 203) | getResource() { FILE: client/app/pages/groups/GroupsList.jsx class GroupsList (line 25) | class GroupsList extends React.Component { method render (line 88) | render() { method getRequest (line 143) | getRequest() { method getResource (line 146) | getResource() { FILE: client/app/pages/home/Home.jsx function DeprecatedEmbedFeatureAlert (line 22) | function DeprecatedEmbedFeatureAlert() { function EmailNotVerifiedAlert (line 45) | function EmailNotVerifiedAlert() { function Home (line 70) | function Home() { FILE: client/app/pages/home/components/FavoritesList.jsx function FavoriteList (line 11) | function FavoriteList({ title, resource, itemUrl, emptyState }) { function DashboardAndQueryFavoritesList (line 55) | function DashboardAndQueryFavoritesList() { FILE: client/app/pages/queries-list/QueriesList.jsx function QueriesListExtraActions (line 90) | function QueriesListExtraActions(props) { function QueriesList (line 94) | function QueriesList({ controller }) { method getResource (line 205) | getResource({ params: { currentPage } }) { method getItemProcessor (line 213) | getItemProcessor() { FILE: client/app/pages/queries-list/QueriesListEmptyState.jsx function QueriesListEmptyState (line 11) | function QueriesListEmptyState({ page, searchTerm, selectedTags }) { FILE: client/app/pages/queries/QuerySource.jsx function chooseDataSourceId (line 49) | function chooseDataSourceId(dataSourceIds, availableDataSources) { function QuerySource (line 54) | function QuerySource(props) { FILE: client/app/pages/queries/QueryView.jsx function QueryView (line 43) | function QueryView(props) { FILE: client/app/pages/queries/VisualizationEmbed.jsx function VisualizationEmbedHeader (line 35) | function VisualizationEmbedHeader({ queryName, queryDescription, visuali... function VisualizationEmbedFooter (line 59) | function VisualizationEmbedFooter({ function VisualizationEmbed (line 160) | function VisualizationEmbed({ queryId, visualizationId, apiKey, onError ... FILE: client/app/pages/queries/components/QueryExecutionMetadata.jsx function QueryExecutionMetadata (line 16) | function QueryExecutionMetadata({ FILE: client/app/pages/queries/components/QueryExecutionStatus.jsx function QueryExecutionStatus (line 8) | function QueryExecutionStatus({ status, updatedAt, error, isCancelling, ... FILE: client/app/pages/queries/components/QueryMetadata.jsx function QueryMetadata (line 12) | function QueryMetadata({ query, dataSource, layout, onEditSchedule }) { FILE: client/app/pages/queries/components/QueryPageHeader.jsx function getQueryTags (line 27) | function getQueryTags() { function createMenu (line 31) | function createMenu(menu) { function QueryPageHeader (line 65) | function QueryPageHeader({ FILE: client/app/pages/queries/components/QuerySourceAlerts.jsx function QuerySourceAlerts (line 13) | function QuerySourceAlerts({ query, dataSourcesAvailable }) { FILE: client/app/pages/queries/components/QuerySourceDropdown.jsx function QuerySourceDropdown (line 9) | function QuerySourceDropdown(props) { FILE: client/app/pages/queries/components/QuerySourceDropdownItem.jsx function QuerySourceDropdownItem (line 6) | function QuerySourceDropdownItem({ dataSource, children }) { FILE: client/app/pages/queries/components/QuerySourceTypeIcon.jsx function QuerySourceTypeIcon (line 4) | function QuerySourceTypeIcon(props) { FILE: client/app/pages/queries/components/QueryViewButton.jsx function QueryViewButton (line 7) | function QueryViewButton({ title, shortcut, disabled, children, onClick,... FILE: client/app/pages/queries/components/QueryVisualizationTabs.jsx function EmptyState (line 16) | function EmptyState({ title, message, refreshButton }) { function TabWithDeleteButton (line 41) | function TabWithDeleteButton({ visualizationName, canDelete, onDelete, .... function QueryVisualizationTabs (line 86) | function QueryVisualizationTabs({ FILE: client/app/pages/queries/components/wrapQueryPage.jsx function wrapQueryPage (line 7) | function wrapQueryPage(WrappedComponent) { FILE: client/app/pages/queries/hooks/useAddNewParameterDialog.js function useAddNewParameterDialog (line 6) | function useAddNewParameterDialog(query, onParameterAdded) { FILE: client/app/pages/queries/hooks/useAddToDashboardDialog.js function useAddToDashboardDialog (line 5) | function useAddToDashboardDialog(query) { FILE: client/app/pages/queries/hooks/useAddVisualizationDialog.js function useAddVisualizationDialog (line 5) | function useAddVisualizationDialog(query, queryResult, saveQuery, onChan... FILE: client/app/pages/queries/hooks/useApiKeyDialog.js function useApiKeyDialog (line 5) | function useApiKeyDialog(query, onChange) { FILE: client/app/pages/queries/hooks/useArchiveQuery.jsx function confirmArchive (line 8) | function confirmArchive() { function doArchiveQuery (line 32) | function doArchiveQuery(query) { function useArchiveQuery (line 43) | function useArchiveQuery(query, onChange) { FILE: client/app/pages/queries/hooks/useAutoLimitFlags.js function isAutoLimitAvailable (line 5) | function isAutoLimitAvailable(dataSource) { function useAutoLimitFlags (line 9) | function useAutoLimitFlags(dataSource, query, setQuery) { FILE: client/app/pages/queries/hooks/useAutocompleteFlags.js function useAutocompleteFlags (line 4) | function useAutocompleteFlags(schema) { FILE: client/app/pages/queries/hooks/useDataSourceSchema.js function getSchema (line 5) | function getSchema(dataSource, refresh = undefined) { function useDataSourceSchema (line 16) | function useDataSourceSchema(dataSource) { FILE: client/app/pages/queries/hooks/useDeleteVisualization.js function useDeleteVisualization (line 7) | function useDeleteVisualization(query, onChange) { FILE: client/app/pages/queries/hooks/useDuplicateQuery.js function keepCurrentUrlParams (line 7) | function keepCurrentUrlParams(targetUrl) { function useDuplicateQuery (line 18) | function useDuplicateQuery(query) { FILE: client/app/pages/queries/hooks/useEditScheduleDialog.js function useEditScheduleDialog (line 10) | function useEditScheduleDialog(query, onChange) { FILE: client/app/pages/queries/hooks/useEditVisualizationDialog.js function useEditVisualizationDialog (line 6) | function useEditVisualizationDialog(query, queryResult, onChange) { FILE: client/app/pages/queries/hooks/useEmbedDialog.js function useEmbedDialog (line 5) | function useEmbedDialog(query) { FILE: client/app/pages/queries/hooks/usePermissionsEditorDialog.js function usePermissionsEditorDialog (line 4) | function usePermissionsEditorDialog(query) { FILE: client/app/pages/queries/hooks/usePublishQuery.js function usePublishQuery (line 5) | function usePublishQuery(query, onChange) { FILE: client/app/pages/queries/hooks/useQuery.js function useQuery (line 6) | function useQuery(originalQuery) { FILE: client/app/pages/queries/hooks/useQueryDataSources.js function useQueryDataSources (line 5) | function useQueryDataSources(query) { FILE: client/app/pages/queries/hooks/useQueryExecute.js function getMaxAge (line 8) | function getMaxAge() { function useQueryExecute (line 21) | function useQueryExecute(query) { FILE: client/app/pages/queries/hooks/useQueryFlags.js function useQueryFlags (line 6) | function useQueryFlags(query, dataSource = null) { FILE: client/app/pages/queries/hooks/useQueryParameters.js function useQueryParameters (line 4) | function useQueryParameters(query) { FILE: client/app/pages/queries/hooks/useRenameQuery.js function useRenameQuery (line 6) | function useRenameQuery(query, onChange) { FILE: client/app/pages/queries/hooks/useUnpublishQuery.js function useUnpublishQuery (line 5) | function useUnpublishQuery(query, onChange) { FILE: client/app/pages/queries/hooks/useUnsavedChangesAlert.js function useUnsavedChangesAlert (line 4) | function useUnsavedChangesAlert(shouldShowAlert = false) { FILE: client/app/pages/queries/hooks/useUpdateQuery.jsx class SaveQueryError (line 9) | class SaveQueryError extends Error { method constructor (line 10) | constructor(message, detailedMessage = null) { class SaveQueryConflictError (line 16) | class SaveQueryConflictError extends SaveQueryError { method constructor (line 17) | constructor() { function confirmOverwrite (line 28) | function confirmOverwrite() { function doSaveQuery (line 52) | function doSaveQuery(data, { canOverwrite = false } = {}) { function useUpdateQuery (line 74) | function useUpdateQuery(query, onChange) { FILE: client/app/pages/queries/hooks/useUpdateQueryDescription.js function useUpdateQueryDescription (line 5) | function useUpdateQueryDescription(query, onChange) { FILE: client/app/pages/queries/hooks/useUpdateQueryTags.js function useUpdateQueryTags (line 5) | function useUpdateQueryTags(query, onChange) { FILE: client/app/pages/queries/hooks/useVisualizationTabHandler.js function useVisualizationTabHandler (line 5) | function useVisualizationTabHandler(visualizations) { FILE: client/app/pages/query-snippets/QuerySnippetsList.jsx class QuerySnippetsList (line 30) | class QuerySnippetsList extends React.Component { method componentDidMount (line 77) | componentDidMount() { method render (line 139) | render() { method getRequest (line 206) | getRequest() { method getResource (line 209) | getResource() { FILE: client/app/pages/settings/OrganizationSettings.jsx function OrganizationSettings (line 17) | function OrganizationSettings({ onError }) { FILE: client/app/pages/settings/components/AuthSettings/GoogleLoginSettings.jsx function GoogleLoginSettings (line 10) | function GoogleLoginSettings(props) { FILE: client/app/pages/settings/components/AuthSettings/PasswordLoginSettings.jsx function PasswordLoginSettings (line 11) | function PasswordLoginSettings(props) { FILE: client/app/pages/settings/components/AuthSettings/SAMLSettings.jsx function SAMLSettings (line 9) | function SAMLSettings(props) { FILE: client/app/pages/settings/components/AuthSettings/index.jsx function AuthSettings (line 11) | function AuthSettings(props) { FILE: client/app/pages/settings/components/GeneralSettings/BeaconConsentSettings.jsx function BeaconConsentSettings (line 9) | function BeaconConsentSettings(props) { FILE: client/app/pages/settings/components/GeneralSettings/FeatureFlagsSettings.jsx function FeatureFlagsSettings (line 9) | function FeatureFlagsSettings(props) { FILE: client/app/pages/settings/components/GeneralSettings/FormatSettings.jsx function FormatSettings (line 9) | function FormatSettings(props) { FILE: client/app/pages/settings/components/GeneralSettings/PlotlySettings.jsx function PlotlySettings (line 8) | function PlotlySettings(props) { FILE: client/app/pages/settings/components/GeneralSettings/index.jsx function GeneralSettings (line 9) | function GeneralSettings(props) { FILE: client/app/pages/settings/hooks/useOrganizationSettings.js function useOrganizationSettings (line 8) | function useOrganizationSettings({ onError }) { FILE: client/app/pages/users/UserProfile.jsx function UserProfile (line 20) | function UserProfile({ userId, onError }) { FILE: client/app/pages/users/UsersList.jsx function UsersListActions (line 36) | function UsersListActions({ user, enableUser, disableUser, deleteUser }) { class UsersList (line 69) | class UsersList extends React.Component { method componentDidMount (line 139) | componentDidMount() { method renderPageHeader (line 193) | renderPageHeader() { method render (line 208) | render() { method getRequest (line 265) | getRequest(request, { params: { currentPage } }) { method getResource (line 280) | getResource() { FILE: client/app/pages/users/components/ApiKeyForm.jsx function ApiKeyForm (line 13) | function ApiKeyForm(props) { FILE: client/app/pages/users/components/CreateUserDialog.jsx function CreateUserDialog (line 15) | function CreateUserDialog({ dialog }) { FILE: client/app/pages/users/components/EditableUserProfile.jsx function EditableUserProfile (line 9) | function EditableUserProfile(props) { FILE: client/app/pages/users/components/PasswordForm/ChangePasswordDialog.jsx class ChangePasswordDialog (line 11) | class ChangePasswordDialog extends React.Component { method constructor (line 17) | constructor(props) { method render (line 99) | render() { FILE: client/app/pages/users/components/PasswordForm/PasswordLinkAlert.jsx function PasswordLinkAlert (line 10) | function PasswordLinkAlert(props) { FILE: client/app/pages/users/components/PasswordForm/PasswordResetForm.jsx function PasswordResetForm (line 8) | function PasswordResetForm(props) { FILE: client/app/pages/users/components/PasswordForm/ResendInvitationForm.jsx function ResendInvitationForm (line 8) | function ResendInvitationForm(props) { FILE: client/app/pages/users/components/PasswordForm/index.jsx function PasswordForm (line 11) | function PasswordForm(props) { FILE: client/app/pages/users/components/ReadOnlyUserProfile.jsx function ReadOnlyUserProfile (line 7) | function ReadOnlyUserProfile({ user }) { FILE: client/app/pages/users/components/ToggleUserForm.jsx function ToggleUserForm (line 10) | function ToggleUserForm(props) { FILE: client/app/pages/users/components/UserInfoForm.jsx function UserInfoForm (line 15) | function UserInfoForm(props) { FILE: client/app/pages/users/hooks/useUserGroups.js function useUserGroups (line 5) | function useUserGroups(user) { FILE: client/app/services/KeyboardShortcuts.js function humanReadableShortcut (line 8) | function humanReadableShortcut(shortcut, limit = Infinity) { function onShortcut (line 26) | function onShortcut(event, shortcut) { FILE: client/app/services/auth.js method canEdit (line 10) | canEdit(object) { method canCreate (line 15) | canCreate() { method hasPermission (line 21) | hasPermission(permission) { method isAdmin (line 28) | get isAdmin() { method isAdmin (line 32) | set isAdmin(isAdmin) { function updateClientConfig (line 47) | function updateClientConfig(newClientConfig) { function updateSession (line 51) | function updateSession(sessionData) { method isAuthenticated (line 60) | isAuthenticated() { method getLoginUrl (line 63) | getLoginUrl() { method setLoginUrl (line 66) | setLoginUrl(loginUrl) { method login (line 69) | login() { method logout (line 74) | logout() { method loadSession (line 78) | loadSession() { method loadConfig (line 91) | loadConfig() { method setApiKey (line 98) | setApiKey(apiKey) { method getApiKey (line 102) | getApiKey() { method requireSession (line 105) | requireSession() { FILE: client/app/services/dashboard.js function collectDashboardFilters (line 11) | function collectDashboardFilters(dashboard, queryResults, urlParams) { function prepareWidgetsForDashboard (line 40) | function prepareWidgetsForDashboard(widgets) { function calculateNewWidgetPosition (line 83) | function calculateNewWidgetPosition(existingWidgets, newWidget) { function Dashboard (line 129) | function Dashboard(dashboard) { function prepareDashboardWidgets (line 138) | function prepareDashboardWidgets(widgets) { function transformSingle (line 142) | function transformSingle(dashboard) { function transformResponse (line 151) | function transformResponse(data) { FILE: client/app/services/data-source.js constant SCHEMA_NOT_SUPPORTED (line 5) | const SCHEMA_NOT_SUPPORTED = 1; constant SCHEMA_LOAD_ERROR (line 6) | const SCHEMA_LOAD_ERROR = 2; constant IMG_ROOT (line 7) | const IMG_ROOT = "/static/images/db-logos"; function mapSchemaColumnsToObject (line 9) | function mapSchemaColumnsToObject(columns) { FILE: client/app/services/databricks-data-source.js function fetchDataFromJobOrReturnData (line 6) | function fetchDataFromJobOrReturnData(data) { function rejectErrorResponse (line 10) | function rejectErrorResponse(data) { FILE: client/app/services/destination.js constant IMG_ROOT (line 3) | const IMG_ROOT = "static/images/destinations"; FILE: client/app/services/getTags.js function processTags (line 3) | function processTags(data) { function getTags (line 7) | function getTags(url) { FILE: client/app/services/location.js function normalizeLocation (line 7) | function normalizeLocation(rawLocation) { method listen (line 20) | listen(handler) { method confirmChange (line 28) | confirmChange(handler) { method update (line 38) | update(newLocation, replace = false) { method setPath (line 83) | setPath(path, replace = false) { method setSearch (line 88) | setSearch(search, replace = false) { method setHash (line 93) | setHash(hash, replace = false) { function locationChanged (line 98) | function locationChanged() { FILE: client/app/services/notification.d.ts type NotificationConfig (line 3) | type NotificationConfig = Omit | n... type NotificationFunction (line 5) | type NotificationFunction = ( FILE: client/app/services/notifications.js function isPageVisible (line 15) | function isPageVisible() { function getPermissions (line 19) | function getPermissions() { function showNotification (line 25) | function showNotification(title, content) { FILE: client/app/services/offline-listener.js function addOnlineListener (line 3) | function addOnlineListener(notificationKey) { method init (line 12) | init() { FILE: client/app/services/organizationStatus.js class OrganizationStatus (line 3) | class OrganizationStatus { method constructor (line 4) | constructor() { method refresh (line 8) | refresh() { FILE: client/app/services/parameters/DateParameter.js constant DATETIME_FORMATS (line 6) | const DATETIME_FORMATS = { constant DYNAMIC_PREFIX (line 13) | const DYNAMIC_PREFIX = "d_"; constant DYNAMIC_DATES (line 15) | const DYNAMIC_DATES = { function isDynamicDateString (line 28) | function isDynamicDateString(value) { function isDynamicDate (line 32) | function isDynamicDate(value) { function getDynamicDateFromString (line 36) | function getDynamicDateFromString(value) { class DateParameter (line 43) | class DateParameter extends Parameter { method constructor (line 44) | constructor(parameter, parentQueryId) { method hasDynamicValue (line 50) | get hasDynamicValue() { method normalizeValue (line 55) | normalizeValue(value) { method setValue (line 68) | setValue(value) { method getExecutionValue (line 84) | getExecutionValue() { FILE: client/app/services/parameters/DateRangeParameter.js constant DATETIME_FORMATS (line 6) | const DATETIME_FORMATS = { constant DYNAMIC_PREFIX (line 12) | const DYNAMIC_PREFIX = "d_"; constant DYNAMIC_DATE_RANGES (line 24) | const DYNAMIC_DATE_RANGES = { function isDynamicDateRangeString (line 109) | function isDynamicDateRangeString(value) { function getDynamicDateRangeStringFromName (line 116) | function getDynamicDateRangeStringFromName(dynamicRangeName) { function isDynamicDateRange (line 121) | function isDynamicDateRange(value) { function getDynamicDateRangeFromString (line 125) | function getDynamicDateRangeFromString(value) { class DateRangeParameter (line 132) | class DateRangeParameter extends Parameter { method constructor (line 133) | constructor(parameter, parentQueryId) { method hasDynamicValue (line 138) | get hasDynamicValue() { method normalizeValue (line 143) | normalizeValue(value) { method setValue (line 165) | setValue(value) { method getExecutionValue (line 184) | getExecutionValue() { method toUrlParams (line 193) | toUrlParams() { method fromUrlParams (line 203) | fromUrlParams(query) { method toQueryTextFragment (line 223) | toQueryTextFragment() { FILE: client/app/services/parameters/EnumParameter.js class EnumParameter (line 4) | class EnumParameter extends Parameter { method constructor (line 5) | constructor(parameter, parentQueryId) { method normalizeValue (line 12) | normalizeValue(value) { method getExecutionValue (line 33) | getExecutionValue(extra = {}) { method toUrlParams (line 45) | toUrlParams() { method fromUrlParams (line 58) | fromUrlParams(query) { FILE: client/app/services/parameters/NumberParameter.js class NumberParameter (line 4) | class NumberParameter extends Parameter { method constructor (line 5) | constructor(parameter, parentQueryId) { method normalizeValue (line 11) | normalizeValue(value) { FILE: client/app/services/parameters/Parameter.js class Parameter (line 3) | class Parameter { method constructor (line 4) | constructor(parameter, parentQueryId) { method getExecutionValue (line 18) | static getExecutionValue(param, extra = {}) { method setValue (line 26) | static setValue(param, value) { method isEmpty (line 34) | get isEmpty() { method hasPendingValue (line 38) | get hasPendingValue() { method normalizedValue (line 43) | get normalizedValue() { method isEmptyValue (line 47) | isEmptyValue(value) { method normalizeValue (line 52) | normalizeValue(value) { method updateLocals (line 59) | updateLocals() { method setValue (line 67) | setValue(value) { method getExecutionValue (line 78) | getExecutionValue() { method setPendingValue (line 82) | setPendingValue(value) { method applyPendingValue (line 86) | applyPendingValue() { method clearPendingValue (line 92) | clearPendingValue() { method toUrlParams (line 97) | toUrlParams() { method fromUrlParams (line 106) | fromUrlParams(query) { method toQueryTextFragment (line 114) | toQueryTextFragment() { method toSaveableObject (line 119) | toSaveableObject() { FILE: client/app/services/parameters/QueryBasedDropdownParameter.js class QueryBasedDropdownParameter (line 5) | class QueryBasedDropdownParameter extends Parameter { method constructor (line 6) | constructor(parameter, parentQueryId) { method normalizeValue (line 13) | normalizeValue(value) { method getExecutionValue (line 26) | getExecutionValue(extra = {}) { method toUrlParams (line 38) | toUrlParams() { method fromUrlParams (line 51) | fromUrlParams(query) { method loadDropdownValues (line 68) | loadDropdownValues() { FILE: client/app/services/parameters/TextParameter.js class TextParameter (line 4) | class TextParameter extends Parameter { method constructor (line 5) | constructor(parameter, parentQueryId) { method normalizeValue (line 11) | normalizeValue(value) { FILE: client/app/services/parameters/TextPatternParameter.js class TextPatternParameter (line 4) | class TextPatternParameter extends Parameter { method constructor (line 5) | constructor(parameter, parentQueryId) { method normalizeValue (line 12) | normalizeValue(value) { FILE: client/app/services/parameters/index.js function createParameter (line 10) | function createParameter(param, parentQueryId) { function cloneParameter (line 33) | function cloneParameter(param) { FILE: client/app/services/policy/DefaultPolicy.js class DefaultPolicy (line 6) | class DefaultPolicy { method refresh (line 7) | refresh() { method canCreateDataSource (line 11) | canCreateDataSource() { method isCreateDataSourceEnabled (line 15) | isCreateDataSourceEnabled() { method canCreateDestination (line 19) | canCreateDestination() { method isCreateDestinationEnabled (line 23) | isCreateDestinationEnabled() { method canCreateDashboard (line 27) | canCreateDashboard() { method isCreateDashboardEnabled (line 31) | isCreateDashboardEnabled() { method canCreateAlert (line 35) | canCreateAlert() { method canCreateUser (line 39) | canCreateUser() { method isCreateUserEnabled (line 43) | isCreateUserEnabled() { method isCreateQuerySnippetEnabled (line 47) | isCreateQuerySnippetEnabled() { method getDashboardRefreshIntervals (line 51) | getDashboardRefreshIntervals() { method getQueryRefreshIntervals (line 56) | getQueryRefreshIntervals() { method canEdit (line 61) | canEdit(object) { method canRun (line 65) | canRun() { FILE: client/app/services/policy/index.js function setPolicy (line 6) | function setPolicy(newPolicy) { FILE: client/app/services/query-result.js function defer (line 11) | function defer() { function getColumnNameWithoutType (line 20) | function getColumnNameWithoutType(column) { function getColumnFriendlyName (line 42) | function getColumnFriendlyName(column) { function handleErrorResponse (line 67) | function handleErrorResponse(queryResult, error) { function sleep (line 99) | function sleep(ms) { function fetchDataFromJob (line 103) | function fetchDataFromJob(jobId, interval = 1000) { function isDateTime (line 116) | function isDateTime(v) { class QueryResult (line 120) | class QueryResult { method constructor (line 121) | constructor(props) { method update (line 137) | update(props) { method getId (line 198) | getId() { method cancelExecution (line 206) | cancelExecution() { method getStatus (line 210) | getStatus() { method getError (line 217) | getError() { method getLog (line 226) | getLog() { method getUpdatedAt (line 234) | getUpdatedAt() { method getRuntime (line 238) | getRuntime() { method getRawData (line 242) | getRawData() { method getData (line 250) | getData() { method isEmpty (line 254) | isEmpty() { method getColumns (line 258) | getColumns() { method getColumnNames (line 266) | getColumnNames() { method getColumnFriendlyNames (line 274) | getColumnFriendlyNames() { method getTruncated (line 278) | getTruncated() { method getFilters (line 282) | getFilters() { method toPromise (line 333) | toPromise(statusCallback) { method getById (line 340) | static getById(queryId, id) { method loadLatestCachedResult (line 362) | loadLatestCachedResult(queryId, parameters) { method loadResult (line 373) | loadResult(tryCount) { method refreshStatus (line 407) | refreshStatus(query, parameters, tryNumber = 1) { method getLink (line 447) | getLink(queryId, fileType, apiKey) { method getName (line 455) | getName(queryName, fileType) { method getByQueryId (line 459) | static getByQueryId(id, parameters, applyAutoLimit, maxAge) { method get (line 478) | static get(dataSourceId, query, parameters, applyAutoLimit, maxAge, qu... FILE: client/app/services/query-snippet.js class QuerySnippet (line 4) | class QuerySnippet { method constructor (line 5) | constructor(querySnippet) { method getSnippet (line 9) | getSnippet() { FILE: client/app/services/query.js function collectParams (line 33) | function collectParams(parts) { class Query (line 47) | class Query { method constructor (line 48) | constructor(query) { method isNew (line 61) | isNew() { method hasDailySchedule (line 65) | hasDailySchedule() { method scheduleInLocalTime (line 69) | scheduleInLocalTime() { method hasResult (line 79) | hasResult() { method paramsRequired (line 83) | paramsRequired() { method hasParameters (line 87) | hasParameters() { method prepareQueryResultExecution (line 91) | prepareQueryResultExecution(execute, maxAge) { method getQueryResult (line 134) | getQueryResult(maxAge) { method getQueryResultByText (line 140) | getQueryResultByText(maxAge, selectedQueryText) { method getUrl (line 152) | getUrl(source, hash) { method getQueryResultPromise (line 179) | getQueryResultPromise() { method getParameters (line 183) | getParameters() { method getAutoLimit (line 191) | getAutoLimit() { method getParametersDefs (line 195) | getParametersDefs(update = true) { method favorite (line 199) | favorite() { method unfavorite (line 203) | unfavorite() { method clone (line 207) | clone() { class Parameters (line 215) | class Parameters { method constructor (line 216) | constructor(query, queryString) { method parseQuery (line 222) | parseQuery() { method updateParameters (line 242) | updateParameters(update) { method initFromQueryString (line 285) | initFromQueryString(query) { method get (line 291) | get(update = true) { method add (line 296) | add(parameterDef) { method getMissing (line 303) | getMissing() { method isRequired (line 310) | isRequired() { method getExecutionValues (line 314) | getExecutionValues(extra = {}) { method hasPendingValues (line 322) | hasPendingValues() { method applyPendingValues (line 326) | applyPendingValues() { method toUrlParams (line 330) | toUrlParams() { class QueryResultError (line 343) | class QueryResultError { method constructor (line 344) | constructor(errorMessage) { method getUpdatedAt (line 349) | getUpdatedAt() { method getError (line 353) | getError() { method toPromise (line 357) | toPromise() { method getStatus (line 362) | getStatus() { method getData (line 367) | getData() { method getLog (line 372) | getLog() { FILE: client/app/services/recordEvent.js function recordEvent (line 13) | function recordEvent(action, objectType, objectId, additionalProperties) { FILE: client/app/services/resizeObserver.js function checkItems (line 3) | function checkItems() { function observe (line 22) | function observe(node, callback) { FILE: client/app/services/restoreSession.jsx constant SESSION_RESTORED_MESSAGE (line 6) | const SESSION_RESTORED_MESSAGE = "redash_session_restored"; function notifySessionRestored (line 8) | function notifySessionRestored() { function getPopupPosition (line 14) | function getPopupPosition(width, height) { function showRestoreSessionPrompt (line 28) | function showRestoreSessionPrompt(loginUrl, onSuccess) { function restoreSession (line 80) | function restoreSession() { FILE: client/app/services/routes.ts type CurrentRoute (line 6) | interface CurrentRoute

{ type RedashRoute (line 13) | interface RedashRoute

exte... type RouteItem (line 21) | interface RouteItem extends RedashRoute { function getRouteParamsCount (line 25) | function getRouteParamsCount(path: string) { class Routes (line 30) | class Routes { method items (line 34) | get items(): RouteItem[] { method register (line 46) | public register

(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 & { nodes: any[]; ... function getConnectedNodes (line 25) | function getConnectedNodes(node: NodeType) { function graph (line 39) | function graph(data: ExtendedSankeyDataType["rows"]) { function spreadNodes (line 111) | function spreadNodes(height: any, data: ExtendedSankeyDataType) { function isDataValid (line 141) | function isDataValid(data: ExtendedSankeyDataType) { function prepareDataRows (line 158) | function prepareDataRows(rows: ExtendedSankeyDataType["rows"]) { function initSankey (line 169) | function initSankey(data: ExtendedSankeyDataType) { FILE: viz-lib/src/visualizations/shared/columnUtils.ts function getColumnNameWithoutType (line 6) | function getColumnNameWithoutType(column: any) { function getColumnContentAlignment (line 28) | function getColumnContentAlignment(type: any) { function getDefaultColumnsOptions (line 32) | function getDefaultColumnsOptions(columns: any, extraFields = {}) { function getDefaultFormatOptions (line 62) | function getDefaultFormatOptions(column: any) { function wereColumnsReordered (line 91) | function wereColumnsReordered(queryColumns: any, visualizationColumns: a... function getColumnsOptions (line 112) | function getColumnsOptions(columns: any, visualizationColumns: any, extr... FILE: viz-lib/src/visualizations/shared/columns/boolean.test.tsx function findByTestID (line 6) | function findByTestID(wrapper: any, testId: any) { function mount (line 10) | function mount(column: any, done: any) { FILE: viz-lib/src/visualizations/shared/columns/boolean.tsx type Props (line 6) | type Props = { function Editor (line 14) | function Editor({ column, onChange }: Props) { function initBooleanColumn (line 59) | function initBooleanColumn(column: any) { FILE: viz-lib/src/visualizations/shared/columns/datetime.test.tsx function findByTestID (line 6) | function findByTestID(wrapper: any, testId: any) { function mount (line 10) | function mount(column: any, done: any) { FILE: viz-lib/src/visualizations/shared/columns/datetime.tsx type Props (line 6) | type Props = { function Editor (line 14) | function Editor({ column, onChange }: Props) { function initDateTimeColumn (line 35) | function initDateTimeColumn(column: any) { FILE: viz-lib/src/visualizations/shared/columns/image.test.tsx function findByTestID (line 6) | function findByTestID(wrapper: any, testId: any) { function mount (line 10) | function mount(column: any, done: any) { FILE: viz-lib/src/visualizations/shared/columns/image.tsx type Props (line 7) | type Props = { function Editor (line 18) | function Editor({ column, onChange }: Props) { function initImageColumn (line 97) | function initImageColumn(column: any) { FILE: viz-lib/src/visualizations/shared/columns/json.tsx function initJsonColumn (line 6) | function initJsonColumn(column: any) { FILE: viz-lib/src/visualizations/shared/columns/link.test.tsx function findByTestID (line 6) | function findByTestID(wrapper: any, testId: any) { function mount (line 10) | function mount(column: any, done: any) { FILE: viz-lib/src/visualizations/shared/columns/link.tsx type Props (line 7) | type Props = { function Editor (line 18) | function Editor({ column, onChange }: Props) { function initLinkColumn (line 84) | function initLinkColumn(column: any) { FILE: viz-lib/src/visualizations/shared/columns/number.test.tsx function findByTestID (line 6) | function findByTestID(wrapper: any, testId: any) { function mount (line 10) | function mount(column: any, done: any) { FILE: viz-lib/src/visualizations/shared/columns/number.tsx type Props (line 6) | type Props = { function Editor (line 14) | function Editor({ column, onChange }: Props) { function initNumberColumn (line 35) | function initNumberColumn(column: any) { FILE: viz-lib/src/visualizations/shared/columns/text.test.tsx function findByTestID (line 6) | function findByTestID(wrapper: any, testId: any) { function mount (line 10) | function mount(column: any, done: any) { FILE: viz-lib/src/visualizations/shared/columns/text.tsx type Props (line 6) | type Props = { function Editor (line 15) | function Editor({ column, onChange }: Props) { function initTextColumn (line 43) | function initTextColumn(column: any) { FILE: viz-lib/src/visualizations/shared/components/ColumnEditor.test.tsx function findByTestID (line 6) | function findByTestID(wrapper: any, testId: any) { function mount (line 10) | function mount(column: any, variant: "table" | "details", onChange: any ... FILE: viz-lib/src/visualizations/shared/components/ColumnEditor.tsx type Column (line 9) | type Column = { type ColumnEditorProps (line 19) | type ColumnEditorProps = { function ColumnEditor (line 27) | function ColumnEditor({ FILE: viz-lib/src/visualizations/shared/components/ColumnsSettings.tsx type ColumnsSettingsProps (line 20) | type ColumnsSettingsProps = { function ColumnsSettings (line 26) | function ColumnsSettings({ options, onOptionsChange, variant }: ColumnsS... FILE: viz-lib/src/visualizations/sunburst/Editor.tsx function Editor (line 4) | function Editor() { FILE: viz-lib/src/visualizations/sunburst/Renderer.tsx function Renderer (line 8) | function Renderer({ data }: any) { FILE: viz-lib/src/visualizations/sunburst/initSunburst.ts function colorMap (line 13) | function colorMap(d: any) { function getAncestors (line 18) | function getAncestors(node: any) { function buildNodesFromHierarchyData (line 29) | function buildNodesFromHierarchyData(data: any) { function buildNodesFromTableData (line 42) | function buildNodesFromTableData(data: any) { function isDataInHierarchyFormat (line 53) | function isDataInHierarchyFormat(data: any) { function buildHierarchy (line 58) | function buildHierarchy(data: any) { function isDataValid (line 116) | function isDataValid(data: any) { function initSunburst (line 120) | function initSunburst(data: any) { FILE: viz-lib/src/visualizations/table/Editor/ColumnEditor.tsx type OwnProps (line 4) | type OwnProps = { type Props (line 21) | type Props = OwnProps & typeof columnEditorDefaultProps; function ColumnEditor (line 23) | function ColumnEditor({ column, onChange }: Props) { FILE: viz-lib/src/visualizations/table/Editor/ColumnsSettings.test.tsx function findByTestID (line 7) | function findByTestID(wrapper: any, testId: any) { function mount (line 11) | function mount(options: any, done: any) { FILE: viz-lib/src/visualizations/table/Editor/ColumnsSettings.tsx function ColumnsSettings (line 5) | function ColumnsSettings({ options, onOptionsChange, data }: any) { FILE: viz-lib/src/visualizations/table/Editor/GridSettings.test.tsx function findByTestID (line 7) | function findByTestID(wrapper: any, testId: any) { function mount (line 11) | function mount(options: any, done: any) { FILE: viz-lib/src/visualizations/table/Editor/GridSettings.tsx constant ALLOWED_ITEM_PER_PAGE (line 6) | const ALLOWED_ITEM_PER_PAGE = [5, 10, 15, 20, 25, 50, 100, 150, 200, 250... function GridSettings (line 8) | function GridSettings({ options, onOptionsChange }: any) { FILE: viz-lib/src/visualizations/table/Renderer.tsx function joinColumns (line 13) | function joinColumns(array: any, separator = ", ") { function getSearchColumns (line 30) | function getSearchColumns(columns: any, { limit = Infinity, renderColumn... function SearchInputInfoIcon (line 42) | function SearchInputInfoIcon({ searchColumns }: any) { type OwnSearchInputProps (line 57) | type OwnSearchInputProps = { type SearchInputProps (line 65) | type SearchInputProps = OwnSearchInputProps & typeof searchInputDefaultP... function SearchInput (line 68) | function SearchInput({ searchColumns, ...props }: SearchInputProps) { function Renderer (line 85) | function Renderer({ options, data }: any) { FILE: viz-lib/src/visualizations/table/getOptions.ts constant DEFAULT_OPTIONS (line 8) | const DEFAULT_OPTIONS = { function getOptions (line 14) | function getOptions(options: any, { columns }: any) { FILE: viz-lib/src/visualizations/table/utils.tsx function nextOrderByDirection (line 7) | function nextOrderByDirection(direction: any) { function toggleOrderBy (line 18) | function toggleOrderBy(columnName: any, orderBy = [], multiColumnSort = ... function getOrderByInfo (line 44) | function getOrderByInfo(orderBy: any) { function prepareColumns (line 53) | function prepareColumns(columns: any, searchInput: any, orderBy: any, on... function initRows (line 141) | function initRows(rows: any) { function filterRows (line 145) | function filterRows(rows: any, searchTerm: any, searchColumns: any) { function sortRows (line 167) | function sortRows(rows: any, orderBy: any) { FILE: viz-lib/src/visualizations/visualizationsSettings.tsx type HelpTriggerProps (line 5) | type HelpTriggerProps = { function HelpTrigger (line 12) | function HelpTrigger({ title, href, className, children }: HelpTriggerPr... function Link (line 34) | function Link(props: any) { function updateVisualizationsSettings (line 53) | function updateVisualizationsSettings(options: any) { FILE: viz-lib/src/visualizations/word-cloud/Editor.tsx function Editor (line 7) | function Editor({ options, data, onOptionsChange }: any) { FILE: viz-lib/src/visualizations/word-cloud/Renderer.tsx function computeWordFrequencies (line 10) | function computeWordFrequencies(rows: any, column: any) { function getWordsWithFrequencies (line 24) | function getWordsWithFrequencies(rows: any, wordColumn: any, frequencyCo... function applyLimitsToWords (line 39) | function applyLimitsToWords(words: any, { wordLength, wordCount }: any) { function prepareWords (line 54) | function prepareWords(rows: any, options: any) { function scaleElement (line 92) | function scaleElement(node: any, container: any) { function createLayout (line 103) | function createLayout() { function render (line 119) | function render(container: any, words: any) { function Renderer (line 145) | function Renderer({ data, options }: any) { FILE: viz-lib/src/visualizations/word-cloud/index.ts constant DEFAULT_OPTIONS (line 6) | const DEFAULT_OPTIONS = { FILE: webpack.config.js function optionalRequire (line 17) | function optionalRequire(module, defaultReturn = undefined) { constant CONFIG (line 31) | const CONFIG = optionalRequire("./scripts/config", {}); function maybeApplyOverrides (line 51) | function maybeApplyOverrides(config) {