Skip to content
This repository has been archived by the owner on May 22, 2024. It is now read-only.

Commit

Permalink
Merge 827041d into 46f742b
Browse files Browse the repository at this point in the history
  • Loading branch information
ethantkoenig committed Mar 1, 2018
2 parents 46f742b + 827041d commit b8acb85
Show file tree
Hide file tree
Showing 7 changed files with 135 additions and 97 deletions.
6 changes: 4 additions & 2 deletions libraries/aws_tools/s3_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ def replace(self, key, catch_exception=True):
return self.resource.Object(bucket_name=self.bucket_name, key=key).copy_from(
CopySource='{0}/{1}'.format(self.bucket_name, key), MetadataDirective='REPLACE')

def upload_file(self, path, key, cache_time=600):
def upload_file(self, path, key, cache_time=600, content_type=None):
"""
Upload file to S3 storage. Similar to the s3.upload_file, however, that
does not work nicely with moto, whereas this function does.
Expand All @@ -146,10 +146,12 @@ def upload_file(self, path, key, cache_time=600):
"""
with open(path, 'rb') as f:
binary = f.read()
if content_type is None:
content_type = get_mime_type(path)
self.bucket.put_object(
Key=key,
Body=binary,
ContentType=get_mime_type(path),
ContentType=content_type,
CacheControl='max-age={0}'.format(cache_time)
)

Expand Down
73 changes: 35 additions & 38 deletions libraries/door43_tools/project_printer.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,47 +32,44 @@ def print_project(self, project_id):
source_path = 'u/{0}'.format(project_id)
print_all_key = '{0}/print_all.html'.format(source_path)
print_all_file = tempfile.mktemp(prefix='print_all_')
if not App.cdn_s3_handler().key_exists(print_all_key):
files_dir = tempfile.mkdtemp(prefix='files_')
App.cdn_s3_handler().download_dir(source_path, files_dir)
project_dir = os.path.join(files_dir, source_path.replace('/', os.path.sep))
if not os.path.isdir(project_dir):
raise Exception('Project not found.')
rc = RC(project_dir, repo_name)
with codecs.open(print_all_file, 'w', 'utf-8-sig') as print_all:
print_all.write("""
<html lang="{0}" dir="{1}">
<head>
<meta charset="UTF-8"/>
<title>{2}: {3}</title>
<style type="text/css">
body > div {{
page-break-after: always;
}}
</style>
</head>
<body onLoad="window.print()">
<h1>{2}: {3}</h1>
if App.cdn_s3_handler().key_exists(print_all_key):
return App.cdn_s3_handler().bucket_name + '/' + print_all_key
files_dir = tempfile.mkdtemp(prefix='files_')
App.cdn_s3_handler().download_dir(source_path, files_dir)
project_dir = os.path.join(files_dir, source_path.replace('/', os.path.sep))
if not os.path.isdir(project_dir):
raise Exception('Project not found.')
rc = RC(project_dir, repo_name)
with codecs.open(print_all_file, 'w', 'utf-8-sig') as print_all:
print_all.write("""<html lang="{0}" dir="{1}">
<head>
<meta charset="UTF-8"/>
<title>{2}: {3}</title>
<style type="text/css">
body > div {{
page-break-after: always;
}}
</style>
</head>
<body onLoad="window.print()">
<h1>{2}: {3}</h1>
""".format(rc.resource.language.identifier, rc.resource.language.direction, rc.resource.language.title,
rc.resource.title))
for fname in sorted(glob(os.path.join(project_dir, '*.html')), key=self.front_to_back):
with codecs.open(fname, 'r', 'utf-8-sig') as f:
soup = BeautifulSoup(f, 'html.parser')
# get the body of the raw html file
content = soup.div
if not content:
content = BeautifulSoup('<div>No content</div>', 'html.parser').find('div').extract()
content['id'] = os.path.basename(fname)
print_all.write(unicode(content))
print_all.write("""
</body>
rc.resource.title))
for fname in sorted(glob(os.path.join(project_dir, '*.html')), key=self.front_to_back):
with codecs.open(fname, 'r') as f:
soup = BeautifulSoup(f, 'html.parser')
# get the body of the raw html file
content = soup.div
if not content:
content = BeautifulSoup('<div>No content</div>', 'html.parser').find('div').extract()
content['id'] = os.path.basename(fname)
print_all.write(unicode(content))
print_all.write("""
</body>
</html>
""")
App.cdn_s3_handler().upload_file(print_all_file, print_all_key, cache_time=0)
html = read_file(print_all_file)
else:
html = App.cdn_s3_handler().get_file_contents(print_all_key)
return html
App.cdn_s3_handler().upload_file(print_all_file, print_all_key, cache_time=0, content_type='text/html')
return App.cdn_s3_handler().bucket_name + '/' + print_all_key

@staticmethod
def front_to_back(file_path):
Expand Down
34 changes: 32 additions & 2 deletions libraries/usfm_tools/parseUsfm.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ def usfmTokenNumber(key):
sts = usfmTokenValue("sts", phrase)
r = usfmTokenValue("r", phrase)
p = usfmToken("p")
pc = usfmToken("pc")
pi = usfmToken("pi")
pi2 = usfmToken("pi2")
b = usfmToken("b")
Expand Down Expand Up @@ -91,17 +92,19 @@ def usfmTokenNumber(key):

# Footnotes
fs = usfmTokenValue("f", plus)
fe = usfmEndToken("f")
fes = usfmTokenValue("fe", plus)
fee = usfmEndToken("fe")
fr = usfmTokenValue("fr", phrase)
fre = usfmEndToken("fr")
fk = usfmTokenValue("fk", phrase)
ft = usfmTokenValue("ft", phrase)
fp = usfmToken("fp")
fq = usfmTokenValue("fq", phrase)
fqe = usfmEndToken("fq")
fqa = usfmTokenValue("fqa", phrase)
fqae = usfmEndToken("fqa")
fqb = usfmTokenValue("fqb", phrase)
fe = usfmEndToken("f")
fp = usfmToken("fp")
fv = usfmTokenValue("fv", phrase)
fve = usfmEndToken("fv")
fdc = usfmTokenValue("fdc", phrase)
Expand Down Expand Up @@ -216,6 +219,7 @@ def usfmTokenNumber(key):
sts,
r,
p,
pc,
pi,
pi2,
mi,
Expand Down Expand Up @@ -249,6 +253,7 @@ def usfmTokenNumber(key):
nb,
m,
fs,
fes,
fr,
fre,
fk,
Expand All @@ -259,6 +264,7 @@ def usfmTokenNumber(key):
fqae,
fqb,
fe,
fee,
fp,
fv,
fve,
Expand Down Expand Up @@ -390,6 +396,7 @@ def createToken(t):
'ms2': MS2Token,
'mr': MRToken,
'p': PToken,
'pc': PCToken,
'pi': PIToken,
'pi2': PI2Token,
'b': BToken,
Expand Down Expand Up @@ -429,6 +436,7 @@ def createToken(t):
'qt*': QTEToken,
'nb': NBToken,
'f': FSToken,
'fe': FESToken, # Footnote intended as an end note
'fr': FRToken,
'fr*': FREToken,
'fk': FKToken,
Expand All @@ -439,6 +447,7 @@ def createToken(t):
'fqa*': FQAEToken,
'fqb': FQAEToken,
'f*': FEToken,
'fe*': FEEToken,
'fv': FVSToken,
'fv*': FVEToken,
'fdc': FDCSToken,
Expand Down Expand Up @@ -555,6 +564,7 @@ def isMS2(self): return False
def isMR(self): return False
def isR(self): return False
def isP(self): return False
def isPC(self): return False
def isPI(self): return False
def isPI2(self): return False
def isS(self): return False
Expand Down Expand Up @@ -592,12 +602,14 @@ def isQTS(self): return False
def isQTE(self): return False
def isNB(self): return False
def isFS(self): return False
def isFES(self): return False
def isFR(self): return False
def isFRE(self): return False
def isFK(self): return False
def isFT(self): return False
def isFQ(self): return False
def isFQA(self): return False
def isFQE(self): return False
def isFQAE(self): return False
def isFQB(self): return False
def isFE(self): return False
Expand All @@ -606,6 +618,7 @@ def isFVS(self): return False
def isFVE(self): return False
def isFDCS(self): return False
def isFDCE(self): return False
def isFEE(self): return False
def isXS(self): return False
def isXDCS(self): return False
def isXDCE(self): return False
Expand All @@ -629,6 +642,7 @@ def isNDS(self): return False
def isNDE(self): return False
def isTLS(self): return False
def isTLE(self): return False
def isB(self): return False
def isBDS(self): return False
def isBDE(self): return False
def isBDITS(self): return False
Expand Down Expand Up @@ -887,6 +901,11 @@ class FSToken(UsfmToken):
def renderOn(self, printer): return printer.renderFS(self)
def isFS(self): return True

class FESToken(UsfmToken):
def renderOn(self, printer):
return printer.renderFES(self)
def isFES(self): return True

class FRToken(UsfmToken):
def renderOn(self, printer): return printer.renderFR(self)
def isFR(self): return True
Expand Down Expand Up @@ -929,6 +948,11 @@ class FEToken(UsfmToken):
def renderOn(self, printer): return printer.renderFE(self)
def isFE(self): return True

class FEEToken(UsfmToken):
def renderOn(self, printer):
return printer.renderFEE(self)
def isFEE(self): return True

class FVSToken(UsfmToken):
def renderOn(self, printer): return printer.renderFVS(self)
def isFVS(self): return True
Expand Down Expand Up @@ -1060,6 +1084,12 @@ class TLEToken(UsfmToken):
def renderOn(self, printer): return printer.renderTLE(self)
def isTLE(self): return True

# Formatted paragraphs, like pc, pi, etc.
class PCToken(UsfmToken):
def renderOn(self, printer):
return printer.renderPC(self)
def isPC(self): return True

# Indenting paragraphs
class PIToken(UsfmToken):
def renderOn(self, printer): return printer.renderPI(self)
Expand Down

0 comments on commit b8acb85

Please sign in to comment.