Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Kontr 2.0
Portal API Backend
Commits
efe9a5e3
Verified
Commit
efe9a5e3
authored
Oct 11, 2018
by
Peter Stanko
Browse files
Import users using csv
parent
c9babed9
Changes
2
Hide whitespace changes
Inline
Side-by-side
app.py
View file @
efe9a5e3
...
@@ -105,6 +105,17 @@ def cli_users_list():
...
@@ -105,6 +105,17 @@ def cli_users_list():
manager
.
list_users
()
manager
.
list_users
()
@
users_cli
.
command
(
'import-csv'
,
help
=
'Import users from the csv'
)
@
click
.
argument
(
'course'
)
@
click
.
argument
(
'role'
)
@
click
.
argument
(
'group'
,
required
=
False
)
@
click
.
option
(
'-f'
,
'--file'
,
help
=
"From which file they should be imported, default is stdin"
,
required
=
False
)
def
cli_users_list
(
course
,
role
,
group
,
file
):
log
.
info
(
f
'[CMD] Importing users from the csv users'
)
manager
.
import_users
(
file
,
course
=
course
,
role
=
role
,
group
=
group
)
#
#
# Courses related commands
# Courses related commands
#
#
...
...
management/data/__init__.py
View file @
efe9a5e3
import
csv
import
datetime
import
datetime
import
sys
from
flask
import
Flask
from
flask
import
Flask
from
flask_sqlalchemy
import
SQLAlchemy
from
flask_sqlalchemy
import
SQLAlchemy
...
@@ -8,7 +10,7 @@ from management.data.data_dev import init_dev_data
...
@@ -8,7 +10,7 @@ from management.data.data_dev import init_dev_data
from
management.data.data_prod
import
init_prod_data
from
management.data.data_prod
import
init_prod_data
from
management.data.data_test
import
init_test_data
from
management.data.data_test
import
init_test_data
from
portal
import
logger
from
portal
import
logger
from
portal.database.models
import
Course
,
Role
,
Secret
,
Submission
,
SubmissionState
,
User
from
portal.database.models
import
Course
,
Group
,
Role
,
Secret
,
Submission
,
SubmissionState
,
User
from
portal.service.rest
import
RestService
from
portal.service.rest
import
RestService
from
portal.tools
import
time
from
portal.tools
import
time
...
@@ -183,4 +185,31 @@ class DataManagement(object):
...
@@ -183,4 +185,31 @@ class DataManagement(object):
user
=
self
.
rest
.
find
.
user
(
name
)
user
=
self
.
rest
.
find
.
user
(
name
)
user
.
secrets
.
append
(
Secret
(
name
=
'user-cli-secret'
,
value
=
secret
))
user
.
secrets
.
append
(
Secret
(
name
=
'user-cli-secret'
,
value
=
secret
))
log
.
debug
(
f
'[DATA] Created secret for user:
{
user
.
log_name
}
'
)
log
.
debug
(
f
'[DATA] Created secret for user:
{
user
.
log_name
}
'
)
self
.
db
.
session
.
commit
()
self
.
db
.
session
.
commit
()
\ No newline at end of file
def
import_users
(
self
,
file
,
course
=
None
,
role
=
None
,
group
=
None
):
with
self
.
app
.
app_context
():
if
role
:
role
=
self
.
rest
.
find
.
role
(
course
,
role
)
if
group
:
group
=
self
.
rest
.
find
.
group
(
course
,
group
)
users
=
self
.
_parse_csv_users
(
file
)
created_users
=
[]
for
user
in
users
:
created
=
self
.
rest
.
users
.
create
(
**
user
,
admin
=
False
)
created_users
.
append
(
created
)
self
.
_add_users_to_course
(
created_users
,
role
,
group
)
def
_parse_csv_users
(
self
,
file
=
None
):
fields
=
[
'username'
,
'uco'
,
'email'
,
'name'
]
if
file
is
None
:
return
csv
.
DictReader
(
sys
.
stdin
,
fieldnames
=
fields
)
with
open
(
file
)
as
f
:
return
csv
.
DictReader
(
f
,
fieldnames
=
fields
)
def
_add_users_to_course
(
self
,
created_users
,
role
:
Role
,
group
:
Group
):
for
user
in
created_users
:
if
role
:
self
.
rest
.
roles
(
role
).
add_client
(
user
)
if
group
:
self
.
rest
.
groups
(
group
).
add_user
(
user
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment