-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
78 lines (66 loc) · 2.36 KB
/
app.py
File metadata and controls
78 lines (66 loc) · 2.36 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
import os
import shutil
from io import BytesIO
from flask import Flask, request, make_response, send_file, render_template
from git import Repo
from git.exc import GitCommandError
from pdf import PDF
app = Flask(__name__, static_folder='static', template_folder='templates')
app.secret_key = os.environ.get('SECRET_KEY')
@app.route("/")
def index():
return render_template('index.html')
@app.route("/", methods=["POST"])
def generate():
git_url = request.form.get('git_url')
gitpdf_ignore = request.form.get('gitpdf_ignore')
gitpdf_ignore_type = request.form.get('gitpdf_ignore_type')
gitpdf_pageoffset = request.form.get('gitpdf_pageoffset')
gitpdf_footer_left = request.form.get('gitpdf_footer_left')
gitpdf_footer_right = request.form.get('gitpdf_footer_right')
if not git_url:
return "<p>Please provide Github URL</p>"
if gitpdf_ignore:
gitpdf_ignore = gitpdf_ignore.split(",")
print("Will Ignore these files: ", gitpdf_ignore)
tmp_dir = "tmp_repo"
if os.path.exists(tmp_dir):
shutil.rmtree(tmp_dir)
try:
Repo.clone_from(git_url, tmp_dir)
except GitCommandError as a:
raise a
return "<p>Could not clone git repository. Give Valid url.</p>"
except Exception as e:
raise e
os.chdir(tmp_dir)
shutil.rmtree(".git")
pdf = PDF()
pdf.set_pageoffset(gitpdf_pageoffset)
pdf.set_footer_text(left = gitpdf_footer_left, right = gitpdf_footer_right)
for dirpath, dirname, filenames in os.walk(os.curdir):
for filename in filenames:
filepath = os.path.join(dirpath, filename)
if gitpdf_ignore_type == 'pathname' and filepath in gitpdf_ignore:
print("ignoring", filename)
continue
if gitpdf_ignore_type == 'filename' and filename in gitpdf_ignore:
print("ignoring", filename)
continue
pdf.set_filename(filepath)
with open(filepath, "r") as f:
pdf.add_page()
try:
pdf.multi_cell(0, 4, f.read().expandtabs(2), border=0)
except UnicodeDecodeError:
print("[ERROR] Skipping file", filepath)
pdf.ln()
buffer = BytesIO()
buffer.write(pdf.output(dest = "S").encode('latin-1'))
buffer.seek(0)
response = send_file(buffer, as_attachment=True, download_name=f'{git_url.split("/")[-1]}.pdf', mimetype="application/pdf")
os.chdir('..')
shutil.rmtree(tmp_dir)
return response
if __name__ == '__main__':
app.run(debug=True)