8.5. Has Parsers¶
8.5.1. Has¶
Getting Started¶
Lets import our easydata module first.
>>> import easydata as ed
Has
supports any query object for fetching data.
>>> test_dict = {'info': {'stock': True}}
>>> ed.Has(ed.jp('info.stock')).parse(test_dict)
True
In this case if jp
returns None
, then bool parser will also return False
.
>>> test_dict = {}
>>> ed.Has(ed.jp('invalid-key')).parse(test_dict)
False
Use of query selectors is not required, as we can see bellow.
>>> test_data = True
>>> ed.Bool().transform(test_data)
True
>>> test_data = True
>>> ed.Has().transform(test_data)
True
>>> test_data = True
>>> ed.Bool().parse(test_data)
True
>>> test_data = True
>>> ed.Bool().transform(test_data)
True
>>> test_data = True
>>> ed.Has().transform(test_data)
True
>>> test_data = True
>>> ed.Bool().parse(test_data)
True
>>> test_data = True
>>> ed.Bool().transform(test_data)
True
>>> test_data = True
>>> ed.Bool().transform(test_data)
True
>>> test_data = True
>>> ed.Has().parse(test_data)
True
>>> test_data = True
>>> ed.Bool().transform(test_data)
True
>>> test_data = True
>>> ed.Bool().transform(test_data)
True
>>> test_data = True
>>> ed.Has().parse(test_data)
True
>>> test_data = True
>>> ed.Has().transform(test_data)
True
>>> test_data = True
>>> ed.Bool().transform(test_data)
True
>>> test_data = True
>>> ed.Bool().parse(test_data)
True
>>> test_data = True
>>> ed.Has().transform(test_data)
True
>>> test_data = True
>>> ed.Bool().transform(test_data)
True
>>> test_data = True
>>> ed.Bool().parse(test_data)
True
>>> test_data = True
>>> ed.Bool().transform(test_data)
True
>>> test_data = True
>>> ed.Bool().transform(test_data)
True
>>> test_data = True
>>> ed.Bool().parse(test_data)
True
Parameters¶
-
contains
¶
contains
property can accept list of keys which will be used for a
match in a lookup text. If match is found then True
is returned. Please
note that search keys are not case sensitive and regex pattern as a key is
also accepted.
>>> text = 'Easybook Pro 13'
>>> ed.Has(contains=['pro 13']).parse(text)
True
-
ccontains
¶
ccontains
works in a same way as contains
parameter, with an exception
that keys are case sensitive.
>>> text = 'Easybook Pro 13'
>>> ed.Has(contains=['Pro 13']).parse(text)
True
Lets try with lowercase keys.
>>> text = 'Easybook Pro 13'
>>> ed.Has(contains=['Pro 13']).parse(text)
False
-
contains_query
¶
contains_query
is a powerful feature that enables you to specify dynamic
search keys by using query selectors. In example bellow we will use jp
query selector to get our contains keys.
>>> test_dict = {'title': 'Easybook Pro 13', 'info': {'brand': 'Easybook}'}
>>> ed.Has(ed.jp('title'), contains_query=ed.jp('info.brand')).parse(text)
True
-
contains_query_source
¶
contains_query_source
will work only when our bool parser is used inside
model
in order to select different source from data
object.
import easydata as ed
class ProductItemModel(ed.ItemModel):
item_stock = parsers.Has(
ed.jp('title'),
contains_query=ed.jp('name')
contains_query_source='brand_data'
)
Now lets test our newly created model
with adding multiple data sources to it.
>>> test_dict = {'title': 'Easybook Pro 13'}
>>> test_brand_dict = {'name': 'Easybook'}
>>> item_model = ProductItemModel().parse(test_dict, brand_data=test_brand_dict)
{'stock': True}
-
empty_as_false
¶
By default bool parser will always return False
if there is no match or if
given lookup data is empty or contains value of None
.
If you need to disable default behaviour and return empty data if given lookup
data is empty, you have to set parameter empty_as_false
to False
.
Lets see in example bellow first how default behaviour works.
>>> test_dict = None
>>> ed.Has(ed.jp('info.stock')).parse(test_dict)
False
Lets set empty_as_false
to False
and see what it returns.
>>> test_dict = None
>>> ed.Has(ed.jp('info.stock'), empty_as_false=False).parse(test_dict)
None