Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
2022-158
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
2022-158
2022-158
Commits
a00527a1
Commit
a00527a1
authored
Oct 09, 2022
by
Thushara Thiwanka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CREATE: assignment type based uml generation added on backend
parent
0e8af41d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
64 additions
and
15 deletions
+64
-15
backend/models/assignment_model.py
backend/models/assignment_model.py
+1
-0
backend/routes/assignment_routes.py
backend/routes/assignment_routes.py
+10
-2
backend/routes/diagram_routes.py
backend/routes/diagram_routes.py
+31
-7
backend/services/question_preprocess_service.py
backend/services/question_preprocess_service.py
+22
-6
No files found.
backend/models/assignment_model.py
View file @
a00527a1
...
@@ -8,6 +8,7 @@ class Assignment(db.Model):
...
@@ -8,6 +8,7 @@ class Assignment(db.Model):
module_id
=
db
.
Column
(
db
.
Integer
,
db
.
ForeignKey
(
'module.id'
))
module_id
=
db
.
Column
(
db
.
Integer
,
db
.
ForeignKey
(
'module.id'
))
content
=
db
.
Column
(
db
.
String
(
800
),
nullable
=
False
)
content
=
db
.
Column
(
db
.
String
(
800
),
nullable
=
False
)
plagiarism_percentage
=
db
.
Column
(
db
.
Integer
,
nullable
=
False
)
plagiarism_percentage
=
db
.
Column
(
db
.
Integer
,
nullable
=
False
)
assignment_type
=
db
.
Column
(
db
.
Integer
,
nullable
=
False
)
start_at
=
db
.
Column
(
db
.
DateTime
,
default
=
datetime
.
now
())
start_at
=
db
.
Column
(
db
.
DateTime
,
default
=
datetime
.
now
())
end_at
=
db
.
Column
(
db
.
DateTime
)
end_at
=
db
.
Column
(
db
.
DateTime
)
created_at
=
db
.
Column
(
db
.
DateTime
,
default
=
datetime
.
now
())
created_at
=
db
.
Column
(
db
.
DateTime
,
default
=
datetime
.
now
())
...
...
backend/routes/assignment_routes.py
View file @
a00527a1
...
@@ -15,6 +15,7 @@ def create_assignment():
...
@@ -15,6 +15,7 @@ def create_assignment():
title
=
request
.
json
.
get
(
'title'
,
''
)
title
=
request
.
json
.
get
(
'title'
,
''
)
content
=
request
.
json
.
get
(
'content'
,
''
)
content
=
request
.
json
.
get
(
'content'
,
''
)
module_id
=
request
.
json
.
get
(
'module_id'
,
''
)
module_id
=
request
.
json
.
get
(
'module_id'
,
''
)
assignment_type
=
request
.
json
.
get
(
'assignment_type'
,
''
)
plagiarism_percentage
=
request
.
json
.
get
(
'plagiarism_percentage'
,
''
)
plagiarism_percentage
=
request
.
json
.
get
(
'plagiarism_percentage'
,
''
)
start_at
=
datetime
.
strptime
(
request
.
json
.
get
(
'start_at'
,
''
),
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
start_at
=
datetime
.
strptime
(
request
.
json
.
get
(
'start_at'
,
''
),
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
end_at
=
datetime
.
strptime
(
request
.
json
.
get
(
'end_at'
,
''
),
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
end_at
=
datetime
.
strptime
(
request
.
json
.
get
(
'end_at'
,
''
),
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
...
@@ -25,19 +26,21 @@ def create_assignment():
...
@@ -25,19 +26,21 @@ def create_assignment():
assignment_obj
=
Assignment
(
title
=
title
,
content
=
content
,
assignment_obj
=
Assignment
(
title
=
title
,
content
=
content
,
module_id
=
module_id
,
module_id
=
module_id
,
plagiarism_percentage
=
plagiarism_percentage
,
plagiarism_percentage
=
plagiarism_percentage
,
assignment_type
=
assignment_type
,
start_at
=
start_at
,
start_at
=
start_at
,
end_at
=
end_at
)
end_at
=
end_at
)
db
.
session
.
add
(
assignment_obj
)
db
.
session
.
add
(
assignment_obj
)
db
.
session
.
commit
()
db
.
session
.
commit
()
response
=
requests
.
post
(
url
=
"http://127.0.0.1:5000/api/v1/diagrams/generate"
,
response
=
requests
.
post
(
url
=
"http://127.0.0.1:5000/api/v1/diagrams/generate"
,
json
=
{
"scenario"
:
content
,
"assignment_id"
:
assignment_obj
.
id
})
json
=
{
"scenario"
:
content
,
"assignment_id"
:
assignment_obj
.
id
,
"assignment_type"
:
assignment_obj
.
assignment_type
})
if
response
.
ok
:
if
response
.
ok
:
return
jsonify
({
'msg'
:
'Assignment created'
,
'assignment'
:
{
return
jsonify
({
'msg'
:
'Assignment created'
,
'assignment'
:
{
'id'
:
assignment_obj
.
id
,
'id'
:
assignment_obj
.
id
,
'title'
:
assignment_obj
.
title
,
'title'
:
assignment_obj
.
title
,
'content'
:
assignment_obj
.
content
,
'content'
:
assignment_obj
.
content
,
'assignment_type'
:
assignment_obj
.
assignment_type
,
'module_id'
:
assignment_obj
.
module_id
,
'module_id'
:
assignment_obj
.
module_id
,
'plagiarism_percentage'
:
assignment_obj
.
plagiarism_percentage
,
'plagiarism_percentage'
:
assignment_obj
.
plagiarism_percentage
,
'start_at'
:
assignment_obj
.
start_at
,
'start_at'
:
assignment_obj
.
start_at
,
...
@@ -58,7 +61,7 @@ def get_assignments():
...
@@ -58,7 +61,7 @@ def get_assignments():
for
assignment
,
module
in
assignment_obj
:
for
assignment
,
module
in
assignment_obj
:
assignments
.
append
(
assignments
.
append
(
{
"id"
:
assignment
.
id
,
"title"
:
assignment
.
title
,
"module_id"
:
assignment
.
module_id
,
"code"
:
module
.
code
,
"name"
:
module
.
name
,
"start_at"
:
assignment
.
start_at
,
"end_at"
:
assignment
.
end_at
,
{
"id"
:
assignment
.
id
,
"title"
:
assignment
.
title
,
"module_id"
:
assignment
.
module_id
,
"code"
:
module
.
code
,
"name"
:
module
.
name
,
"start_at"
:
assignment
.
start_at
,
"end_at"
:
assignment
.
end_at
,
'assignment_type'
:
assignment
.
assignment_type
,
"created_at"
:
assignment
.
created_at
,
"updated_at"
:
assignment
.
updated_at
})
"created_at"
:
assignment
.
created_at
,
"updated_at"
:
assignment
.
updated_at
})
if
assignment_obj
is
None
:
if
assignment_obj
is
None
:
...
@@ -81,6 +84,7 @@ def get_assignment(assignment_id):
...
@@ -81,6 +84,7 @@ def get_assignment(assignment_id):
'id'
:
assignment_obj
.
id
,
'id'
:
assignment_obj
.
id
,
"title"
:
assignment_obj
.
title
,
"title"
:
assignment_obj
.
title
,
'content'
:
assignment_obj
.
content
,
'content'
:
assignment_obj
.
content
,
'assignment_type'
:
assignment_obj
.
assignment_type
,
'module_id'
:
assignment_obj
.
module_id
,
'module_id'
:
assignment_obj
.
module_id
,
'plagiarism_percentage'
:
assignment_obj
.
plagiarism_percentage
,
'plagiarism_percentage'
:
assignment_obj
.
plagiarism_percentage
,
'start_at'
:
assignment_obj
.
start_at
,
'start_at'
:
assignment_obj
.
start_at
,
...
@@ -105,6 +109,7 @@ def delete_assignment(assignment_id):
...
@@ -105,6 +109,7 @@ def delete_assignment(assignment_id):
'id'
:
assignment_obj
.
id
,
'id'
:
assignment_obj
.
id
,
"title"
:
assignment_obj
.
title
,
"title"
:
assignment_obj
.
title
,
'content'
:
assignment_obj
.
content
,
'content'
:
assignment_obj
.
content
,
'assignment_type'
:
assignment_obj
.
assignment_type
,
'module_id'
:
assignment_obj
.
module_id
,
'module_id'
:
assignment_obj
.
module_id
,
'plagiarism_percentage'
:
assignment_obj
.
plagiarism_percentage
,
'plagiarism_percentage'
:
assignment_obj
.
plagiarism_percentage
,
'start_at'
:
assignment_obj
.
start_at
,
'start_at'
:
assignment_obj
.
start_at
,
...
@@ -117,6 +122,7 @@ def update_assignment(assignment_id):
...
@@ -117,6 +122,7 @@ def update_assignment(assignment_id):
content
=
request
.
json
.
get
(
'content'
,
''
)
content
=
request
.
json
.
get
(
'content'
,
''
)
title
=
request
.
json
.
get
(
'title'
,
''
)
title
=
request
.
json
.
get
(
'title'
,
''
)
module_id
=
request
.
json
.
get
(
'module_id'
,
''
)
module_id
=
request
.
json
.
get
(
'module_id'
,
''
)
assignment_type
=
request
.
json
.
get
(
'assignment_type'
,
''
)
plagiarism_percentage
=
request
.
json
.
get
(
'plagiarism_percentage'
,
''
)
plagiarism_percentage
=
request
.
json
.
get
(
'plagiarism_percentage'
,
''
)
start_at
=
datetime
.
strptime
(
request
.
json
.
get
(
'start_at'
,
''
),
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
start_at
=
datetime
.
strptime
(
request
.
json
.
get
(
'start_at'
,
''
),
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
end_at
=
datetime
.
strptime
(
request
.
json
.
get
(
'end_at'
,
''
),
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
end_at
=
datetime
.
strptime
(
request
.
json
.
get
(
'end_at'
,
''
),
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
...
@@ -130,12 +136,14 @@ def update_assignment(assignment_id):
...
@@ -130,12 +136,14 @@ def update_assignment(assignment_id):
assignment_obj
.
plagiarism_percentage
=
plagiarism_percentage
assignment_obj
.
plagiarism_percentage
=
plagiarism_percentage
assignment_obj
.
start_at
=
start_at
assignment_obj
.
start_at
=
start_at
assignment_obj
.
end_at
=
end_at
assignment_obj
.
end_at
=
end_at
assignment_obj
.
assignment_type
=
assignment_type
db
.
session
.
commit
()
db
.
session
.
commit
()
return
jsonify
({
'msg'
:
'Assignment updated'
,
'assignment'
:
{
return
jsonify
({
'msg'
:
'Assignment updated'
,
'assignment'
:
{
'id'
:
assignment_obj
.
id
,
'id'
:
assignment_obj
.
id
,
"title"
:
assignment_obj
.
title
,
"title"
:
assignment_obj
.
title
,
'content'
:
assignment_obj
.
content
,
'content'
:
assignment_obj
.
content
,
'assignment_type'
:
assignment_obj
.
assignment_type
,
'module_id'
:
assignment_obj
.
module_id
,
'module_id'
:
assignment_obj
.
module_id
,
'plagiarism_percentage'
:
assignment_obj
.
plagiarism_percentage
,
'plagiarism_percentage'
:
assignment_obj
.
plagiarism_percentage
,
'start_at'
:
assignment_obj
.
start_at
,
'start_at'
:
assignment_obj
.
start_at
,
...
...
backend/routes/diagram_routes.py
View file @
a00527a1
...
@@ -12,26 +12,49 @@ diagram = Blueprint('diagrams', __name__, url_prefix='/api/v1/diagrams')
...
@@ -12,26 +12,49 @@ diagram = Blueprint('diagrams', __name__, url_prefix='/api/v1/diagrams')
@
diagram
.
post
(
'/generate'
)
@
diagram
.
post
(
'/generate'
)
def
generate_diagrams
():
def
generate_diagrams
():
try
:
try
:
generated_usecase_diagram_path
=
None
generated_class_diagram_path
=
None
data
=
request
.
get_json
(
silent
=
True
)
data
=
request
.
get_json
(
silent
=
True
)
if
data
is
None
:
if
data
is
None
:
return
jsonify
(
'Please attach assignment details'
),
HTTP_400_BAD_REQUEST
return
jsonify
(
'Please attach assignment details'
),
HTTP_400_BAD_REQUEST
generated_class_diagram_path
,
generated_usecase_diagram_path
=
services
.
question_preprocess_service
.
main
(
if
data
[
'assignment_type'
]
==
1
:
data
[
'scenario'
])
generated_usecase_diagram_path
=
services
.
question_preprocess_service
.
main
(
data
[
'scenario'
],
data
[
'assignment_type'
])
if
generated_usecase_diagram_path
or
generated_usecase_diagram_path
:
diagram_obj
=
Diagram
(
assignment_id
=
data
[
'assignment_id'
],
usecase_diagram_path
=
generated_usecase_diagram_path
,
class_diagram_path
=
None
)
elif
data
[
'assignment_type'
]
==
2
:
generated_class_diagram_path
=
services
.
question_preprocess_service
.
main
(
data
[
'scenario'
],
data
[
'assignment_type'
])
diagram_obj
=
Diagram
(
assignment_id
=
data
[
'assignment_id'
],
usecase_diagram_path
=
None
,
class_diagram_path
=
generated_class_diagram_path
)
elif
data
[
'assignment_type'
]
==
3
:
generated_class_diagram_path
,
generated_usecase_diagram_path
=
services
.
question_preprocess_service
.
main
(
data
[
'scenario'
],
data
[
'assignment_type'
])
diagram_obj
=
Diagram
(
assignment_id
=
data
[
'assignment_id'
],
diagram_obj
=
Diagram
(
assignment_id
=
data
[
'assignment_id'
],
usecase_diagram_path
=
generated_usecase_diagram_path
,
usecase_diagram_path
=
generated_usecase_diagram_path
,
class_diagram_path
=
generated_class_diagram_path
)
class_diagram_path
=
generated_class_diagram_path
)
db
.
session
.
add
(
diagram_obj
)
db
.
session
.
add
(
diagram_obj
)
db
.
session
.
commit
()
db
.
session
.
commit
()
else
:
else
:
return
jsonify
(
'Something went wrong'
),
HTTP_500_INTERNAL_SERVER_ERROR
return
jsonify
(
'Something went wrong'
),
HTTP_500_INTERNAL_SERVER_ERROR
return
jsonify
(
generated_class_diagram_path
=
generated_class_diagram_path
,
if
data
[
'assignment_type'
]
==
1
:
generated_usecase_diagram_path
=
generated_usecase_diagram_path
),
HTTP_200_OK
return
jsonify
(
generated_usecase_diagram_path
=
generated_usecase_diagram_path
),
HTTP_200_OK
if
data
[
'assignment_type'
]
==
2
:
return
jsonify
(
generated_class_diagram_path
=
generated_class_diagram_path
,
),
HTTP_200_OK
if
data
[
'assignment_type'
]
==
3
:
return
jsonify
(
generated_class_diagram_path
=
generated_class_diagram_path
,
generated_usecase_diagram_path
=
generated_usecase_diagram_path
),
HTTP_200_OK
except
Exception
or
BadRequestKeyError
:
except
Exception
or
BadRequestKeyError
:
if
BadRequestKeyError
:
if
BadRequestKeyError
:
...
@@ -46,4 +69,5 @@ def get_diagrams(assignment_id):
...
@@ -46,4 +69,5 @@ def get_diagrams(assignment_id):
if
diagram_obj
is
None
:
if
diagram_obj
is
None
:
return
jsonify
({
"err"
:
"No diagram found"
},
HTTP_404_NOT_FOUND
)
return
jsonify
({
"err"
:
"No diagram found"
},
HTTP_404_NOT_FOUND
)
return
jsonify
({
'msg'
:
'Diagrams found'
,
'diagrams'
:
{
'class_diagram'
:
diagram_obj
.
class_diagram_path
,
'usecase_diagram'
:
diagram_obj
.
usecase_diagram_path
}}),
HTTP_200_OK
return
jsonify
({
'msg'
:
'Diagrams found'
,
'diagrams'
:
{
'class_diagram'
:
diagram_obj
.
class_diagram_path
,
'usecase_diagram'
:
diagram_obj
.
usecase_diagram_path
}}),
HTTP_200_OK
backend/services/question_preprocess_service.py
View file @
a00527a1
...
@@ -23,8 +23,8 @@ def remove_punctuation(sentence):
...
@@ -23,8 +23,8 @@ def remove_punctuation(sentence):
return
cleaned_sentence
return
cleaned_sentence
# load the text
# load the text
content and generating diagrams
def
main
(
scenario
):
def
main
(
scenario
,
assignment_type
):
requirement_text
=
scenario
.
replace
(
"
\n\n
"
,
" "
)
.
replace
(
"
\n
"
,
" "
)
requirement_text
=
scenario
.
replace
(
"
\n\n
"
,
" "
)
.
replace
(
"
\n
"
,
" "
)
nlp
=
spacy
.
load
(
"en_core_web_lg"
)
nlp
=
spacy
.
load
(
"en_core_web_lg"
)
doc
=
nlp
(
requirement_text
)
doc
=
nlp
(
requirement_text
)
...
@@ -57,10 +57,26 @@ def main(scenario):
...
@@ -57,10 +57,26 @@ def main(scenario):
# remove duplicates of the actors
# remove duplicates of the actors
nc
=
list
(
dict
.
fromkeys
(
nc
))
nc
=
list
(
dict
.
fromkeys
(
nc
))
data
=
remove_unwanted_values
(
nc
)
data
=
remove_unwanted_values
(
nc
)
generated_class_diagram_path
=
generate_class
(
data
,
cleaned_extracted_actions
)
extracted_relationships
=
get_include_extend_relationships
(
splitted_actions_array
)
extracted_relationships
=
get_include_extend_relationships
(
splitted_actions_array
)
actors_and_use_cases_array
=
identify_use_cases
(
cleaned_extracted_actions
)
actors_and_use_cases_array
=
identify_use_cases
(
cleaned_extracted_actions
)
generated_usecase_diagram_path
=
generate_use_case_diagram
(
data
,
extracted_relationships
,
actors_and_use_cases_array
)
return
generated_class_diagram_path
,
generated_usecase_diagram_path
if
assignment_type
==
1
:
generated_usecase_diagram_path
=
generate_use_case_diagram
(
data
,
extracted_relationships
,
actors_and_use_cases_array
)
return
generated_usecase_diagram_path
elif
assignment_type
==
2
:
generated_class_diagram_path
=
generate_class
(
data
,
cleaned_extracted_actions
)
return
generated_class_diagram_path
elif
assignment_type
==
3
:
generated_class_diagram_path
=
generate_class
(
data
,
cleaned_extracted_actions
)
generated_usecase_diagram_path
=
generate_use_case_diagram
(
data
,
extracted_relationships
,
actors_and_use_cases_array
)
return
generated_class_diagram_path
,
generated_usecase_diagram_path
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a 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