This repository has been archived by the owner on Mar 10, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
139 additions
and
92 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
from .py3grok import Grok, GrokPattern # noqa: F401 | ||
from .py3grok import Grok, GrokPattern, GrokEnvironment # noqa: F401 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
[tool.poetry] | ||
name = "py3grok" | ||
version = "0.1.0" | ||
version = "0.2.0" | ||
description = "Parse strings and extract information from structured or unstructured data." | ||
authors = ["Zackary Troop <[email protected]>"] | ||
license = "MIT, Apache 2.0" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,50 +1,63 @@ | ||
from unittest import TestCase | ||
from py3grok import Grok | ||
from py3grok.py3grok import GrokPattern | ||
from py3grok import Grok, GrokEnvironment, GrokPattern | ||
from re import IGNORECASE | ||
|
||
|
||
class TestGrok(TestCase): | ||
def setUp(self) -> None: | ||
return super().setUp() | ||
self.grok_env = GrokEnvironment() | ||
|
||
def test_grok(self): | ||
grok = Grok() | ||
|
||
text = "gary is male, 25 years old and weighs 68.5 kilograms" | ||
pattern = "%{WORD:name} is %{WORD:gender}, %{NUMBER:age:int} years old and weighs %{NUMBER:weight:float} kilograms" | ||
|
||
grok.pattern = pattern | ||
text = "gary is male, 25 years old." | ||
pattern = "%{WORD:name} is %{WORD:gender}, %{NUMBER:age:int} years old." | ||
grok = self.grok_env.create(pattern) | ||
result = grok.match(text) | ||
expected_result = {"name": "gary", "gender": "male", "age": 25, "weight": 68.5} | ||
expected_result = {"age": 25, "gender": "male", "name": "gary"} | ||
|
||
self.assertEqual(result, expected_result) | ||
self.assertEqual(len(grok.available_patterns), 361) | ||
|
||
grok.set_pattern( | ||
"%{WORD:name} is %{WORD:gender} and %{NUMBER:age:int} years old" | ||
) | ||
result = grok.match("allie is female and 32 years old") | ||
expected_result = {"age": 32, "gender": "female", "name": "allie"} | ||
def test_grok_modify_pattern(self): | ||
text = "gary is male, 25 years old." | ||
pattern = "%{WORD:name} is %{WORD:gender}, %{NUMBER:age:int} years old." | ||
grok = self.grok_env.create(pattern) | ||
grok.set_pattern("something else") | ||
|
||
self.assertEqual(grok.pattern, "something else") | ||
|
||
def test_grok_ignore_case(self): | ||
text = "gary is male, 25 years old." | ||
pattern = "%{WORD:name} IS %{WORD:gender}, %{NUMBER:age:int} YEARS OLD." | ||
grok = self.grok_env.create(pattern, flags=IGNORECASE) | ||
result = grok.match(text) | ||
expected_result = {"age": 25, "gender": "male", "name": "gary"} | ||
|
||
self.assertEqual(result, expected_result) | ||
|
||
def test_grok_available_patterns(self): | ||
grok = Grok() | ||
def test_magic_methods(self): | ||
grok1 = Grok("test pattern") | ||
grok2 = Grok("test pattern") | ||
grok3 = Grok("another pattern") | ||
|
||
self.assertEqual(len(grok.available_patterns), 361) | ||
grokpattern1 = GrokPattern("TEST", "regex") | ||
grokpattern2 = GrokPattern("TEST", "regex") | ||
grokpattern3 = GrokPattern("OTHER", "diff") | ||
|
||
def test_grok__eq__comparison(self): | ||
grok1 = Grok() | ||
grok2 = Grok() | ||
grokpattern1 = GrokPattern("test_name", "regex") | ||
grokpattern2 = GrokPattern("test_name", "regex") | ||
grokpattern3 = GrokPattern("other_name", "diff") | ||
grok_set = {grok1, grok2, grok3} | ||
grok_pattern_set = {grokpattern1, grokpattern2, grokpattern3} | ||
|
||
self.assertEqual(grok1, grok2) | ||
self.assertNotEqual(grok1, grokpattern1) | ||
|
||
grok1.set_pattern("%{WORD:name}") | ||
self.assertNotEqual(grok1, grok2) | ||
self.assertNotEqual(grok1, grok3) | ||
|
||
self.assertEqual(grokpattern1, grokpattern2) | ||
self.assertNotEqual(grokpattern1, grokpattern3) | ||
self.assertNotEqual(grokpattern1, grok1) | ||
|
||
self.assertIsInstance(grok_set, set) | ||
self.assertIsInstance(grok_pattern_set, set) | ||
|
||
self.assertEqual(str(grok1), "Grok (test pattern)") | ||
self.assertEqual(repr(grok1), "test pattern") | ||
|
||
self.assertEqual(str(grokpattern1), "GrokPattern (TEST, regex)") | ||
self.assertEqual(repr(grokpattern1), "TEST") |