You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ma...@apache.org on 2024/03/25 23:55:07 UTC

(superset) branch pyproject.toml created (now be257ba597)

This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin pushed a change to branch pyproject.toml
in repository https://gitbox.apache.org/repos/asf/superset.git


      at be257ba597 chore: introduce a pyproject.toml

This branch includes the following new commits:

     new fbf765ffd3 feat: make supersetbot do what dependabot should do
     new 4938e955ca progress
     new f232bc1a8f dry
     new be257ba597 chore: introduce a pyproject.toml

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(superset) 01/04: feat: make supersetbot do what dependabot should do

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin pushed a commit to branch pyproject.toml
in repository https://gitbox.apache.org/repos/asf/superset.git

commit fbf765ffd36970eae5c67bcec75a4254f0b29af0
Author: Maxime Beauchemin <ma...@gmail.com>
AuthorDate: Mon Mar 25 13:03:24 2024 -0700

    feat: make supersetbot do what dependabot should do
---
 .github/supersetbot/src/cli.js    | 10 ++++++-
 .github/supersetbot/src/github.js | 52 +++++++++++++++++++++++++++++++++++
 .github/supersetbot/src/utils.js  | 57 +++++++++++++++++----------------------
 .github/workflows/supersetbot.yml |  1 +
 4 files changed, 86 insertions(+), 34 deletions(-)

diff --git a/.github/supersetbot/src/cli.js b/.github/supersetbot/src/cli.js
index 4b4612ee97..4cefa3567f 100755
--- a/.github/supersetbot/src/cli.js
+++ b/.github/supersetbot/src/cli.js
@@ -151,6 +151,14 @@ export default function getCLI(context) {
         await github.assignOrgLabel(opts.issue, opts.verbose, opts.dryRun);
       });
 
+    program.command('auto-bump <python-lib>')
+      .description('Submit a PR to bump the version of a package')
+      .action(async function (pythonLib) {
+        const opts = context.processOptions(this, ['repo']);
+        const github = new Github({ context });
+        github.createBumpLibPullRequest(pythonLib, opts.verbose, opts.dryRun);
+      });
+
 
     program.command('docker')
       .description('Generates/run docker build commands use in CI')
@@ -166,7 +174,7 @@ export default function getCLI(context) {
         const cmd = docker.getDockerCommand({ ...opts });
         context.log(cmd);
         if (!opts.dryRun) {
-          utils.runShellCommand(cmd, false);
+          utils.runShellCommand({ cmd, raiseOnError: false });
         }
       });
   }
diff --git a/.github/supersetbot/src/github.js b/.github/supersetbot/src/github.js
index 39d3e42e9f..f94b350de5 100644
--- a/.github/supersetbot/src/github.js
+++ b/.github/supersetbot/src/github.js
@@ -1,7 +1,12 @@
+import fs from 'fs';
+import os from 'os';
+import path from 'path';
+
 import { Octokit } from '@octokit/rest';
 import { throttling } from '@octokit/plugin-throttling';
 
 import { ORG_LIST, PROTECTED_LABEL_PATTERNS, COMMITTER_TEAM } from './metadata.js';
+import { runShellCommand } from './utils.js';
 
 class Github {
   #userInTeamCache;
@@ -247,6 +252,53 @@ class Github {
   static isLabelProtected(label) {
     return PROTECTED_LABEL_PATTERNS.some((pattern) => new RegExp(pattern).test(label));
   }
+
+  createBumpLibPullRequest(lib, verbose = false, dryRun = false) {
+    const cwd = fs.mkdtempSync(path.join(os.tmpdir(), 'update-'));
+    console.log("CWD:", cwd);
+
+    // Clone the repo
+    runShellCommand({ command: `git clone --depth 1 git@github.com:${this.context.repo} .`, cwd, verbose });
+
+    // Run pip-compile-multi
+    runShellCommand({ command: `pip-compile-multi -P ${lib}`, cwd });
+
+    // Check for changes
+    const status = runShellCommand({ command: 'git status --porcelain', cwd, raiseOnError: false, verbose });
+    if (!!status) {
+      console.log('No changes detected... skipping.');
+    } else {
+
+      // Create branch
+      const branchName = `bump-${lib}-${Date.now()}`;
+      runShellCommand({ command: `git checkout -b ${branchName}`, cwd, verbose });
+
+      // Commit changes
+      runShellCommand({ command: `git add .`, cwd });
+      const commitMessage = `chore(supersetbot): bump python library "${lib}"`;
+      runShellCommand({ command: `git commit -m "${commitMessage}"`, cwd, verbose });
+
+      // Push changes
+      runShellCommand({ command: `git push origin ${branchName}`, cwd, verbose });
+
+      if (!dryRun) {
+        // Create a PR
+        this.octokit.pulls.create({
+            ...this.unPackRepo(),
+            title: commitMessage,
+            head: branchName,
+            base: 'master',
+            body: `Updates the python "${lib}" library version. \n\nGenerated by @supersetbot 🤖`,
+        })
+        .then(({ data }) => {
+            console.log(`Pull request created: ${data.html_url}`);
+        })
+        .catch(console.error);
+      }
+    }
+    // Cleaning up
+    fs.rmSync(cwd, { recursive: true, force: true });
+  }
 }
 
 export default Github;
diff --git a/.github/supersetbot/src/utils.js b/.github/supersetbot/src/utils.js
index 97c6b2d8f5..07777c378e 100644
--- a/.github/supersetbot/src/utils.js
+++ b/.github/supersetbot/src/utils.js
@@ -17,7 +17,8 @@
  * under the License.
  */
 
-import { spawn } from 'child_process';
+import { spawnSync } from 'child_process';
+
 import { readFile } from 'fs/promises';
 import { fileURLToPath } from 'url';
 import path from 'path';
@@ -40,39 +41,29 @@ export async function currentPackageVersion() {
   return data.version;
 }
 
-export function runShellCommand(command, raiseOnError = true) {
-  return new Promise((resolve, reject) => {
-    // Split the command string into an array of arguments
-    const args = command.split(/\s+/).filter((s) => !!s && s !== '\\');
-    const childProcess = spawn(args.shift(), args);
-    let stdoutData = '';
-    let stderrData = '';
+export function runShellCommand({ command, raiseOnError = true, exitOnError = true, cwd = null, verbose = false }) {
+  const args = command.split(/\s+/).filter((s) => !!s && s !== '\\');
+  const spawnOptions = { stdio: 'inherit', shell: true };
+  if (verbose) {
+    console.log(`RUN: ${command}`);
+  }
+  if (cwd) {
+    spawnOptions.cwd = cwd;
+  }
 
-    // Capture stdout data
-    childProcess.stdout.on('data', (data) => {
-      stdoutData += data;
-      console.log(`stdout: ${data}`);
-    });
+  const result = spawnSync(args.shift(), args, spawnOptions);
 
-    // Capture stderr data
-    childProcess.stderr.on('data', (data) => {
-      stderrData += data;
-      console.error(`stderr: ${data}`);
-    });
+  if (result.status !== 0) {
+    const msg = `Command failed with exit code ${result.status}: ${result.stderr?.toString()}`;
+    console.error(msg);
+
+    if (raiseOnError) {
+      throw new Error(msg);
+    }
+    if (exitOnError) {
+      process.exit(1);
+    }
+  }
 
-    // Handle process exit
-    childProcess.on('close', (code) => {
-      if (code === 0) {
-        resolve(stdoutData);
-      } else {
-        const msg = `Command failed with code ${code}: ${stderrData}`;
-        if (raiseOnError) {
-          reject(new Error(msg));
-        } else {
-          console.error(msg);
-          process.exit(1);
-        }
-      }
-    });
-  });
+  return result.stdout?.toString();
 }
diff --git a/.github/workflows/supersetbot.yml b/.github/workflows/supersetbot.yml
index f336629676..cafda9b74b 100644
--- a/.github/workflows/supersetbot.yml
+++ b/.github/workflows/supersetbot.yml
@@ -51,6 +51,7 @@ jobs:
           COMMENT_BODY: ${{ github.event.comment.body }}
           INPUT_COMMENT_BODY: ${{ github.event.inputs.comment_body }}
         run: |
+          npm install -g supersetbot
           cat <<EOF > script.js
           const run = async () => {
             const { runCommandFromGithubAction } = await import('supersetbot');


(superset) 02/04: progress

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin pushed a commit to branch pyproject.toml
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 4938e955ca071aacb9c255691861ccee764545cc
Author: Maxime Beauchemin <ma...@gmail.com>
AuthorDate: Mon Mar 25 16:18:05 2024 -0700

    progress
---
 .github/supersetbot/src/cli.js    |  2 +-
 .github/supersetbot/src/github.js | 33 ++++++++++++--------
 .github/supersetbot/src/utils.js  | 64 ++++++++++++++++++++++++++-------------
 3 files changed, 65 insertions(+), 34 deletions(-)

diff --git a/.github/supersetbot/src/cli.js b/.github/supersetbot/src/cli.js
index 4cefa3567f..2241d0c232 100755
--- a/.github/supersetbot/src/cli.js
+++ b/.github/supersetbot/src/cli.js
@@ -156,7 +156,7 @@ export default function getCLI(context) {
       .action(async function (pythonLib) {
         const opts = context.processOptions(this, ['repo']);
         const github = new Github({ context });
-        github.createBumpLibPullRequest(pythonLib, opts.verbose, opts.dryRun);
+        await github.createBumpLibPullRequest(pythonLib, opts.verbose, opts.dryRun);
       });
 
 
diff --git a/.github/supersetbot/src/github.js b/.github/supersetbot/src/github.js
index f94b350de5..b2b0ca2849 100644
--- a/.github/supersetbot/src/github.js
+++ b/.github/supersetbot/src/github.js
@@ -253,33 +253,42 @@ class Github {
     return PROTECTED_LABEL_PATTERNS.some((pattern) => new RegExp(pattern).test(label));
   }
 
-  createBumpLibPullRequest(lib, verbose = false, dryRun = false) {
+  async createBumpLibPullRequest(lib, verbose = false, dryRun = false) {
     const cwd = fs.mkdtempSync(path.join(os.tmpdir(), 'update-'));
     console.log("CWD:", cwd);
 
     // Clone the repo
-    runShellCommand({ command: `git clone --depth 1 git@github.com:${this.context.repo} .`, cwd, verbose });
+    await runShellCommand({ command: `git clone --depth 1 git@github.com:${this.context.repo} .`, cwd, verbose });
 
     // Run pip-compile-multi
-    runShellCommand({ command: `pip-compile-multi -P ${lib}`, cwd });
+    await runShellCommand({ command: `pip-compile-multi -P ${lib}`, cwd });
 
-    // Check for changes
-    const status = runShellCommand({ command: 'git status --porcelain', cwd, raiseOnError: false, verbose });
-    if (!!status) {
+    // Diffing
+    const diffResults = await runShellCommand({ command: 'git diff --color=never --unified=0', cwd, raiseOnError: false, verbose, exitOnError: false });
+
+    const changed = diffResults.stdout.trim()
+      .split('\n')
+      .map((line) => line.trim())
+      .filter((line) => line.startsWith('+' + lib))
+      .map((line) => line.substring(1));
+
+    if (changed.length === 0) {
       console.log('No changes detected... skipping.');
     } else {
 
+      console.log("LIB:", changed[0]);
+
       // Create branch
-      const branchName = `bump-${lib}-${Date.now()}`;
-      runShellCommand({ command: `git checkout -b ${branchName}`, cwd, verbose });
+      const branchName = `supersetbot-bump-${changed[0]}`;
+      await runShellCommand({ command: `git checkout -b ${branchName}`, cwd, verbose });
 
       // Commit changes
-      runShellCommand({ command: `git add .`, cwd });
-      const commitMessage = `chore(supersetbot): bump python library "${lib}"`;
-      runShellCommand({ command: `git commit -m "${commitMessage}"`, cwd, verbose });
+      await runShellCommand({ command: `git add .`, cwd });
+      const commitMessage = `chore(🤖): bump python "${changed[0]}"`;
+      await runShellCommand({ command: `git commit -m "${commitMessage}"`, cwd, verbose });
 
       // Push changes
-      runShellCommand({ command: `git push origin ${branchName}`, cwd, verbose });
+      await runShellCommand({ command: `git push origin ${branchName}`, cwd, verbose });
 
       if (!dryRun) {
         // Create a PR
diff --git a/.github/supersetbot/src/utils.js b/.github/supersetbot/src/utils.js
index 07777c378e..8bc745a852 100644
--- a/.github/supersetbot/src/utils.js
+++ b/.github/supersetbot/src/utils.js
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-import { spawnSync } from 'child_process';
+import { spawn} from 'child_process';
 
 import { readFile } from 'fs/promises';
 import { fileURLToPath } from 'url';
@@ -41,29 +41,51 @@ export async function currentPackageVersion() {
   return data.version;
 }
 
+
 export function runShellCommand({ command, raiseOnError = true, exitOnError = true, cwd = null, verbose = false }) {
-  const args = command.split(/\s+/).filter((s) => !!s && s !== '\\');
-  const spawnOptions = { stdio: 'inherit', shell: true };
-  if (verbose) {
-    console.log(`RUN: ${command}`);
-  }
-  if (cwd) {
-    spawnOptions.cwd = cwd;
-  }
+  return new Promise((resolve, reject) => {
+    const args = command.split(/\s+/).filter((s) => !!s && s !== '\\');
+    const spawnOptions = {
+      shell: true,
+      cwd,
+    };
 
-  const result = spawnSync(args.shift(), args, spawnOptions);
+    if (verbose) {
+      console.log(`RUN: ${command}`);
+    }
 
-  if (result.status !== 0) {
-    const msg = `Command failed with exit code ${result.status}: ${result.stderr?.toString()}`;
-    console.error(msg);
+    const child = spawn(args.shift(), args, spawnOptions);
+    let stdout = '';
+    let stderr = '';
 
-    if (raiseOnError) {
-      throw new Error(msg);
-    }
-    if (exitOnError) {
-      process.exit(1);
-    }
-  }
+    child.stdout.on('data', (data) => {
+      console.log(data.toString());
+      stdout += data.toString();
+    });
+
+    child.stderr.on('data', (data) => {
+      console.log(data.toString());
+      stderr += data.toString();
+    });
+
+    child.on('close', (code) => {
+      if (code !== 0) {
+        const msg = `Command failed with exit code ${code}: ${stderr}`;
+        console.error(msg);
+
+        if (raiseOnError) {
+          reject(new Error(msg));
+        }
+        if (exitOnError) {
+          process.exit(1);
+        }
+      }
+
+      resolve({ stdout, stderr });
+    });
 
-  return result.stdout?.toString();
+    child.on('error', (err) => {
+      reject(err);
+    });
+  });
 }


(superset) 04/04: chore: introduce a pyproject.toml

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin pushed a commit to branch pyproject.toml
in repository https://gitbox.apache.org/repos/asf/superset.git

commit be257ba597b47114f0ba2473800a495e64fb6c8d
Author: Maxime Beauchemin <ma...@gmail.com>
AuthorDate: Mon Mar 25 16:52:26 2024 -0700

    chore: introduce a pyproject.toml
    
    This is the more common way of setting python project's metadata. My
    main driver for doing this is that it will allow us to read metadata
    directly from the toml file as opposed to trying an prase the setup.py
    module, which is a bad idea.
    
    dependabot may work better with toml, or if we write our own alternative
    as I'm afraid we'll have to do in there future.
---
 pyproject.toml | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 setup.py       | 141 --------------------------------------------------
 2 files changed, 158 insertions(+), 141 deletions(-)

diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000000..31d243edd5
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,158 @@
+[build-system]
+requires = ["setuptools>=40.9.0", "wheel"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "apache-superset"
+description = "A modern, enterprise-ready business intelligence web application"
+readme = "README.md"
+dynamic = ["version", "scripts", "entry-points", "license", "requires-python"]
+authors = [
+    { name = "Apache Software Foundation", email = "dev@superset.apache.org" },
+]
+classifiers = [
+    "Programming Language :: Python :: 3.9",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+]
+dependencies = [
+    "backoff>=1.8.0",
+    "celery>=5.3.6, <6.0.0",
+    "click>=8.0.3",
+    "click-option-group",
+    "colorama",
+    "croniter>=0.3.28",
+    "cron-descriptor",
+    "cryptography>=42.0.4, <43.0.0",
+    "deprecation>=2.1.0, <2.2.0",
+    "flask>=2.2.5, <3.0.0",
+    "flask-appbuilder>=4.4.1, <5.0.0",
+    "flask-caching>=2.1.0, <3",
+    "flask-compress>=1.13, <2.0",
+    "flask-talisman>=1.0.0, <2.0",
+    "flask-login>=0.6.0, < 1.0",
+    "flask-migrate>=3.1.0, <4.0",
+    "flask-session>=0.4.0, <1.0",
+    "flask-wtf>=1.1.0, <2.0",
+    "func_timeout",
+    "geopy",
+    "gunicorn>=21.2.0, <22.0; sys_platform != 'win32'",
+    "hashids>=1.3.1, <2",
+    "holidays>=0.25, <0.26",
+    "humanize",
+    "importlib_metadata",
+    "isodate",
+    "Mako>=1.2.2",
+    "markdown>=3.0",
+    "msgpack>=1.0.0, <1.1",
+    "nh3>=0.2.11, <0.3",
+    "numpy==1.23.5",
+    "packaging",
+    "pandas[performance]>=2.0.3, <2.1",
+    "parsedatetime",
+    "paramiko>=3.4.0",
+    "pgsanity",
+    "polyline>=2.0.0, <3.0",
+    "pyparsing>=3.0.6, <4",
+    "python-dateutil",
+    "python-dotenv",
+    "python-geohash",
+    "pyarrow>=14.0.1, <15",
+    "pyyaml>=6.0.0, <7.0.0",
+    "PyJWT>=2.4.0, <3.0",
+    "redis>=4.6.0, <5.0",
+    "selenium>=3.141.0, <4.10.0",
+    "shillelagh[gsheetsapi]>=1.2.10, <2.0",
+    "shortid",
+    "sshtunnel>=0.4.0, <0.5",
+    "simplejson>=3.15.0",
+    "slack_sdk>=3.19.0, <4",
+    "sqlalchemy>=1.4, <2",
+    "sqlalchemy-utils>=0.38.3, <0.39",
+    "sqlglot>=23.0.2,<24",
+    "sqlparse>=0.4.4, <0.5",
+    "tabulate>=0.8.9, <0.9",
+    "typing-extensions>=4, <5",
+    "waitress; sys_platform == 'win32'",
+    "wtforms>=2.3.3, <4",
+    "wtforms-json",
+    "xlsxwriter>=3.0.7, <3.1",
+]
+
+[project.optional-dependencies]
+
+athena = ["pyathena[pandas]>=2, <3"]
+aurora-data-api = ["preset-sqlalchemy-aurora-data-api>=0.2.8,<0.3"]
+bigquery = [
+    "pandas-gbq>=0.19.1",
+    "sqlalchemy-bigquery>=1.6.1",
+    "google-cloud-bigquery>=3.10.0",
+]
+clickhouse = ["clickhouse-connect>=0.5.14, <1.0"]
+cockroachdb = ["cockroachdb>=0.3.5, <0.4"]
+cors = ["flask-cors>=2.0.0"]
+crate = ["crate[sqlalchemy]>=0.26.0, <0.27"]
+databend = ["databend-sqlalchemy>=0.3.2, <1.0"]
+databricks = [
+    "databricks-sql-connector>=2.0.2, <3",
+    "sqlalchemy-databricks>=0.2.0",
+]
+db2 = ["ibm-db-sa>0.3.8, <=0.4.0"]
+dremio = ["sqlalchemy-dremio>=1.1.5, <1.3"]
+drill = ["sqlalchemy-drill>=1.1.4, <2"]
+druid = ["pydruid>=0.6.5,<0.7"]
+duckdb = ["duckdb-engine>=0.9.5, <0.10"]
+dynamodb = ["pydynamodb>=0.4.2"]
+solr = ["sqlalchemy-solr >= 0.2.0"]
+elasticsearch = ["elasticsearch-dbapi>=0.2.9, <0.3.0"]
+exasol = ["sqlalchemy-exasol >= 2.4.0, <3.0"]
+excel = ["xlrd>=1.2.0, <1.3"]
+firebird = ["sqlalchemy-firebird>=0.7.0, <0.8"]
+firebolt = ["firebolt-sqlalchemy>=1.0.0, <2"]
+gevent = ["gevent>=23.9.1"]
+gsheets = ["shillelagh[gsheetsapi]>=1.2.10, <2"]
+hana = ["hdbcli==2.4.162", "sqlalchemy_hana==0.4.0"]
+hive = [
+    "pyhive[hive]>=0.6.5;python_version<'3.11'",
+    "pyhive[hive_pure_sasl]>=0.7.0",
+    "tableschema",
+    "thrift>=0.14.1, <1.0.0",
+]
+impala = ["impyla>0.16.2, <0.17"]
+kusto = ["sqlalchemy-kusto>=2.0.0, <3"]
+kylin = ["kylinpy>=2.8.1, <2.9"]
+mssql = ["pymssql>=2.2.8, <3"]
+mysql = ["mysqlclient>=2.1.0, <3"]
+ocient = [
+    "sqlalchemy-ocient>=1.0.0",
+    "pyocient>=1.0.15, <2",
+    "shapely",
+    "geojson",
+]
+oracle = ["cx-Oracle>8.0.0, <8.1"]
+pinot = ["pinotdb>=0.3.3, <0.4"]
+playwright = ["playwright>=1.37.0, <2"]
+postgres = ["psycopg2-binary==2.9.6"]
+presto = ["pyhive[presto]>=0.6.5"]
+trino = ["trino>=0.328.0"]
+prophet = ["prophet>=1.1.5, <2"]
+redshift = ["sqlalchemy-redshift>=0.8.1, <0.9"]
+rockset = ["rockset-sqlalchemy>=0.0.1, <1"]
+shillelagh = ["shillelagh[all]>=1.2.10, <2"]
+snowflake = ["snowflake-sqlalchemy>=1.2.4, <2"]
+spark = [
+    "pyhive[hive]>=0.6.5;python_version<'3.11'",
+    "pyhive[hive_pure_sasl]>=0.7",
+    "tableschema",
+    "thrift>=0.14.1, <1",
+]
+teradata = ["teradatasql>=16.20.0.23"]
+thumbnails = ["Pillow>=10.0.1, <11"]
+vertica = ["sqlalchemy-vertica-python>=0.5.9, < 0.6"]
+netezza = ["nzalchemy>=11.0.2"]
+starrocks = ["starrocks>=1.0.0"]
+doris = ["pydoris>=1.0.0, <2.0.0"]
+
+[project.urls]
+homepage = "https://superset.apache.org/"
+documentation = "https://superset.apache.org/docs/intro"
diff --git a/setup.py b/setup.py
index 0db1afdb34..f8250f18d2 100644
--- a/setup.py
+++ b/setup.py
@@ -72,150 +72,9 @@ setup(
             "superset=superset.extensions.metadb:SupersetShillelaghAdapter"
         ],
     },
-    install_requires=[
-        "backoff>=1.8.0",
-        "celery>=5.3.6, <6.0.0",
-        "click>=8.0.3",
-        "click-option-group",
-        "colorama",
-        "croniter>=0.3.28",
-        "cron-descriptor",
-        "cryptography>=42.0.4, <43.0.0",
-        "deprecation>=2.1.0, <2.2.0",
-        "flask>=2.2.5, <3.0.0",
-        "flask-appbuilder>=4.4.1, <5.0.0",
-        "flask-caching>=2.1.0, <3",
-        "flask-compress>=1.13, <2.0",
-        "flask-talisman>=1.0.0, <2.0",
-        "flask-login>=0.6.0, < 1.0",
-        "flask-migrate>=3.1.0, <4.0",
-        "flask-session>=0.4.0, <1.0",
-        "flask-wtf>=1.1.0, <2.0",
-        "func_timeout",
-        "geopy",
-        "gunicorn>=21.2.0, <22.0; sys_platform != 'win32'",
-        "hashids>=1.3.1, <2",
-        "holidays>=0.25, <0.26",
-        "humanize",
-        "importlib_metadata",
-        "isodate",
-        "Mako>=1.2.2",
-        "markdown>=3.0",
-        "msgpack>=1.0.0, <1.1",
-        "nh3>=0.2.11, <0.3",
-        "numpy==1.23.5",
-        "packaging",
-        "pandas[performance]>=2.0.3, <2.1",
-        "parsedatetime",
-        "paramiko>=3.4.0",
-        "pgsanity",
-        "polyline>=2.0.0, <3.0",
-        "pyparsing>=3.0.6, <4",
-        "python-dateutil",
-        "python-dotenv",
-        "python-geohash",
-        "pyarrow>=14.0.1, <15",
-        "pyyaml>=6.0.0, <7.0.0",
-        "PyJWT>=2.4.0, <3.0",
-        "redis>=4.6.0, <5.0",
-        "selenium>=3.141.0, <4.10.0",
-        "shillelagh[gsheetsapi]>=1.2.10, <2.0",
-        "shortid",
-        "sshtunnel>=0.4.0, <0.5",
-        "simplejson>=3.15.0",
-        "slack_sdk>=3.19.0, <4",
-        "sqlalchemy>=1.4, <2",
-        "sqlalchemy-utils>=0.38.3, <0.39",
-        "sqlglot>=23.0.2,<24",
-        "sqlparse>=0.4.4, <0.5",
-        "tabulate>=0.8.9, <0.9",
-        "typing-extensions>=4, <5",
-        "waitress; sys_platform == 'win32'",
-        "wtforms>=2.3.3, <4",
-        "wtforms-json",
-        "xlsxwriter>=3.0.7, <3.1",
-    ],
-    extras_require={
-        "athena": ["pyathena[pandas]>=2, <3"],
-        "aurora-data-api": ["preset-sqlalchemy-aurora-data-api>=0.2.8,<0.3"],
-        "bigquery": [
-            "pandas-gbq>=0.19.1",
-            "sqlalchemy-bigquery>=1.6.1",
-            "google-cloud-bigquery>=3.10.0",
-        ],
-        "clickhouse": ["clickhouse-connect>=0.5.14, <1.0"],
-        "cockroachdb": ["cockroachdb>=0.3.5, <0.4"],
-        "cors": ["flask-cors>=2.0.0"],
-        "crate": ["crate[sqlalchemy]>=0.26.0, <0.27"],
-        "databend": ["databend-sqlalchemy>=0.3.2, <1.0"],
-        "databricks": [
-            "databricks-sql-connector>=2.0.2, <3",
-            "sqlalchemy-databricks>=0.2.0",
-        ],
-        "db2": ["ibm-db-sa>0.3.8, <=0.4.0"],
-        "dremio": ["sqlalchemy-dremio>=1.1.5, <1.3"],
-        "drill": ["sqlalchemy-drill>=1.1.4, <2"],
-        "druid": ["pydruid>=0.6.5,<0.7"],
-        "duckdb": ["duckdb-engine>=0.9.5, <0.10"],
-        "dynamodb": ["pydynamodb>=0.4.2"],
-        "solr": ["sqlalchemy-solr >= 0.2.0"],
-        "elasticsearch": ["elasticsearch-dbapi>=0.2.9, <0.3.0"],
-        "exasol": ["sqlalchemy-exasol >= 2.4.0, <3.0"],
-        "excel": ["xlrd>=1.2.0, <1.3"],
-        "firebird": ["sqlalchemy-firebird>=0.7.0, <0.8"],
-        "firebolt": ["firebolt-sqlalchemy>=1.0.0, <2"],
-        "gevent": ["gevent>=23.9.1"],
-        "gsheets": ["shillelagh[gsheetsapi]>=1.2.10, <2"],
-        "hana": ["hdbcli==2.4.162", "sqlalchemy_hana==0.4.0"],
-        "hive": [
-            "pyhive[hive]>=0.6.5;python_version<'3.11'",
-            "pyhive[hive_pure_sasl]>=0.7.0",
-            "tableschema",
-            "thrift>=0.14.1, <1.0.0",
-        ],
-        "impala": ["impyla>0.16.2, <0.17"],
-        "kusto": ["sqlalchemy-kusto>=2.0.0, <3"],
-        "kylin": ["kylinpy>=2.8.1, <2.9"],
-        "mssql": ["pymssql>=2.2.8, <3"],
-        "mysql": ["mysqlclient>=2.1.0, <3"],
-        "ocient": [
-            "sqlalchemy-ocient>=1.0.0",
-            "pyocient>=1.0.15, <2",
-            "shapely",
-            "geojson",
-        ],
-        "oracle": ["cx-Oracle>8.0.0, <8.1"],
-        "pinot": ["pinotdb>=0.3.3, <0.4"],
-        "playwright": ["playwright>=1.37.0, <2"],
-        "postgres": ["psycopg2-binary==2.9.6"],
-        "presto": ["pyhive[presto]>=0.6.5"],
-        "trino": ["trino>=0.328.0"],
-        "prophet": ["prophet>=1.1.5, <2"],
-        "redshift": ["sqlalchemy-redshift>=0.8.1, <0.9"],
-        "rockset": ["rockset-sqlalchemy>=0.0.1, <1"],
-        "shillelagh": ["shillelagh[all]>=1.2.10, <2"],
-        "snowflake": ["snowflake-sqlalchemy>=1.2.4, <2"],
-        "spark": [
-            "pyhive[hive]>=0.6.5;python_version<'3.11'",
-            "pyhive[hive_pure_sasl]>=0.7",
-            "tableschema",
-            "thrift>=0.14.1, <1",
-        ],
-        "teradata": ["teradatasql>=16.20.0.23"],
-        "thumbnails": ["Pillow>=10.0.1, <11"],
-        "vertica": ["sqlalchemy-vertica-python>=0.5.9, < 0.6"],
-        "netezza": ["nzalchemy>=11.0.2"],
-        "starrocks": ["starrocks>=1.0.0"],
-        "doris": ["pydoris>=1.0.0, <2.0.0"],
-    },
     python_requires="~=3.9",
     author="Apache Software Foundation",
     author_email="dev@superset.apache.org",
     url="https://superset.apache.org/",
     download_url="https://www.apache.org/dist/superset/" + version_string,
-    classifiers=[
-        "Programming Language :: Python :: 3.9",
-        "Programming Language :: Python :: 3.10",
-        "Programming Language :: Python :: 3.11",
-    ],
 )


(superset) 03/04: dry

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin pushed a commit to branch pyproject.toml
in repository https://gitbox.apache.org/repos/asf/superset.git

commit f232bc1a8fd9f9b368ef89ecab6d1c8153271c55
Author: Maxime Beauchemin <ma...@gmail.com>
AuthorDate: Mon Mar 25 16:29:32 2024 -0700

    dry
---
 .github/supersetbot/src/github.js | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/.github/supersetbot/src/github.js b/.github/supersetbot/src/github.js
index b2b0ca2849..7b2eeada1a 100644
--- a/.github/supersetbot/src/github.js
+++ b/.github/supersetbot/src/github.js
@@ -287,10 +287,11 @@ class Github {
       const commitMessage = `chore(🤖): bump python "${changed[0]}"`;
       await runShellCommand({ command: `git commit -m "${commitMessage}"`, cwd, verbose });
 
-      // Push changes
-      await runShellCommand({ command: `git push origin ${branchName}`, cwd, verbose });
-
       if (!dryRun) {
+
+        // Push changes
+        await runShellCommand({ command: `git push origin ${branchName}`, cwd, verbose });
+
         // Create a PR
         this.octokit.pulls.create({
             ...this.unPackRepo(),
@@ -303,6 +304,7 @@ class Github {
             console.log(`Pull request created: ${data.html_url}`);
         })
         .catch(console.error);
+
       }
     }
     // Cleaning up