Skip to content

Commit 6e58cb1

Browse files
committed
Use JSON instead of string parsing
1 parent 1facf0a commit 6e58cb1

2 files changed

Lines changed: 6 additions & 12 deletions

File tree

src/rofi_rbw/models/entry.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
@dataclass(frozen=True)
77
class Entry:
88
name: str
9-
folder: str = ""
10-
username: str = ""
9+
folder: str
10+
username: str
1111

1212
@cached_property
1313
def hashed(self) -> str:

src/rofi_rbw/rbw.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,20 @@
1313

1414
class Rbw:
1515
def list_entries(self) -> List[Entry]:
16-
rbw = run(["rbw", "list", "--fields", "folder,name,user"], encoding="utf-8", capture_output=True)
16+
rbw = run(["rbw", "list", "--raw"], encoding="utf-8", capture_output=True)
1717

1818
if rbw.returncode != 0:
1919
print("There was a problem calling rbw. Is it correctly configured?")
2020
print(rbw.stderr)
2121
exit(2)
2222

23+
data = json.loads(rbw.stdout.strip())
24+
2325
return sorted(
24-
[self.__parse_rbw_output(it) for it in (rbw.stdout.strip("\n").split("\n"))],
26+
[Entry(item["name"], item["folder"] or "", item["user"] or "") for item in data],
2527
key=lambda x: x.folder.lower() + x.name.lower(),
2628
)
2729

28-
def __parse_rbw_output(self, rbw_string: str) -> Entry:
29-
fields = rbw_string.split("\t")
30-
31-
try:
32-
return Entry(fields[1], fields[0], fields[2] if len(fields) > 2 else "")
33-
except IndexError:
34-
raise Exception(f"Entry '{rbw_string}' cannot be parsed")
35-
3630
def fetch_credentials(self, entry: Entry) -> DetailedEntry:
3731
try:
3832
data = json.loads(self.__load_from_rbw(entry.name, entry.username, entry.folder).strip())

0 commit comments

Comments
 (0)