Created
January 1, 2019 17:56
-
-
Save ondrejsika/744eb802f36c78dd1e1c4ac505fe6932 to your computer and use it in GitHub Desktop.
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
from git import Repo | |
from git.util import Actor | |
import yaml | |
import os | |
class GitYamlDb(object): | |
def __init__(self, data_dir): | |
self._data_dir = data_dir | |
self._yamls = {} # {file, yaml} | |
self._observers = [] # call observers on save | |
self._repo = None | |
self._init_repo() | |
def _init_repo(self): | |
if os.path.exists(self._data_dir): | |
self._repo = Repo(self._data_dir) | |
else: | |
self._repo = Repo.init(self._data_dir) | |
def _get_filename(self, filename): | |
return os.path.join(self._data_dir, '%s.yml' % filename) | |
def _commit(self, message, name, email): | |
actor = Actor(name, email) | |
self._repo.git.add(A=True) | |
self._repo.index.commit(message, | |
author=actor, | |
committer=actor) | |
def open(self, filename): | |
if os.path.exists(self._get_filename(filename)): | |
with open(self._get_filename(filename)) as f: | |
self._yamls[filename] = yaml.load(f) | |
else: | |
self._yamls[filename] = {} | |
return self._yamls[filename] | |
def save(self, message, name, email): | |
for filename, data in self._yamls.items(): | |
if not os.path.exists(os.path.dirname(self._get_filename(filename))): | |
os.makedirs(os.path.dirname(self._get_filename(filename))) | |
with open(self._get_filename(filename), 'w') as f: | |
yaml.dump(data, f, default_flow_style=False) | |
self._commit(message, name, email) | |
# Call observers | |
for observer in self._observers: | |
observer(self) | |
db = GitYamlDb('data') | |
x = db.open('a') | |
# x['x'].append(len(x['x'])) | |
a = db.open('people/ondrejsika') | |
a.update({ | |
'name': 'Ondrej Sika', | |
'email': 'ondrej@sgy.cz', | |
'headerline': 'Founder & CEO of SGY', | |
'twitter': 'https://twitter.com/ondrejsika', | |
'github': 'https://github.com/ondrejsika' | |
}) | |
a = db.open('people/zuzanajeschkeova') | |
a.update({ | |
'name': 'Zuzana Jeschkeova', | |
'email': 'zuzana@sgy.cz', | |
'headerline': 'Development Teacher', | |
'twitter': 'https://twitter.com/zuzjes', | |
'github': 'https://github.com/zuzjes' | |
}) | |
db.save('[auto] Save', 'Ondrej Sikaa', 'ondrej@sgy.cz') | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment