schemaVersion: 3
meta:
  sourceVersionId: 01981421-c373-7006-88e5-65dd8d78abc6 # DO NOT CHANGE - Hex uses this to match up project versions when reimporting the file
  description: Report used to give an overview of the projects in Hex along with ones that are non-compliant to internally-defined rules for how projects should evolve through the project lifecycle.
  projectId: 8a24cfe8-ba0c-4173-be76-ebf065a06850 # DO NOT CHANGE - Unique ID of the project from which this file was generated
  title: "[TEMPLATE] Workspace organization audit tool"
  timezone: null
  appTheme: SYS_PREF
  codeLanguage: PYTHON
  status:
    name: EXTERNAL
  categories:
    - name: Example Project
    - name: Template
  castDecimalsDefault: true
  logicQueryCacheTimeout: null
  publishedQueryCacheTimeout: null
  hexType: PROJECT
  allowExecutionReordering: true
  prerunApp: false
  cachePublishedAppState: true
  refreshStalePublishedApp: false
  autoRerunApp: true
projectAssets:
  dataConnections: []
  envVars: []
  secrets: []
sharedAssets:
  secrets:
    - secretName: listProjects_workspace_api_token
  vcsPackages: []
  dataConnections: []
  externalFileIntegrations: []
cells:
  - cellType: CODE
    cellId: 2a1016a2-9730-4f42-bf04-ecf58097d4e8 # DO NOT CHANGE - Hex uses this to match up cells when reimporting the file, and detect any changes to existing cells
    cellLabel: null
    config:
      source: |-
        from datetime import datetime, timezone
        import hextoolkit as htk
        import hex_api
        import pandas     as pd

        api_client = htk.get_api_client(listProjects_workspace_api_token)
  - cellType: COLLAPSIBLE
    cellId: 4232c5ee-b985-431d-b027-f349ebbbd19a # DO NOT CHANGE - Hex uses this to match up cells when reimporting the file, and detect any changes to existing cells
    cellLabel: Single project
    config:
      labelStyle: AUTO
      cells:
        - cellType: MARKDOWN
          cellId: 60bcc5ac-52d0-4632-ac14-916c8d27e2a8
          cellLabel: null
          config:
            source: |-
              ## Getting a single project

              This code shows how to get a single project.
        - cellType: CODE
          cellId: ecaf5d6d-5e51-4d6d-8df4-c4eb839e5822
          cellLabel: null
          config:
            source: |
              api_client.get_project("27ba283a-6075-4348-929d-6ab370d57d5e", include_sharing = True)
  - cellType: COLLAPSIBLE
    cellId: d3c141a9-f9b8-4e35-b784-c6d24c47a74b # DO NOT CHANGE - Hex uses this to match up cells when reimporting the file, and detect any changes to existing cells
    cellLabel: Get all projects
    config:
      labelStyle: AUTO
      cells:
        - cellType: MARKDOWN
          cellId: 3bc72936-4fff-4db2-a603-f7ab4d38079d
          cellLabel: null
          config:
            source: |-
              ## Getting all the projects

              This code shows how to get all of the projects. We simply iterate over all of the projects using the API and grab what we need.
        - cellType: CODE
          cellId: bf4eccba-b394-4954-937f-90ec52c01ead
          cellLabel: All Projects
          config:
            source: |-
              first_page = api_client.list_projects(limit=100, include_sharing = True)
              after = first_page.pagination.after
              projects = first_page.values

              while after:
                  response = api_client.list_projects(limit = 100, include_sharing = True, after=after)
                  after = response.pagination.after
                  new_projects = response.values
                  projects = [*projects, *new_projects]

              project_data = []

              for project in projects:
                  id = project.id
                  title = project.title
                  views_all = project.analytics.app_views.all_time
                  views_30d = project.analytics.app_views.last_thirty_days
                  views_14d = project.analytics.app_views.last_fourteen_days
                  views_7d  = project.analytics.app_views.last_seven_days
                  categories = list(x.name for x in project.categories)
                  collections = list(x.collection.name for x in project.sharing.collections)
                  created_at = project.created_at
                  creator = project.creator.email
                  description = project.description
                  last_edited = project.last_edited_at
                  last_published = project.last_published_at
                  owner = project.owner.email
                  full_access_groups = list(x.group.name for x in project.sharing.groups if x.access == "FULL_ACCESS")
                  workspace_access = project.sharing.workspace.access
                  status = None if project.status is None else project.status.name
                  asset_type = None if project.type is None else project.type
                  project_data.append((id, title, views_all, views_30d, views_14d, views_7d, categories, collections, created_at, creator, description, last_edited, last_published, owner, full_access_groups, workspace_access, status, asset_type))

              all_projects = pd.DataFrame(project_data, columns = ["id", "title", "views_all", "views_30d", "views_14d", "views_7d", "categories", "collections", "created_at", "creator", "description", "last_edited", "last_published", "owner", "full_access_groups", "workspace_access", "status", "type"])
        - cellType: TABLE_DISPLAY
          cellId: 426e75a8-938a-418e-9616-598e3195de14
          cellLabel: null
          config:
            dataFrameVariableName: all_projects
            resultVariable: table_result_2
            tableDisplayConfig:
              pageSize: 50
              height: null
              hideIcons: false
              defaultColumnWidth: null
              hideIndex: false
              defaultSortColumn: null
              defaultSortIndexColumn: null
              defaultSortDirection: ASC
              conditionalFormatting: null
              calcs: null
              filters: []
              columnProperties:
                - originalName: categories
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: collections
                  renameTo: null
                  size: 110
                  wrapText: null
                  displayFormat: null
                - originalName: created_at
                  renameTo: null
                  size: 234
                  wrapText: null
                  displayFormat: null
                - originalName: creator
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: description
                  renameTo: null
                  size: 132
                  wrapText: null
                  displayFormat: null
                - originalName: full_access_groups
                  renameTo: null
                  size: 216
                  wrapText: null
                  displayFormat: null
                - originalName: id
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: last_edited
                  renameTo: null
                  size: 132
                  wrapText: null
                  displayFormat: null
                - originalName: last_published
                  renameTo: null
                  size: 168
                  wrapText: null
                  displayFormat: null
                - originalName: owner
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: row-index-0
                  renameTo: null
                  size: 46
                  wrapText: null
                  displayFormat: null
                - originalName: status
                  renameTo: null
                  size: 94
                  wrapText: null
                  displayFormat: null
                - originalName: title
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: views_14d
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: views_30d
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: views_7d
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: views_all
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: workspace_access
                  renameTo: null
                  size: 152
                  wrapText: null
                  displayFormat: null
              columnOrdering: null
              customColumnOrdering: null
              pinnedColumns: null
              hiddenColumns:
                - views_all
                - views_30d
                - views_14d
                - views_7d
                - created_at
                - creator
                - description
                - last_edited
                - owner
                - full_access_groups
                - type
                - ts_created_at
                - ts_last_edited
                - ts_last_published
                - days_since_created
                - days_since_edited
                - days_since_published
                - url
                - edit_url
              pinIndexColumns: false
              showAggregations: false
              columnAggregations: null
        - cellType: CODE
          cellId: ff611f69-0dd6-478d-9776-a5ce3e5eadd9
          cellLabel: null
          config:
            source: |-
              workspace_id = 'INSERT_YOUR_WORKSPACE_ID'
              domain = f"https://app.hex.tech/{workspace_id}"
              all_projects["ts_created_at"]     = [None if x is None else datetime.fromisoformat(x.replace("Z", "+00:00")) for x in all_projects["created_at"]]
              all_projects["ts_last_edited"]    = [None if x is None else datetime.fromisoformat(x.replace("Z", "+00:00")) for x in all_projects["last_edited"]]
              all_projects["ts_last_published"] = [None if x is None else datetime.fromisoformat(x.replace("Z", "+00:00")) for x in all_projects["last_published"]]
              right_now = datetime.now(timezone.utc)


              all_projects["days_since_created"]   = [None if x is None else (right_now - x).days for x in all_projects["ts_created_at"]]
              all_projects["days_since_edited"]    = [None if x is None else (right_now - x).days for x in all_projects["ts_last_edited"]]
              all_projects["days_since_published"] = [None if x is None else (right_now - x).days for x in all_projects["ts_last_published"]]

              all_projects["url"]      = [f"{domain}/app/{x}/latest?" for x in all_projects["id"]]
              all_projects["edit_url"] = [f"{domain}/hex/{x}/draft/logic" for x in all_projects["id"]]
  - cellType: COLLAPSIBLE
    cellId: 2b1c2194-4995-4654-ba27-64f22fab4f5e # DO NOT CHANGE - Hex uses this to match up cells when reimporting the file, and detect any changes to existing cells
    cellLabel: Projects per creator
    config:
      labelStyle: AUTO
      cells:
        - cellType: CODE
          cellId: 8f2eae71-ec4d-41b4-9993-1214dc8ec373
          cellLabel: null
          config:
            source: |-
              creators = all_projects.groupby("creator").agg(
                  n_created = pd.NamedAgg(column = "id", aggfunc = "count"),
                  last_edit = pd.NamedAgg(column = "last_edited", aggfunc = "max")
              ).reset_index().sort_values(by = "last_edit", ascending = False)
        - cellType: TABLE_DISPLAY
          cellId: 61f25a13-81dc-4100-973e-df1899357948
          cellLabel: Creator Summary
          config:
            dataFrameVariableName: creators
            resultVariable: table_result_7
            tableDisplayConfig:
              pageSize: 50
              height: 949
              hideIcons: false
              defaultColumnWidth: null
              hideIndex: false
              defaultSortColumn: last_edit
              defaultSortIndexColumn: null
              defaultSortDirection: DESC
              conditionalFormatting: null
              calcs: null
              filters: null
              columnProperties:
                - originalName: creator
                  renameTo: null
                  size: 218
                  wrapText: null
                  displayFormat: null
                - originalName: last_edit
                  renameTo: null
                  size: 188
                  wrapText: null
                  displayFormat: null
                - originalName: n_created
                  renameTo: null
                  size: 106
                  wrapText: null
                  displayFormat: null
                - originalName: row-index-0
                  renameTo: null
                  size: 46
                  wrapText: null
                  displayFormat: null
              columnOrdering: null
              customColumnOrdering: null
              pinnedColumns: null
              hiddenColumns: null
              pinIndexColumns: false
              showAggregations: false
              columnAggregations: null
        - cellType: INPUT
          cellId: 335042d5-8709-49e2-b809-aba682dfa706
          cellLabel: Select User
          config:
            inputType: DROPDOWN
            name: user_selected
            outputType: DYNAMIC
            options:
              valueOptions:
                dfName: creators
                columnName: creator
                variableName: creators['creator']
            defaultValue: null
        - cellType: CODE
          cellId: 097512d7-2b75-4123-a8a1-51b54e21af93
          cellLabel: null
          config:
            source: all_projects_for_user = all_projects[all_projects["creator"] == user_selected][["title", "description", "last_edited", "collections", "views_30d", "status", "url"]]
        - cellType: TABLE_DISPLAY
          cellId: 10cbaa7a-dccb-4e92-b404-d732fcd75219
          cellLabel: null
          config:
            dataFrameVariableName: all_projects_for_user
            resultVariable: table_result_8
            tableDisplayConfig:
              pageSize: 50
              height: null
              hideIcons: false
              defaultColumnWidth: null
              hideIndex: false
              defaultSortColumn: last_edited
              defaultSortIndexColumn: null
              defaultSortDirection: DESC
              conditionalFormatting: null
              calcs: null
              filters: null
              columnProperties:
                - originalName: collections
                  renameTo: null
                  size: 132
                  wrapText: null
                  displayFormat: null
                - originalName: description
                  renameTo: null
                  size: 132
                  wrapText: null
                  displayFormat: null
                - originalName: last_edited
                  renameTo: null
                  size: 132
                  wrapText: null
                  displayFormat: null
                - originalName: row-index-0
                  renameTo: null
                  size: 46
                  wrapText: null
                  displayFormat: null
                - originalName: status
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: title
                  renameTo: null
                  size: 218
                  wrapText: null
                  displayFormat: null
                - originalName: url
                  renameTo: null
                  size: 453
                  wrapText: null
                  displayFormat:
                    format: URL
                    columnType: STRING
                - originalName: views_30d
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
              columnOrdering: null
              customColumnOrdering: null
              pinnedColumns: null
              hiddenColumns: null
              pinIndexColumns: false
              showAggregations: false
              columnAggregations: null
  - cellType: COLLAPSIBLE
    cellId: 2749c147-5442-40f6-9f3d-0583174fdb83 # DO NOT CHANGE - Hex uses this to match up cells when reimporting the file, and detect any changes to existing cells
    cellLabel: Project Rules
    config:
      labelStyle: AUTO
      cells:
        - cellType: CODE
          cellId: 643252c9-2702-4f91-9754-67f639e46c7c
          cellLabel: null
          config:
            source: columns_to_display = ["edit_url", "title", "creator", "owner", "last_published", "last_edited", "status", "collections", "workspace_access", "views_7d", "views_30d", "views_all"]
        - cellType: CODE
          cellId: 0197c7a6-42a9-7330-bc0b-6694362fec18
          cellLabel: null
          config:
            source: |-
              # Rule 1
              rule_1_name = "Rule 1 - 'Production'-level projects must be in a Collection."

              production_statuses = [
               'Blessed',
               'Production',
               'Approved']


              filter_rule1 = (all_projects['collections'].apply(len).lt(1)) & (all_projects["status"].isin(production_statuses))
              rule_1_noncompliant_projects = all_projects[filter_rule1][columns_to_display]
              n_rule1 = rule_1_noncompliant_projects.shape[0]
        - cellType: MARKDOWN
          cellId: b3617a66-b143-42ae-b721-59aed06ef76f
          cellLabel: null
          config:
            source: |-
              ## {{ rule_1_name }}

              The table below shows projects that are non-compliant for our first rule: projects with a "production"-level status (e.g. "Approved", "Blessed", "Production") must be in a Collection.


              Number of projects in this bucket: {{ n_rule1 }}
        - cellType: TABLE_DISPLAY
          cellId: 8a20e2e5-8545-444e-9e46-dca32e532cb6
          cellLabel: null
          config:
            dataFrameVariableName: rule_1_noncompliant_projects
            resultVariable: table_result_11
            tableDisplayConfig:
              pageSize: 50
              height: null
              hideIcons: false
              defaultColumnWidth: null
              hideIndex: false
              defaultSortColumn: null
              defaultSortIndexColumn: null
              defaultSortDirection: ASC
              conditionalFormatting: null
              calcs: null
              filters: null
              columnProperties:
                - originalName: categories
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: collections
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: created_at
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: creator
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: description
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: edit_url
                  renameTo: null
                  size: 385
                  wrapText: null
                  displayFormat: null
                - originalName: id
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: last_edited
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: last_published
                  renameTo: null
                  size: 140
                  wrapText: null
                  displayFormat: null
                - originalName: owner
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: row-index-0
                  renameTo: null
                  size: 46
                  wrapText: null
                  displayFormat: null
                - originalName: status
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: title
                  renameTo: null
                  size: 222
                  wrapText: null
                  displayFormat: null
                - originalName: views_14d
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: views_30d
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: views_7d
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: views_all
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: workspace_access
                  renameTo: null
                  size: 152
                  wrapText: null
                  displayFormat: null
              columnOrdering: null
              customColumnOrdering: null
              pinnedColumns: null
              hiddenColumns: null
              pinIndexColumns: false
              showAggregations: false
              columnAggregations: null
        - cellType: CODE
          cellId: 0197c7ba-75ff-7330-bc1b-93ffcd1f1f57
          cellLabel: Rule 2 noncompliant projects
          config:
            source: |
              # Rule 2
              rule_2_name = "Rule 2 - Projects shared with the workspace must have a 'production'-level status."

              filter_rule2 = (~all_projects["workspace_access"].apply(lambda x: x == "NONE")) & (~all_projects["status"].isin(production_statuses))
              rule_2_noncompliant_projects = all_projects[filter_rule2][columns_to_display]
              n_rule2 = rule_2_noncompliant_projects.shape[0]
        - cellType: MARKDOWN
          cellId: f8a8760f-c926-4f51-9b93-f47bb467d1eb
          cellLabel: null
          config:
            source: |-
              ## {{ rule_2_name }}

              Projects which have workspace-wide access of any type must have a "production"-level status (e.g. "Blessed", "Approved", "Production"). 

              Number of projects in this bucket: {{ n_rule2 }}
        - cellType: TABLE_DISPLAY
          cellId: 8731eda8-8384-47cd-adcc-afb1c98f3e5c
          cellLabel: null
          config:
            dataFrameVariableName: rule_2_noncompliant_projects
            resultVariable: table_result_12
            tableDisplayConfig:
              pageSize: 50
              height: null
              hideIcons: false
              defaultColumnWidth: null
              hideIndex: false
              defaultSortColumn: null
              defaultSortIndexColumn: null
              defaultSortDirection: ASC
              conditionalFormatting: null
              calcs: null
              filters: null
              columnProperties:
                - originalName: collections
                  renameTo: null
                  size: 281
                  wrapText: null
                  displayFormat: null
                - originalName: creator
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: edit_url
                  renameTo: null
                  size: 380
                  wrapText: null
                  displayFormat: null
                - originalName: last_edited
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: last_published
                  renameTo: null
                  size: 140
                  wrapText: null
                  displayFormat: null
                - originalName: owner
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: row-index-0
                  renameTo: null
                  size: 46
                  wrapText: null
                  displayFormat: null
                - originalName: status
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: title
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: views_30d
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: views_7d
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
                - originalName: views_all
                  renameTo: null
                  size: 120
                  wrapText: null
                  displayFormat: null
              columnOrdering: null
              customColumnOrdering: null
              pinnedColumns: null
              hiddenColumns: null
              pinIndexColumns: false
              showAggregations: false
              columnAggregations: null
  - cellType: COLLAPSIBLE
    cellId: 9528474b-8e96-4358-a4d3-99210426df72 # DO NOT CHANGE - Hex uses this to match up cells when reimporting the file, and detect any changes to existing cells
    cellLabel: All projects
    config:
      labelStyle: AUTO
      cells:
        - cellType: MARKDOWN
          cellId: 11643ad4-663a-46f8-bec0-cb51d8a9ec18
          cellLabel: null
          config:
            source: |-
              # All Projects

              Use the table below to see things as you wish! By default, this is ordered by popularity in the past 30d. 
        - cellType: CODE
          cellId: 51f607da-0a91-4299-94da-3a36bcd68af5
          cellLabel: null
          config:
            source: all_projects_slim = all_projects[columns_to_display]
        - cellType: TABLE_DISPLAY
          cellId: 8625c98e-d55d-44db-b536-6b25e0eda6ae
          cellLabel: null
          config:
            dataFrameVariableName: all_projects_slim
            resultVariable: table_result_10
            tableDisplayConfig:
              pageSize: 200
              height: null
              hideIcons: false
              defaultColumnWidth: null
              hideIndex: false
              defaultSortColumn: views_30d
              defaultSortIndexColumn: null
              defaultSortDirection: DESC
              conditionalFormatting: null
              calcs: null
              filters: null
              columnProperties:
                - originalName: creator
                  renameTo: null
                  size: 188
                  wrapText: null
                  displayFormat: null
                - originalName: edit_url
                  renameTo: null
                  size: 400
                  wrapText: null
                  displayFormat: null
                - originalName: last_edited
                  renameTo: null
                  size: 188
                  wrapText: null
                  displayFormat: null
                - originalName: last_published
                  renameTo: null
                  size: 132
                  wrapText: null
                  displayFormat: null
                - originalName: owner
                  renameTo: null
                  size: 218
                  wrapText: null
                  displayFormat: null
                - originalName: row-index-0
                  renameTo: null
                  size: 46
                  wrapText: null
                  displayFormat: null
                - originalName: status
                  renameTo: null
                  size: 85
                  wrapText: null
                  displayFormat: null
                - originalName: title
                  renameTo: null
                  size: 249
                  wrapText: null
                  displayFormat: null
                - originalName: views_30d
                  renameTo: null
                  size: 110
                  wrapText: null
                  displayFormat: null
                - originalName: views_7d
                  renameTo: null
                  size: 103
                  wrapText: null
                  displayFormat: null
                - originalName: views_all
                  renameTo: null
                  size: 101
                  wrapText: null
                  displayFormat: null
              columnOrdering: null
              customColumnOrdering: null
              pinnedColumns: null
              hiddenColumns: null
              pinIndexColumns: false
              showAggregations: false
              columnAggregations: null
appLayout:
  visibleMetadataFields:
    - NAME
    - DESCRIPTION
    - AUTHOR
    - LAST_EDITED
    - LAST_RUN
    - CATEGORIES
    - STATUS
    - TABLE_OF_CONTENTS
  fullWidth: false
  tabs:
    - name: Project Rules
      rows:
        - columns:
            - start: 0
              end: 120
              elements:
                - showSource: false
                  hideOutput: false
                  type: CELL
                  cellId: b3617a66-b143-42ae-b721-59aed06ef76f
                  sharedFilterId: null
                  height: null
                  showLabel: true
        - columns:
            - start: 0
              end: 120
              elements:
                - showSource: false
                  hideOutput: false
                  type: CELL
                  cellId: 8a20e2e5-8545-444e-9e46-dca32e532cb6
                  sharedFilterId: null
                  height: null
                  showLabel: true
        - columns:
            - start: 0
              end: 120
              elements:
                - showSource: false
                  hideOutput: false
                  type: CELL
                  cellId: f8a8760f-c926-4f51-9b93-f47bb467d1eb
                  sharedFilterId: null
                  height: null
                  showLabel: true
        - columns:
            - start: 0
              end: 120
              elements:
                - showSource: false
                  hideOutput: false
                  type: CELL
                  cellId: 8731eda8-8384-47cd-adcc-afb1c98f3e5c
                  sharedFilterId: null
                  height: null
                  showLabel: true
    - name: Projects by Creator
      rows:
        - columns:
            - start: 0
              end: 30
              elements:
                - showSource: false
                  hideOutput: false
                  type: CELL
                  cellId: 335042d5-8709-49e2-b809-aba682dfa706
                  sharedFilterId: null
                  height: null
                  showLabel: true
        - columns:
            - start: 0
              end: 120
              elements:
                - showSource: false
                  hideOutput: false
                  type: CELL
                  cellId: 10cbaa7a-dccb-4e92-b404-d732fcd75219
                  sharedFilterId: null
                  height: null
                  showLabel: true
    - name: All projects
      rows:
        - columns:
            - start: 0
              end: 120
              elements:
                - showSource: false
                  hideOutput: false
                  type: CELL
                  cellId: 426e75a8-938a-418e-9616-598e3195de14
                  sharedFilterId: null
                  height: null
                  showLabel: true
sharedFilters: []
