Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
Lesson Template
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
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
prace-lessons
Lesson Template
Commits
f0cfabbe
Commit
f0cfabbe
authored
10 years ago
by
Raniere Silva
Browse files
Options
Downloads
Patches
Plain Diff
Add prototype of check
parent
4ab43b32
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
tools/check
+120
-4
120 additions, 4 deletions
tools/check
with
120 additions
and
4 deletions
tools/check
+
120
−
4
View file @
f0cfabbe
#!/usr/bin/env bash
#!/usr/bin/python
#
# Software Carpentry Lesson Validator
#
# Check for errors at Software Carpentry lessons.
#
# Usage:
#
# $ tools/check
# Placeholder for actual conformance checking script (which will
# probably be Python, not Bash).
import
os
import
os.path
import
re
grep
-i
-n
'FIX''ME'
$*
import
yaml
def
report_error
(
file_path
,
line_number
,
line
,
error_message
):
print
(
"
Error at line {} of {}:
\n\t
{}
\n
{}
"
.
format
(
line_number
,
file_path
,
line
,
error_message
))
def
report_missing
(
file_path
,
missing_element
):
print
(
"
Error on {}: missing {}
"
.
format
(
file_path
,
missing_element
))
def
report_missing_metadata
(
missing_element
):
print
(
"
Error on YAML header: missing {}
"
.
format
(
missing_element
))
def
report_broken_link
(
file_path
,
line_number
,
link
):
print
(
"
Broken link at line {} of {}:
\n\t
Can
'
t find {}.
"
.
format
(
line_number
,
file_path
,
link
))
def
check_yaml
(
metadata
,
skip
=
[]):
"""
Check if all metadata are present at YAML header.
:param skip: list of keys to skip check
"""
metadata_required
=
[
"
layout
"
,
"
title
"
,
"
minutes
"
]
for
key
in
metadata_required
:
if
key
not
in
skip
and
key
not
in
metadata
:
report_missing_metadata
(
key
)
def
check_lesson
(
file_path
):
pass
def
check_discussion
(
file_path
):
pass
def
check_index
(
file_path
):
# State variables
in_yaml
=
False
yaml_metadata
=
[]
has_prerequisites
=
False
has_topics
=
False
has_other_resources
=
False
# Load file and process it
with
open
(
file_path
,
'
r
'
)
as
lines
:
for
line_number
,
line
in
enumerate
(
lines
):
if
re
.
match
(
'
---
'
,
line
):
in_yaml
=
not
in_yaml
elif
in_yaml
:
yaml_metadata
.
append
(
line
)
elif
re
.
match
(
'
> ## Prerequisites
'
,
line
):
has_prerequisites
=
True
elif
re
.
match
(
'
## Topics
'
,
line
):
has_topics
=
True
elif
re
.
match
(
'
## Other Resources
'
,
line
):
has_other_resources
=
True
else
:
# Check if local links are valid
matches
=
re
.
search
(
'
\[.*\]\((?P<link>.*)\)
'
,
line
)
if
matches
and
not
matches
.
group
(
"
link
"
).
startswith
(
"
http
"
):
link
=
os
.
path
.
join
(
os
.
path
.
dirname
(
file_path
),
matches
.
group
(
"
link
"
))
if
link
.
endswith
(
"
.html
"
):
link
=
link
.
replace
(
"
html
"
,
"
md
"
)
if
not
os
.
path
.
exists
(
link
):
report_broken_link
(
file_path
,
line_number
,
link
)
# Check YAML
yaml_metadata
=
yaml
.
load
(
'
\n
'
.
join
(
yaml_metadata
))
check_yaml
(
yaml_metadata
,
[
"
minutes
"
])
# Check sections
if
not
has_prerequisites
:
report_missing
(
file_path
,
"
Prerequisites
"
)
if
not
has_topics
:
report_missing
(
file_path
,
"
Topics
"
)
if
not
has_other_resources
:
report_missing
(
file_path
,
"
Other Resources
"
)
def
check_intructors
(
file_path
):
pass
def
check_motivation
(
file_path
):
pass
def
check_reference
(
file_path
):
pass
def
check_file
(
file_path
):
if
re
.
search
(
'
[0-9]{2}-.*
'
,
file_path
):
check_lesson
(
file_path
)
elif
re
.
search
(
'
discussion
'
,
file_path
):
check_discussion
(
file_path
)
elif
re
.
search
(
'
index
'
,
file_path
):
check_index
(
file_path
)
elif
re
.
search
(
'
instructors
'
,
file_path
):
check_intructors
(
file_path
)
elif
re
.
search
(
"
motivation
"
,
file_path
):
check_motivation
(
file_path
)
elif
re
.
search
(
"
reference
"
,
file_path
):
check_reference
(
file_path
)
def
main
():
lessons_file
=
os
.
listdir
(
"
pages
"
)
for
lesson
in
lessons_file
:
if
lesson
.
endswith
(
'
.md
'
):
check_file
(
'
pages/{}
'
.
format
(
lesson
))
if
__name__
==
"
__main__
"
:
main
()
This diff is collapsed.
Click to expand it.
Preview
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!
Save comment
Cancel
Please
register
or
sign in
to comment