Skip to content

Commit 61126c9

Browse files
authored
Merge pull request #12 from saisyam/line-number-support
Line number support added
2 parents 109b9bd + 0c9ac50 commit 61126c9

File tree

3 files changed

+56
-7
lines changed

3 files changed

+56
-7
lines changed

gitparse.py

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,38 @@
1212

1313
HEADER = {'User-Agent': random.choice(HEADERS_LIST)}
1414

15-
def parsegit(url):
16-
#url = "https://github.com/saisyam/python-flask/blob/master/simple/app.py"
15+
def parsegit(url, lineno):
1716
response = requests.get(url, headers=HEADER)
1817
soup = BeautifulSoup(response.text, "lxml")
1918
div = soup.find_all("div", {"itemprop" : "text"})
2019
div[0].find('details').decompose()
21-
return str(div[0])
20+
21+
if lineno is not None:
22+
trs = div[0].find_all('tr')
23+
# split line by comma separated
24+
# 1,5 - display 1 and 5 lines
25+
# 1,3-5,8 - display 1,3,4,5 and 8 lines
26+
vlines = linestodisplay(lineno, len(trs))
27+
index = 1
28+
for tr in trs:
29+
if index not in vlines:
30+
tr.decompose()
31+
index = index + 1
32+
33+
return str(div[0])
34+
35+
def linestodisplay(linestring, maxlines):
36+
lines = linestring.split(",")
37+
vlines = []
38+
for line in lines:
39+
#find if there is any range
40+
rlines = line.split("-")
41+
if len(rlines) > 1:
42+
vlines.extend(range(int(rlines[0]), int(rlines[1])))
43+
vlines.append(int(rlines[1]))
44+
else:
45+
vlines.append(int(rlines[0]))
46+
vlines.sort()
47+
while vlines[-1] > int(maxlines):
48+
vlines.remove(vlines[-1])
49+
return vlines

main.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,29 @@
1111
def index():
1212
return "<h1>Landing page coming soon...</h1>"
1313

14+
# provide github URL to get complete code
15+
# to give linenumbers add /l/<lineno> - 1,2 or 1,3-5,8 etc
1416
@app.route('/<path:url>')
1517
def gistify(url):
16-
filename = url.split("/")[-1]
17-
rawurl = url.replace("blob", "raw")
18-
document = parsegit(url)
19-
return render_template('gistify.html', document=Markup(document), filename=filename, rawurl=rawurl, url=url)
18+
try:
19+
urlitems = url.split("/")
20+
filename = None
21+
lineno = None
22+
giturl = None
23+
24+
if urlitems[-2] == "l":
25+
lineno = urlitems[-1]
26+
filename = urlitems[-3]
27+
giturl = url[:url.index("/l/")]
28+
else:
29+
filename = urlitems[-1]
30+
lineno = None
31+
giturl = url
32+
rawurl = giturl.replace("blob", "raw")
33+
document = parsegit(giturl, lineno)
34+
return render_template('gistify.html', document=Markup(document), filename=filename, rawurl=rawurl, url=giturl)
35+
except:
36+
return render_template('error.html', url=url)
2037

2138
if __name__ == '__main__':
2239
app.run(host='127.0.0.1', port=8080, debug=True)

templates/error.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<h2>Oops!</h2>
2+
<p>Something went wrong with the URL- <a href="{{ url }}">{{ url }}</a>. <br \>
3+
Please check the guide at <a href="http://gistify.saisyam.com">http://gistify.saisyam.com</a>
4+
</p>

0 commit comments

Comments
 (0)