Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
T
tosca2doc
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
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
CTI Tools
tosca2doc
Commits
400423f4
Commit
400423f4
authored
6 years ago
by
carignani
Browse files
Options
Downloads
Patches
Plain Diff
main renamed
parent
4ab1bfec
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
main.py
+0
-182
0 additions, 182 deletions
main.py
with
0 additions
and
182 deletions
main.py
deleted
100755 → 0
+
0
−
182
View file @
4ab1bfec
#!/usr/bin/python2.7
'''
Parses a TOSCA template and generates a docx file
'''
import
sys
import
toscaparser.utils.yamlparser
as
yaml
import
docx
from
docx.enum.text
import
WD_PARAGRAPH_ALIGNMENT
TEMPLATES
=
{}
FNS
=
{
'
VNFD
'
:
'
etsi_nfv_sol001_vnfd_2_5_1_types.yaml
'
,
'
NSD
'
:
'
etsi_nfv_sol001_nsd_2_5_1_types.yaml
'
,
'
PNFD
'
:
'
etsi_nfv_sol001_pnfd_2_5_1_types.yaml
'
}
TOSCA_TYPES
=
[
'
data_types
'
,
'
artifact_types
'
,
'
capability_types
'
,
'
requirements_types
'
,
'
relationship_types
'
,
'
interface_types
'
,
'
node_types
'
,
'
group_types
'
,
'
policy_types
'
]
TOSCA_TYPES_PRETTYPRINT
=
{
'
data_types
'
:
'
Data Types
'
,
'
artifact_types
'
:
'
Artifact Types
'
,
'
capability_types
'
:
'
Capability Types
'
,
'
requirements_types
'
:
'
Requirements types
'
,
'
relationship_types
'
:
'
Relationship Types
'
,
'
interface_types
'
:
'
Interface Types
'
,
'
node_types
'
:
'
Node Types
'
,
'
group_types
'
:
'
Group Types
'
,
'
policy_types
'
:
'
Policy Types
'
}
IDS
=
[
6
,
2
,
1
,
1
]
doc
=
docx
.
Document
()
def
load_template
(
file_path
,
templs
,
key
):
'''
Loads the content of the file at file_patch into the YAML templates array
'''
yaml_data
=
open
(
file_path
).
read
()
templs
[
key
]
=
yaml
.
simple_ordered_parse
(
yaml_data
)
def
print_lvl
(
num
,
txt
):
index
=
"
.
"
.
join
(
map
(
str
,
IDS
[:(
num
+
1
)]))
print
index
+
"
"
+
(
'
-
'
*
(
num
+
1
))
+
'
'
+
txt
def
add_heading_with_num
(
num
,
txt
):
'''
Add a new heading to the document, with the calculated index number
'''
index
=
"
.
"
.
join
(
map
(
str
,
IDS
[:(
num
+
1
)]))
doc
.
add_heading
(
index
+
"
"
+
txt
,
num
)
def
cell_text_bold
(
cell
):
cell
.
paragraphs
[
0
].
runs
[
0
].
font
.
bold
=
True
def
cell_text_centered
(
cell
):
cell
.
paragraphs
[
0
].
alignment
=
WD_PARAGRAPH_ALIGNMENT
.
CENTER
def
mk_props_table_hdr
(
table
):
hdr_cells
=
table
.
rows
[
0
].
cells
hdr_cells
[
0
].
text
=
'
Name
'
hdr_cells
[
1
].
text
=
'
Required
'
hdr_cells
[
2
].
text
=
'
Type
'
hdr_cells
[
3
].
text
=
'
Constraints
'
hdr_cells
[
4
].
text
=
'
Description
'
map
(
cell_text_bold
,
hdr_cells
)
map
(
cell_text_centered
,
hdr_cells
)
def
dt_name_from_path
(
dt_path
):
return
dt_path
.
split
(
'
.
'
)[
-
1
]
def
prop_field_to_str
(
prop_field
):
if
type
(
prop_field
)
==
bool
:
return
'
yes
'
if
prop_field
else
'
no
'
return
str
(
prop_field
)
def
add_prop_row
(
prop_name
,
prop_fields
,
table
):
'''
Add a row to table and fills it with info from prop
'''
nrow
=
table
.
add_row
()
prop_cells
=
nrow
.
cells
prop_cells
[
0
].
text
=
prop_name
all_fields
=
[
'
required
'
,
'
type
'
,
'
constraints
'
,
'
description
'
]
counter
=
1
for
field
in
all_fields
:
if
field
in
prop_fields
:
prop_cells
[
counter
].
text
=
prop_field_to_str
(
prop_fields
[
field
])
counter
=
counter
+
1
def
print_all_types
(
templ
,
lvl
):
for
tosca_type
in
TOSCA_TYPES
:
if
not
tosca_type
in
templ
:
continue
print_lvl
(
lvl
,
tosca_type
)
add_heading_with_num
(
lvl
,
TOSCA_TYPES_PRETTYPRINT
[
tosca_type
])
for
data_type
in
templ
[
tosca_type
]:
print_lvl
(
lvl
+
1
,
data_type
)
add_heading_with_num
(
lvl
+
1
,
data_type
)
if
'
description
'
in
templ
[
tosca_type
][
data_type
]:
print_lvl
(
lvl
+
2
,
'
Description
'
)
add_heading_with_num
(
lvl
+
2
,
'
Description
'
)
doc
.
add_paragraph
(
templ
[
tosca_type
][
data_type
][
'
description
'
])
IDS
[
lvl
+
2
]
=
IDS
[
lvl
+
2
]
+
1
if
'
properties
'
in
templ
[
tosca_type
][
data_type
]:
print_lvl
(
lvl
+
2
,
'
Properties
'
)
add_heading_with_num
(
lvl
+
2
,
'
Properties
'
)
# num_row = templ[tosca_type][data_type]['properties'].items()
doc
.
add_paragraph
(
"
The properties of the
"
+
dt_name_from_path
(
data_type
)
+
"
data type shall comply with the provisions set out in table REF_TBD.
"
)
table
=
doc
.
add_table
(
rows
=
1
,
cols
=
5
)
mk_props_table_hdr
(
table
)
for
prop
in
templ
[
tosca_type
][
data_type
][
'
properties
'
]:
# print "PROP: " + prop + ", VAL: " + str(templ[tosca_type][data_type]['properties'][prop])
add_prop_row
(
prop
,
templ
[
tosca_type
][
data_type
][
'
properties
'
][
prop
],
table
)
IDS
[
lvl
+
2
]
=
IDS
[
lvl
+
2
]
+
1
print_lvl
(
lvl
+
2
,
'
Definition
'
)
add_heading_with_num
(
lvl
+
2
,
'
Definition
'
)
doc
.
add_paragraph
(
"
The syntax of the
"
+
dt_name_from_path
(
data_type
)
+
"
data type shall comply with the following definition:
"
)
def_table
=
doc
.
add_table
(
rows
=
1
,
cols
=
1
)
def_table
.
rows
[
0
].
cells
[
0
].
text
=
'
TBD
'
IDS
[
lvl
+
2
]
=
IDS
[
lvl
+
2
]
+
1
print_lvl
(
lvl
+
2
,
'
Examples
'
)
add_heading_with_num
(
lvl
+
2
,
'
Examples
'
)
def_table
=
doc
.
add_table
(
rows
=
1
,
cols
=
1
)
def_table
.
rows
[
0
].
cells
[
0
].
text
=
'
TBD
'
IDS
[
lvl
+
2
]
=
IDS
[
lvl
+
2
]
+
1
print_lvl
(
lvl
+
2
,
'
Additional Requirements
'
)
add_heading_with_num
(
lvl
+
2
,
'
Additional Requirements
'
)
doc
.
add_paragraph
(
"
None.
"
)
IDS
[
lvl
+
2
]
=
IDS
[
lvl
+
2
]
+
1
IDS
[
lvl
+
1
]
=
IDS
[
lvl
+
1
]
+
1
IDS
[
lvl
+
2
]
=
1
IDS
[
lvl
+
1
]
=
1
IDS
[
lvl
]
=
IDS
[
lvl
]
+
1
IDS
[
lvl
]
=
2
FOLDR
=
sys
.
argv
[
1
]
if
__name__
==
"
__main__
"
:
if
len
(
sys
.
argv
)
<
2
:
print
"
Usage: robot2doc <robot_file_or_dir> [<out_file> [spec_section_title]]
"
print
"
Using folder:
"
+
sys
.
argv
[
1
]
for
fn
in
[
'
VNFD
'
,
'
NSD
'
,
'
PNFD
'
]:
load_template
(
FOLDR
+
'
/
'
+
FNS
[
fn
],
TEMPLATES
,
fn
)
print_lvl
(
0
,
fn
)
add_heading_with_num
(
0
,
fn
)
print_all_types
(
TEMPLATES
[
fn
],
1
)
IDS
[
0
]
=
IDS
[
0
]
+
1
doc
.
save
(
'
sol001.docx
'
)
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