Bug description

Hello,

superset fab list-users list all users on the database but all colums are not returned. Apache Superset superset fab list-users return username, email, role but not firstname, lastname, active

username, email, role are listed but not firstname, lastname, active

colums in database are : Apache Superset superset fab list-users return username, email, role but not firstname, lastname, active

Best regards

How to reproduce the bug

superset fab list-users

Screenshots/recordings

No response

Superset version

master / latest-dev

Python version

3.9

Node version

16

Browser

Chrome

Additional context

No response

Checklist

  • [ ] I have searched Superset docs and Slack and didn't find a solution to my problem.
  • [ ] I have searched the GitHub issue tracker and didn't find a similar bug report.
  • [ ] I have checked Superset's logs for errors and if I found a relevant Python stacktrace, I included it here as text in the "additional context" section.

Comment From: dosubot[bot]

The superset fab list-users command does not include the firstname, lastname, and active columns in its output because these columns are not specified in the list_columns attribute of the UserModelView class. The list_columns attribute determines which columns are displayed when listing users.

To include the firstname, lastname, and active columns in the output, you need to modify the UserModelView class to specify these columns in the list_columns attribute. Here is an example of how you can do this:

from flask_appbuilder import ModelView
from flask_appbuilder.security.sqla.models import User

class CustomUserModelView(ModelView):
    datamodel = SQLAInterface(User)
    list_columns = ["id", "username", "firstname", "lastname", "active", "email"]

appbuilder.add_view(
    CustomUserModelView,
    "List Users",
    icon="fa-user",
    label=_("List Users"),
    category="Security",
    category_icon="fa-cogs",
)

By adding the firstname, lastname, and active columns to the list_columns attribute, they will be included in the output of the superset fab list-users command [1].

#### Details **About Dosu** This response is meant to be useful and save you time. It is **not meant to be a precise solution**, but rather a starting point for your own research. Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

Comment From: xavier-GitHub76

@dosu where the superset fab list-users command is defined ?

Comment From: dosubot[bot]

The superset fab list-users command is implemented in the superset/cli/fab.py file. The entry point for the CLI is the superset function in the superset/cli/main.py file, which dynamically adds sub-commands from the superset.cli package, including the list-users command.

Here is a snippet showing how sub-commands are added:

# superset/cli/main.py
@click.group(
    cls=FlaskGroup,
    context_settings={"token_normalize_func": normalize_token},
)
@with_appcontext
def superset() -> None:
    """\033[1;37mThe Apache Superset CLI\033[0m"""
    @app.shell_context_processor
    def make_shell_context() -> dict[str, Any]:
        return {"app": app, "db": db}

# add sub-commands
for load, module_name, is_pkg in pkgutil.walk_packages(
    cli.__path__, cli.__name__ + "."
):
    module = importlib.import_module(module_name)
    for attribute in module.__dict__.values():
        if isinstance(attribute, (click.core.Command, click.core.Group)):
            superset.add_command(attribute)

            if isinstance(attribute, click.core.Group):
                break

This setup allows the superset CLI to include various sub-commands defined in the superset.cli package [1].

#### Details **About Dosu** This response is meant to be useful and save you time. It is **not meant to be a precise solution**, but rather a starting point for your own research. Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

Comment From: xavier-GitHub76

@dosu I find superset/cli/main.py file but not superset/cli/fab.py file

Comment From: dosubot[bot]

It appears there might be some confusion or outdated information regarding the file structure. The list-users command and its related functionalities might be located in a different file or have been refactored.

To locate the exact implementation of the list-users command, you can search for the command definition within the superset/cli directory. Look for files that define CLI commands using the click library, as this is commonly used for command-line interfaces in Python.

If you need to modify the output of the list-users command to include firstname, lastname, and active columns, you can refer to the UserResponseSchema class in the superset/views/users/schemas.py file, which already includes these fields:

class UserResponseSchema(Schema):
    id = Integer()
    username = String()
    email = String()
    first_name = String()
    last_name = String()
    is_active = Boolean()
    is_anonymous = Boolean()

Additionally, the bootstrap_user_data function in the superset/views/utils.py file can be used to fetch these details:

def bootstrap_user_data(user: User, include_perms: bool = False) -> dict[str, Any]:
    payload = {
        "username": user.username,
        "firstName": user.first_name,
        "lastName": user.last_name,
        "isActive": user.is_active,
        "isAnonymous": user.is_anonymous,
    }
    return payload

These utilities can help you extend the list-users command to include the desired columns [1][2].

#### Details **About Dosu** This response is meant to be useful and save you time. It is **not meant to be a precise solution**, but rather a starting point for your own research. Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

Comment From: rusackas

@dpgaspar might know if this is a bug or intentional by design for some reason.

Comment From: rusackas

Is this still the case in 4.1.1? I seem to recall a PR that added some of these fields, but I haven't gone to check yet.

Comment From: xavier-GitHub76

It's present on 5.0.0RC1

Image

Comment From: rusackas

Fair enough! Thanks for the update. I'm tempted to move this to an "Ideas" thread since it's more feature request than bug, but I'll leave it here for now. PRs welcomed from anyone on the thread, as this isn't likely to be prioritized by the usual core committers.