Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
CaosDB Crawler
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
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
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
caosdb
Software
CaosDB Crawler
Commits
d616fba5
Verified
Commit
d616fba5
authored
1 year ago
by
Daniel Hornung
Browse files
Options
Downloads
Patches
Plain Diff
MAINT: Linting, typos.
parent
97614aa2
No related branches found
No related tags found
2 merge requests
!178
FIX: #96 Better error output for crawl.py script.
,
!167
Sync Graph
Pipeline
#50784
passed with warnings
1 year ago
Stage: info
Stage: setup
Stage: cert
Stage: style
Stage: test
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/caoscrawler/converters.py
+33
-32
33 additions, 32 deletions
src/caoscrawler/converters.py
with
33 additions
and
32 deletions
src/caoscrawler/converters.py
+
33
−
32
View file @
d616fba5
...
@@ -34,7 +34,7 @@ import warnings
...
@@ -34,7 +34,7 @@ import warnings
from
abc
import
ABCMeta
,
abstractmethod
from
abc
import
ABCMeta
,
abstractmethod
from
inspect
import
signature
from
inspect
import
signature
from
string
import
Template
from
string
import
Template
from
typing
import
Any
,
List
,
Optional
,
Tuple
,
Union
from
typing
import
Any
,
Optional
,
Union
import
linkahead
as
db
import
linkahead
as
db
import
pandas
as
pd
import
pandas
as
pd
...
@@ -134,8 +134,8 @@ def replace_variables(propvalue: Any, values: GeneralStore):
...
@@ -134,8 +134,8 @@ def replace_variables(propvalue: Any, values: GeneralStore):
This function replaces variables in property values (and possibly other locations,
This function replaces variables in property values (and possibly other locations,
where the crawler can replace cfood-internal variables).
where the crawler can replace cfood-internal variables).
If `propvalue` is a single variable name preceeded
with a
'
$
'
(e.g.
'
$var
'
or
'
${var}
'
), then
If
`
`propvalue`
`
is a single variable name preceeded
by a ``$``
(e.g.
``
$var
``
or
``
${var}
``),
the corresponding value stored in `values` is returned.
then
the corresponding value stored in
`
`values`
`
is returned.
In any other case the variable substitution is carried out as defined by string templates
In any other case the variable substitution is carried out as defined by string templates
and a new string with the replaced variables is returned.
and a new string with the replaced variables is returned.
"""
"""
...
@@ -160,16 +160,16 @@ def handle_value(value: Union[dict, str, list], values: GeneralStore):
...
@@ -160,16 +160,16 @@ def handle_value(value: Union[dict, str, list], values: GeneralStore):
add as an additional property (multiproperty).
add as an additional property (multiproperty).
Variable names (starting with a
"
$
"
) are replaced by the corresponding value stored in the
Variable names (starting with a
"
$
"
) are replaced by the corresponding value stored in the
`values` GeneralStore.
`
`values`
`
GeneralStore.
Parameters
Parameters
----------
----------
value:
value:
Union[dict, str, list]
-
i
f str, the value to be interpreted. E.g.
"
4
"
,
"
h
a
llo
"
or
"
$a
"
etc.
-
I
f
*
str
*
, the value to be interpreted. E.g.
"
4
"
,
"
h
e
llo
"
or
"
$a
"
etc.
-
i
f dict, must have keys
"
value
"
and
"
collection_mode
"
. The returned tuple is directly
-
I
f
*
dict
*
, must have keys
``
value
``
and
``
collection_mode
``
. The returned tuple is directly
created from the corresponding values.
created from the corresponding values.
-
i
f list, each element is checked for replacement and the resulting list will be used
-
I
f
*
list
*
, each element is checked for replacement and the resulting list will be used
as (list) value for the property
as (list) value for the property
Returns
Returns
...
@@ -181,7 +181,7 @@ out: tuple
...
@@ -181,7 +181,7 @@ out: tuple
"""
"""
# @review Florian Spreckelsen 2022-05-13
# @review Florian Spreckelsen 2022-05-13
if
typ
e
(
value
)
==
dict
:
if
isinstanc
e
(
value
,
dict
)
:
if
"
value
"
not
in
value
:
if
"
value
"
not
in
value
:
# TODO: how do we handle this case? Just ignore?
# TODO: how do we handle this case? Just ignore?
# or disallow?
# or disallow?
...
@@ -189,7 +189,7 @@ out: tuple
...
@@ -189,7 +189,7 @@ out: tuple
propvalue
=
value
[
"
value
"
]
propvalue
=
value
[
"
value
"
]
# can be "single", "list" or "multiproperty"
# can be "single", "list" or "multiproperty"
collection_mode
=
value
[
"
collection_mode
"
]
collection_mode
=
value
[
"
collection_mode
"
]
elif
typ
e
(
value
)
==
str
:
elif
isinstanc
e
(
value
,
str
)
:
propvalue
=
value
propvalue
=
value
collection_mode
=
"
single
"
collection_mode
=
"
single
"
if
propvalue
.
startswith
(
"
+
"
):
if
propvalue
.
startswith
(
"
+
"
):
...
@@ -198,7 +198,7 @@ out: tuple
...
@@ -198,7 +198,7 @@ out: tuple
elif
propvalue
.
startswith
(
"
*
"
):
elif
propvalue
.
startswith
(
"
*
"
):
collection_mode
=
"
multiproperty
"
collection_mode
=
"
multiproperty
"
propvalue
=
propvalue
[
1
:]
propvalue
=
propvalue
[
1
:]
elif
typ
e
(
value
)
==
list
:
elif
isinstanc
e
(
value
,
list
)
:
# TODO: (for review)
# TODO: (for review)
# This is a bit dirty right now and needed for
# This is a bit dirty right now and needed for
# being able to directly set list values. Semantics is, however, a bit
# being able to directly set list values. Semantics is, however, a bit
...
@@ -209,7 +209,7 @@ out: tuple
...
@@ -209,7 +209,7 @@ out: tuple
propvalue
=
list
()
propvalue
=
list
()
for
element
in
value
:
for
element
in
value
:
# Do the element-wise replacement only, when its type is string:
# Do the element-wise replacement only, when its type is string:
if
typ
e
(
element
)
==
str
:
if
isinstanc
e
(
element
,
str
)
:
propvalue
.
append
(
replace_variables
(
element
,
values
))
propvalue
.
append
(
replace_variables
(
element
,
values
))
else
:
else
:
propvalue
.
append
(
element
)
propvalue
.
append
(
element
)
...
@@ -322,10 +322,12 @@ class Converter(object, metaclass=ABCMeta):
...
@@ -322,10 +322,12 @@ class Converter(object, metaclass=ABCMeta):
Parameters
Parameters
----------
----------
definition: dict, Please refer to ``src/doc/converters.rst`` to learn about the structure
definition: dict
that the definition dict must have.
Please refer to ``src/doc/converters.rst`` to learn about the structure that the
converter_registry: dict, A dictionary that contains converter names as keys and dicts as
definition dict must have.
values. Those value dicts have the keys
'
converter
'
and
'
package
'
.
converter_registry: dict
A dictionary that contains converter names as keys and dicts as values. Those value dicts
have the keys
'
converter
'
and
'
package
'
.
"""
"""
self
.
definition
=
definition
self
.
definition
=
definition
...
@@ -424,7 +426,7 @@ class Converter(object, metaclass=ABCMeta):
...
@@ -424,7 +426,7 @@ class Converter(object, metaclass=ABCMeta):
pass
pass
"""
"""
if
not
"
transform
"
in
self
.
definition
:
if
"
transform
"
not
in
self
.
definition
:
return
return
for
transformer_key
,
transformer
in
self
.
definition
[
"
transform
"
].
items
():
for
transformer_key
,
transformer
in
self
.
definition
[
"
transform
"
].
items
():
in_value
=
replace_variables
(
transformer
[
"
in
"
],
values
)
in_value
=
replace_variables
(
transformer
[
"
in
"
],
values
)
...
@@ -460,8 +462,7 @@ class Converter(object, metaclass=ABCMeta):
...
@@ -460,8 +462,7 @@ class Converter(object, metaclass=ABCMeta):
values
[
match
.
group
(
'
varname
'
)]
=
out_value
values
[
match
.
group
(
'
varname
'
)]
=
out_value
@abstractmethod
@abstractmethod
def
create_children
(
self
,
values
:
GeneralStore
,
def
create_children
(
self
,
values
:
GeneralStore
,
element
:
StructureElement
):
element
:
StructureElement
):
pass
pass
def
create_records
(
self
,
values
:
GeneralStore
,
records
:
RecordStore
,
def
create_records
(
self
,
values
:
GeneralStore
,
records
:
RecordStore
,
...
@@ -477,7 +478,7 @@ class Converter(object, metaclass=ABCMeta):
...
@@ -477,7 +478,7 @@ class Converter(object, metaclass=ABCMeta):
self
.
definition
[
"
records
"
])
self
.
definition
[
"
records
"
])
def
filter_children
(
self
,
children_with_strings
:
def
filter_children
(
self
,
children_with_strings
:
L
ist
[
T
uple
[
StructureElement
,
str
]],
expr
:
str
,
l
ist
[
t
uple
[
StructureElement
,
str
]],
expr
:
str
,
group
:
str
,
rule
:
str
):
group
:
str
,
rule
:
str
):
"""
Filter children according to regexp `expr` and `rule`.
"""
"""
Filter children according to regexp `expr` and `rule`.
"""
...
@@ -620,7 +621,7 @@ class DirectoryConverter(Converter):
...
@@ -620,7 +621,7 @@ class DirectoryConverter(Converter):
element: A directory (of type Directory) which will be traversed.
element: A directory (of type Directory) which will be traversed.
"""
"""
children
:
L
ist
[
StructureElement
]
=
[]
children
:
l
ist
[
StructureElement
]
=
[]
for
name
in
sorted
(
os
.
listdir
(
element
.
path
)):
for
name
in
sorted
(
os
.
listdir
(
element
.
path
)):
path
=
os
.
path
.
join
(
element
.
path
,
name
)
path
=
os
.
path
.
join
(
element
.
path
,
name
)
...
@@ -660,7 +661,7 @@ class SimpleFileConverter(Converter):
...
@@ -660,7 +661,7 @@ class SimpleFileConverter(Converter):
class
FileConverter
(
SimpleFileConverter
):
class
FileConverter
(
SimpleFileConverter
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
warnings
.
warn
(
DeprecationWarning
(
warnings
.
warn
(
DeprecationWarning
(
"
This class is depr
i
cated. Please use SimpleFileConverter.
"
))
"
This class is depr
e
cated. Please use SimpleFileConverter.
"
))
super
().
__init__
(
*
args
,
**
kwargs
)
super
().
__init__
(
*
args
,
**
kwargs
)
...
@@ -693,12 +694,12 @@ class MarkdownFileConverter(SimpleFileConverter):
...
@@ -693,12 +694,12 @@ class MarkdownFileConverter(SimpleFileConverter):
"
Error during the validation (yaml header cannot be read) of the markdown file
"
"
Error during the validation (yaml header cannot be read) of the markdown file
"
"
located at the following node in the data structure:
\n
"
"
located at the following node in the data structure:
\n
"
"
{}
\n
Error:
\n
{}
"
.
format
(
path
,
err
))
"
{}
\n
Error:
\n
{}
"
.
format
(
path
,
err
))
children
:
L
ist
[
StructureElement
]
=
[]
children
:
l
ist
[
StructureElement
]
=
[]
for
name
,
entry
in
header
.
items
():
for
name
,
entry
in
header
.
items
():
if
typ
e
(
entry
)
==
list
:
if
isinstanc
e
(
entry
,
list
)
:
children
.
append
(
ListElement
(
name
,
entry
))
children
.
append
(
ListElement
(
name
,
entry
))
elif
typ
e
(
entry
)
==
str
:
elif
isinstanc
e
(
entry
,
str
)
:
children
.
append
(
TextElement
(
name
,
entry
))
children
.
append
(
TextElement
(
name
,
entry
))
else
:
else
:
if
generalStore
is
not
None
and
self
.
name
in
generalStore
:
if
generalStore
is
not
None
and
self
.
name
in
generalStore
:
...
@@ -814,14 +815,14 @@ class DictElementConverter(Converter):
...
@@ -814,14 +815,14 @@ class DictElementConverter(Converter):
class
DictConverter
(
DictElementConverter
):
class
DictConverter
(
DictElementConverter
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
warnings
.
warn
(
DeprecationWarning
(
warnings
.
warn
(
DeprecationWarning
(
"
This class is depr
i
cated. Please use DictConverter.
"
))
"
This class is depr
e
cated. Please use DictConverter.
"
))
super
().
__init__
(
*
args
,
**
kwargs
)
super
().
__init__
(
*
args
,
**
kwargs
)
class
DictDictElementConverter
(
DictElementConverter
):
class
DictDictElementConverter
(
DictElementConverter
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
warnings
.
warn
(
DeprecationWarning
(
warnings
.
warn
(
DeprecationWarning
(
"
This class is depr
i
cated. Please use DictElementConverter.
"
))
"
This class is depr
e
cated. Please use DictElementConverter.
"
))
super
().
__init__
(
*
args
,
**
kwargs
)
super
().
__init__
(
*
args
,
**
kwargs
)
...
@@ -1009,7 +1010,7 @@ class BooleanElementConverter(_AbstractScalarValueElementConverter):
...
@@ -1009,7 +1010,7 @@ class BooleanElementConverter(_AbstractScalarValueElementConverter):
class
DictBooleanElementConverter
(
BooleanElementConverter
):
class
DictBooleanElementConverter
(
BooleanElementConverter
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
warnings
.
warn
(
DeprecationWarning
(
warnings
.
warn
(
DeprecationWarning
(
"
This class is depr
i
cated. Please use BooleanElementConverter.
"
))
"
This class is depr
e
cated. Please use BooleanElementConverter.
"
))
super
().
__init__
(
*
args
,
**
kwargs
)
super
().
__init__
(
*
args
,
**
kwargs
)
...
@@ -1025,7 +1026,7 @@ class FloatElementConverter(_AbstractScalarValueElementConverter):
...
@@ -1025,7 +1026,7 @@ class FloatElementConverter(_AbstractScalarValueElementConverter):
class
DictFloatElementConverter
(
FloatElementConverter
):
class
DictFloatElementConverter
(
FloatElementConverter
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
warnings
.
warn
(
DeprecationWarning
(
warnings
.
warn
(
DeprecationWarning
(
"
This class is depr
i
cated. Please use FloatElementConverter.
"
))
"
This class is depr
e
cated. Please use FloatElementConverter.
"
))
super
().
__init__
(
*
args
,
**
kwargs
)
super
().
__init__
(
*
args
,
**
kwargs
)
...
@@ -1050,7 +1051,7 @@ the 'match_value' key to match the value of the TextElement and 'match_name' for
...
@@ -1050,7 +1051,7 @@ the 'match_value' key to match the value of the TextElement and 'match_name' for
class
DictTextElementConverter
(
TextElementConverter
):
class
DictTextElementConverter
(
TextElementConverter
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
warnings
.
warn
(
DeprecationWarning
(
warnings
.
warn
(
DeprecationWarning
(
"
This class is depr
i
cated. Please use TextElementConverter.
"
))
"
This class is depr
e
cated. Please use TextElementConverter.
"
))
super
().
__init__
(
*
args
,
**
kwargs
)
super
().
__init__
(
*
args
,
**
kwargs
)
...
@@ -1066,7 +1067,7 @@ class IntegerElementConverter(_AbstractScalarValueElementConverter):
...
@@ -1066,7 +1067,7 @@ class IntegerElementConverter(_AbstractScalarValueElementConverter):
class
DictIntegerElementConverter
(
IntegerElementConverter
):
class
DictIntegerElementConverter
(
IntegerElementConverter
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
warnings
.
warn
(
DeprecationWarning
(
warnings
.
warn
(
DeprecationWarning
(
"
This class is depr
i
cated. Please use IntegerElementConverter.
"
))
"
This class is depr
e
cated. Please use IntegerElementConverter.
"
))
super
().
__init__
(
*
args
,
**
kwargs
)
super
().
__init__
(
*
args
,
**
kwargs
)
...
@@ -1108,7 +1109,7 @@ class ListElementConverter(Converter):
...
@@ -1108,7 +1109,7 @@ class ListElementConverter(Converter):
class
DictListElementConverter
(
ListElementConverter
):
class
DictListElementConverter
(
ListElementConverter
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
warnings
.
warn
(
DeprecationWarning
(
warnings
.
warn
(
DeprecationWarning
(
"
This class is depr
i
cated. Please use ListElementConverter.
"
))
"
This class is depr
e
cated. Please use ListElementConverter.
"
))
super
().
__init__
(
*
args
,
**
kwargs
)
super
().
__init__
(
*
args
,
**
kwargs
)
...
...
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