-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathnote.py
More file actions
86 lines (62 loc) · 2.07 KB
/
note.py
File metadata and controls
86 lines (62 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import os
import re
import uuid
class MetaNote(object):
__slots__ = (
"filename",
"title",
"mtime",
)
def __init__(self, filename):
self.filename = filename
self._read_meta(open(self.filename).read())
self._read_mtime()
def _read_meta(self, html):
result = re.findall(r"<head>.*<title>(.*)</title>.*</head>", html,
re.DOTALL)
assert len(result) == 1
self.title = result[0].strip()
def _read_mtime(self):
self.mtime = os.stat(self.filename).st_mtime
def get_title(self):
return self.title
def set_title(self, title):
self.title = title
def get_mtime(self):
return self.mtime
def get_filename(self):
return self.filename
class Note(MetaNote):
title = "New Note"
def __init__(self, filename):
self.filename = filename
if not os.path.exists(filename):
return
self.html = open(filename).read()
self._read_meta(self.html)
self._read_mtime()
@staticmethod
def create(title):
n = Note(os.path.join(os.path.expanduser("~"), ".gitnote", "notes",
"%s.note" % uuid.uuid4()))
n.set_html("<html><head><title>%s</title></head>" \
"<body contenteditable=\"true\"></body></html>" % title)
n.set_title(title)
return n
@staticmethod
def from_meta(meta):
return Note(meta.filename)
def save(self):
open(self.filename, "w").write(self.html)
self._read_mtime()
def get_html(self):
return self.html
def set_html(self, value):
value = re.sub(r"(<title>).*(</title>)",
lambda i: "".join((i.groups()[0], self.title,
i.groups()[1])), value)
value = re.sub(r"([^\n])<", lambda i: "%s\n<" % i.groups()[0].rstrip(),
value)
value = re.sub(r">([^\n])", lambda i: ">\n%s" % i.groups()[0].lstrip(),
value)
self.html = value