99 lines
2.5 KiB
Python
99 lines
2.5 KiB
Python
# Copyright 2022 Google LLC
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
from textwrap import indent
|
|
import click
|
|
import json
|
|
import random
|
|
from faker import Faker
|
|
|
|
ENCODING = 'UTF8'
|
|
|
|
FIELD_USER_FIRST_NAME = 'first_name'
|
|
FIELD_USER_LAST_NAME = 'last_name'
|
|
FIELD_USER_USERNAME = 'username'
|
|
FIELD_USER_PASSWORD = 'password'
|
|
|
|
FIELD_MEMBERSHIP_GROUP = 'group'
|
|
FIELD_MEMBERSHIP_MEMBER = 'member'
|
|
|
|
fake = Faker()
|
|
|
|
@ click.group()
|
|
def cli():
|
|
pass
|
|
|
|
@ cli.command()
|
|
@ click.option(
|
|
"--num-users",
|
|
help="Number of users to create",
|
|
default=10,
|
|
)
|
|
@click.option(
|
|
"--output-file",
|
|
help="Output file",
|
|
default="users.json",
|
|
)
|
|
def create_users(num_users, output_file):
|
|
rows = []
|
|
for i in range(1, num_users):
|
|
row = {}
|
|
row[FIELD_USER_FIRST_NAME] = fake.first_name()
|
|
row[FIELD_USER_LAST_NAME] = fake.last_name()
|
|
row[FIELD_USER_USERNAME] = row[FIELD_USER_FIRST_NAME].lower() + "." + \
|
|
row[FIELD_USER_LAST_NAME].lower()
|
|
row[FIELD_USER_PASSWORD] = fake.password()
|
|
rows.append(row)
|
|
write_json(output_file, rows)
|
|
|
|
@cli.command()
|
|
@click.option(
|
|
"--users-file",
|
|
help="Users file",
|
|
default="users.json",
|
|
)
|
|
@click.option(
|
|
"--groups-file",
|
|
help="Groups file",
|
|
default="groups.json",
|
|
)
|
|
@click.option(
|
|
"--output-file",
|
|
help="Output file",
|
|
default="memberships.json",
|
|
)
|
|
def create_memberships(users_file, groups_file, output_file):
|
|
users = read_json(users_file)
|
|
groups = read_json(groups_file)
|
|
rows = []
|
|
for group in groups:
|
|
members = random.sample(users, random.randint(0, len(users) - 1))
|
|
for member in members:
|
|
row = {}
|
|
row[FIELD_MEMBERSHIP_GROUP] = group
|
|
row[FIELD_MEMBERSHIP_MEMBER] = member[FIELD_USER_USERNAME]
|
|
rows.append(row)
|
|
write_json(output_file, rows)
|
|
|
|
def write_json(file, rows):
|
|
with open(file, 'w') as f:
|
|
json.dump(rows, f, indent=2)
|
|
|
|
def read_json(file):
|
|
with open(file, 'r', encoding='UTF8') as f:
|
|
return json.load(f)
|
|
|
|
if __name__ == "__main__":
|
|
cli()
|