Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
practical-work-manager
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ISC
projects
practical-work-manager
Commits
1e3b67fb
Commit
1e3b67fb
authored
3 years ago
by
Florent Gluck
Browse files
Options
Downloads
Patches
Plain Diff
Factorized URLs
parent
d48a6282
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
pwm
+17
-16
17 additions, 16 deletions
pwm
with
17 additions
and
16 deletions
pwm
+
17
−
16
View file @
1e3b67fb
...
@@ -2,8 +2,8 @@
...
@@ -2,8 +2,8 @@
"""
"""
Practical Work Manager (pwm)
Practical Work Manager (pwm)
Steven Liatti
Steven Liatti
, Florent Gluck
2020
2020
-2022
"""
"""
from
argparse
import
Namespace
from
argparse
import
Namespace
...
@@ -16,8 +16,9 @@ from requests.models import Response
...
@@ -16,8 +16,9 @@ from requests.models import Response
import
yaml
import
yaml
import
json
import
json
BASE_URL
:
str
=
'
https://gitedu.hesge.ch/api/v4
'
BASE_URL
:
str
=
'
https://gitedu.hesge.ch
'
BASE_API_URL
:
str
=
BASE_URL
+
'
/api/v4
'
TOKEN_URL
:
str
=
BASE_URL
+
'
/profile/personal_access_tokens
'
def
create_group
(
token
:
str
,
name
:
str
,
visibility
:
str
=
'
private
'
)
->
str
:
def
create_group
(
token
:
str
,
name
:
str
,
visibility
:
str
=
'
private
'
)
->
str
:
"""
"""
...
@@ -27,7 +28,7 @@ def create_group(token: str, name: str, visibility: str = 'private') -> str:
...
@@ -27,7 +28,7 @@ def create_group(token: str, name: str, visibility: str = 'private') -> str:
params
=
{
'
path
'
:
name
,
'
name
'
:
name
,
'
visibility
'
:
visibility
}
params
=
{
'
path
'
:
name
,
'
name
'
:
name
,
'
visibility
'
:
visibility
}
headers
=
{
'
PRIVATE-TOKEN
'
:
token
}
headers
=
{
'
PRIVATE-TOKEN
'
:
token
}
group
=
requests
.
post
(
BASE_URL
+
'
/groups
'
,
group
=
requests
.
post
(
BASE_
API_
URL
+
'
/groups
'
,
params
=
params
,
headers
=
headers
).
json
()
params
=
params
,
headers
=
headers
).
json
()
if
'
message
'
in
group
:
if
'
message
'
in
group
:
print
(
'
Error in creating group: %s
'
%
group
)
print
(
'
Error in creating group: %s
'
%
group
)
...
@@ -44,7 +45,7 @@ def delete_group(token: str, group_id: str):
...
@@ -44,7 +45,7 @@ def delete_group(token: str, group_id: str):
"""
"""
headers
=
{
'
PRIVATE-TOKEN
'
:
token
}
headers
=
{
'
PRIVATE-TOKEN
'
:
token
}
deleted_group
=
requests
.
delete
(
deleted_group
=
requests
.
delete
(
BASE_URL
+
'
/groups/
'
+
group_id
,
headers
=
headers
).
json
()
BASE_
API_
URL
+
'
/groups/
'
+
group_id
,
headers
=
headers
).
json
()
if
'
message
'
in
deleted_group
:
if
'
message
'
in
deleted_group
:
if
deleted_group
[
'
message
'
]
!=
'
202 Accepted
'
:
if
deleted_group
[
'
message
'
]
!=
'
202 Accepted
'
:
print
(
'
Error in deleting group: %s
'
%
deleted_group
)
print
(
'
Error in deleting group: %s
'
%
deleted_group
)
...
@@ -60,7 +61,7 @@ def emails_to_ids(emails: List[str], headers: Dict[str, str]) -> List[int]:
...
@@ -60,7 +61,7 @@ def emails_to_ids(emails: List[str], headers: Dict[str, str]) -> List[int]:
user_ids
=
[]
user_ids
=
[]
for
email
in
emails
:
for
email
in
emails
:
user_requested
=
requests
.
get
(
user_requested
=
requests
.
get
(
BASE_URL
+
'
/users
'
,
params
=
{
'
search
'
:
email
},
headers
=
headers
).
json
()
BASE_
API_
URL
+
'
/users
'
,
params
=
{
'
search
'
:
email
},
headers
=
headers
).
json
()
if
len
(
user_requested
)
==
0
:
if
len
(
user_requested
)
==
0
:
print
(
'
No user %s found, operation aborted
'
%
email
)
print
(
'
No user %s found, operation aborted
'
%
email
)
exit
(
1
)
exit
(
1
)
...
@@ -79,7 +80,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i
...
@@ -79,7 +80,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i
params
=
{
'
name
'
:
name
,
'
namespace_id
'
:
group_id
,
'
visibility
'
:
'
private
'
}
params
=
{
'
name
'
:
name
,
'
namespace_id
'
:
group_id
,
'
visibility
'
:
'
private
'
}
if
import_url
:
if
import_url
:
params
[
'
import_url
'
]
=
import_url
params
[
'
import_url
'
]
=
import_url
project
=
requests
.
post
(
BASE_URL
+
'
/projects
'
,
project
=
requests
.
post
(
BASE_
API_
URL
+
'
/projects
'
,
params
=
params
,
headers
=
headers
).
json
()
params
=
params
,
headers
=
headers
).
json
()
if
'
message
'
in
project
:
if
'
message
'
in
project
:
print
(
'
Error in creating project: %s
'
%
project
)
print
(
'
Error in creating project: %s
'
%
project
)
...
@@ -91,7 +92,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i
...
@@ -91,7 +92,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i
access_level
=
30
access_level
=
30
params
=
{
'
name
'
:
'
master
'
,
'
push_access_level
'
:
str
(
params
=
{
'
name
'
:
'
master
'
,
'
push_access_level
'
:
str
(
access_level
),
'
merge_access_level
'
:
str
(
access_level
)}
access_level
),
'
merge_access_level
'
:
str
(
access_level
)}
requests
.
post
(
BASE_URL
+
'
/projects/
'
+
requests
.
post
(
BASE_
API_
URL
+
'
/projects/
'
+
str
(
project
[
'
id
'
])
+
'
/protected_branches
'
,
params
=
params
,
headers
=
headers
).
json
()
str
(
project
[
'
id
'
])
+
'
/protected_branches
'
,
params
=
params
,
headers
=
headers
).
json
()
# Get students ids from their emails
# Get students ids from their emails
...
@@ -102,7 +103,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i
...
@@ -102,7 +103,7 @@ def create_repository(token: str, group_id: str, emails: List[str], name: str, i
params
=
{
'
user_id
'
:
user_id
,
'
access_level
'
:
access_level
}
params
=
{
'
user_id
'
:
user_id
,
'
access_level
'
:
access_level
}
if
expires_at
:
if
expires_at
:
params
[
'
expires_at
'
]
=
expires_at
params
[
'
expires_at
'
]
=
expires_at
new_user
=
requests
.
post
(
BASE_URL
+
'
/projects/
'
+
str
(
new_user
=
requests
.
post
(
BASE_
API_
URL
+
'
/projects/
'
+
str
(
project
[
'
id
'
])
+
'
/members
'
,
params
=
params
,
headers
=
headers
).
json
()
project
[
'
id
'
])
+
'
/members
'
,
params
=
params
,
headers
=
headers
).
json
()
if
'
message
'
in
new_user
:
if
'
message
'
in
new_user
:
print
(
'
Error in adding user: %s
'
%
new_user
)
print
(
'
Error in adding user: %s
'
%
new_user
)
...
@@ -134,7 +135,7 @@ def get_members(token: str, id: str) -> List:
...
@@ -134,7 +135,7 @@ def get_members(token: str, id: str) -> List:
"""
"""
Return members list from given id
Return members list from given id
"""
"""
url
=
BASE_URL
+
'
/projects/
'
+
id
+
'
/members
'
url
=
BASE_
API_
URL
+
'
/projects/
'
+
id
+
'
/members
'
headers
=
{
'
PRIVATE-TOKEN
'
:
token
}
headers
=
{
'
PRIVATE-TOKEN
'
:
token
}
params
=
{
'
simple
'
:
'
true
'
,
'
order_by
'
:
'
name
'
,
params
=
{
'
simple
'
:
'
true
'
,
'
order_by
'
:
'
name
'
,
...
@@ -152,9 +153,9 @@ def get_projects(token: str, id: str, source: str = 'group') -> List:
...
@@ -152,9 +153,9 @@ def get_projects(token: str, id: str, source: str = 'group') -> List:
Return projects list from given id and source (
'
group
'
or
'
forks
'
)
Return projects list from given id and source (
'
group
'
or
'
forks
'
)
"""
"""
if
source
==
'
forks
'
:
if
source
==
'
forks
'
:
url
=
BASE_URL
+
'
/projects/
'
+
id
+
'
/forks
'
url
=
BASE_
API_
URL
+
'
/projects/
'
+
id
+
'
/forks
'
else
:
else
:
url
=
BASE_URL
+
'
/groups/
'
+
id
+
'
/projects
'
url
=
BASE_
API_
URL
+
'
/groups/
'
+
id
+
'
/projects
'
headers
=
{
'
PRIVATE-TOKEN
'
:
token
}
headers
=
{
'
PRIVATE-TOKEN
'
:
token
}
params
=
{
'
simple
'
:
'
true
'
,
'
order_by
'
:
'
name
'
,
params
=
{
'
simple
'
:
'
true
'
,
'
order_by
'
:
'
name
'
,
...
@@ -182,7 +183,7 @@ def clone_all(token: str, id: str, directory: str, until_date: Optional[str], so
...
@@ -182,7 +183,7 @@ def clone_all(token: str, id: str, directory: str, until_date: Optional[str], so
repositories
=
get_projects
(
token
,
id
,
source
)
repositories
=
get_projects
(
token
,
id
,
source
)
for
repo
in
repositories
:
for
repo
in
repositories
:
repo_url
=
BASE_URL
+
'
/projects/
'
+
str
(
repo
[
'
id
'
])
+
'
/members
'
repo_url
=
BASE_
API_
URL
+
'
/projects/
'
+
str
(
repo
[
'
id
'
])
+
'
/members
'
members
=
requests
.
get
(
repo_url
,
headers
=
headers
).
json
()
members
=
requests
.
get
(
repo_url
,
headers
=
headers
).
json
()
if
'
message
'
in
members
:
if
'
message
'
in
members
:
print
(
'
Error retrieving members:
'
+
members
[
'
message
'
])
print
(
'
Error retrieving members:
'
+
members
[
'
message
'
])
...
@@ -351,7 +352,7 @@ if __name__ == '__main__':
...
@@ -351,7 +352,7 @@ if __name__ == '__main__':
Manage students PW - Create group, projects or clone repositories
'
)
Manage students PW - Create group, projects or clone repositories
'
)
parser
.
set_defaults
(
func
=
lambda
_
:
parser
.
print_help
())
parser
.
set_defaults
(
func
=
lambda
_
:
parser
.
print_help
())
parser
.
add_argument
(
"
-t
"
,
"
--token
"
,
metavar
=
"
TOKEN
"
,
parser
.
add_argument
(
"
-t
"
,
"
--token
"
,
metavar
=
"
TOKEN
"
,
help
=
"
Create a token here:
https://gitedu.hesge.ch/profile/personal_access_tokens
"
)
help
=
"
Create a token here:
"
+
TOKEN_URL
)
subparsers
=
parser
.
add_subparsers
(
subparsers
=
parser
.
add_subparsers
(
metavar
=
'
(group_repos | group | repo | clone | list)
'
)
metavar
=
'
(group_repos | group | repo | clone | list)
'
)
...
@@ -441,7 +442,7 @@ if __name__ == '__main__':
...
@@ -441,7 +442,7 @@ if __name__ == '__main__':
elif
os
.
environ
.
get
(
'
GITEDU_TOKEN
'
):
elif
os
.
environ
.
get
(
'
GITEDU_TOKEN
'
):
args
.
token
=
os
.
environ
.
get
(
'
GITEDU_TOKEN
'
)
args
.
token
=
os
.
environ
.
get
(
'
GITEDU_TOKEN
'
)
else
:
else
:
print
(
'
Error: you must give a valid api token. Create a token here:
https://gitedu.hesge.ch/profile/personal_access_tokens
'
)
print
(
'
Error: you must give a valid api token. Create a token here:
'
+
TOKEN_URL
)
exit
(
1
)
exit
(
1
)
args
.
func
(
args
)
args
.
func
(
args
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment