config: Add Config.books_repo() method.
This commit is contained in:
parent
680bb6e305
commit
f9ea7edae3
3 changed files with 30 additions and 0 deletions
|
@ -22,6 +22,7 @@ import os
|
|||
import re
|
||||
import urllib.parse as urlparse
|
||||
|
||||
import git # type:ignore[import]
|
||||
import requests.auth
|
||||
import rt
|
||||
|
||||
|
@ -128,6 +129,16 @@ class Config:
|
|||
def books_path(self) -> Optional[Path]:
|
||||
return self._abspath(self.file_config['Beancount'], 'books dir')
|
||||
|
||||
def books_repo(self) -> Optional[git.Repo]:
|
||||
"""Return a git.Repo object for the books directory
|
||||
|
||||
Returns None if the books directory is not a valid Git repository.
|
||||
"""
|
||||
try:
|
||||
return git.Repo(self.file_config['Beancount']['books dir'])
|
||||
except (KeyError, git.exc.GitError):
|
||||
return None
|
||||
|
||||
def cache_dir_path(self, name: str='conservancy_beancount') -> Optional[Path]:
|
||||
cache_root = self._path_from_environ('XDG_CACHE_HOME')
|
||||
return (
|
||||
|
|
1
setup.py
1
setup.py
|
@ -13,6 +13,7 @@ setup(
|
|||
install_requires=[
|
||||
'babel>=2.6', # Debian:python3-babel
|
||||
'beancount>=2.2', # Debian:beancount
|
||||
'GitPython>=2.0', # Debian:python3-git
|
||||
# 1.4.1 crashes when trying to save some documents.
|
||||
'odfpy>=1.4.0,!=1.4.1', # Debian:python3-odf
|
||||
'PyYAML>=3.0', # Debian:python3-yaml
|
||||
|
|
|
@ -20,6 +20,8 @@ import operator
|
|||
import os
|
||||
import re
|
||||
|
||||
import git
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
@ -422,3 +424,19 @@ def test_books_loader():
|
|||
|
||||
def test_books_loader_without_books():
|
||||
assert config_mod.Config().books_loader() is None
|
||||
|
||||
def test_books_repo(tmp_path):
|
||||
repo_path = tmp_path / 'books_repo'
|
||||
expected = git.Repo.init(repo_path)
|
||||
config = config_mod.Config()
|
||||
config.load_string(f'[Beancount]\nbooks dir = {repo_path}')
|
||||
assert config.books_repo() == expected
|
||||
|
||||
def test_books_repo_no_dir():
|
||||
config = config_mod.Config()
|
||||
assert config.books_repo() is None
|
||||
|
||||
def test_books_dir_not_repo():
|
||||
config = config_mod.Config()
|
||||
config.load_string(f'[Beancount]\nbooks dir = {os.devnull}')
|
||||
assert config.books_repo() is None
|
||||
|
|
Loading…
Reference in a new issue