Skip to content

Commit 03065ff

Browse files
committed
Now with package details.
1 parent 2876259 commit 03065ff

File tree

3 files changed

+44
-4
lines changed

3 files changed

+44
-4
lines changed

app/ch10_using_sqlachemy/final/pypi_org/services/package_service.py

+20-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import List
1+
from typing import List, Optional
22
import sqlalchemy.orm
33

44
import pypi_org.data.db_session as db_session
@@ -10,7 +10,7 @@ def get_latest_releases(limit=10) -> List[Release]:
1010
session = db_session.create_session()
1111

1212
releases = session.query(Release). \
13-
options(sqlalchemy.orm.joinedload(Release.package)).\
13+
options(sqlalchemy.orm.joinedload(Release.package)). \
1414
order_by(Release.created_date.desc()). \
1515
limit(limit). \
1616
all()
@@ -28,3 +28,21 @@ def get_package_count() -> int:
2828
def get_release_count() -> int:
2929
session = db_session.create_session()
3030
return session.query(Release).count()
31+
32+
33+
def get_package_by_id(package_id: str) -> Optional[Package]:
34+
if not package_id:
35+
return None
36+
37+
package_id = package_id.strip().lower()
38+
39+
session = db_session.create_session()
40+
41+
package = session.query(Package) \
42+
.options(sqlalchemy.orm.joinedload(Package.releases)) \
43+
.filter(Package.id == package_id) \
44+
.first()
45+
46+
session.close()
47+
48+
return package

app/ch10_using_sqlachemy/final/pypi_org/templates/home/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ <h2>New releases</h2>
3030
{% for r in releases %}
3131
<div class="project">
3232
<div class="title">
33-
<a href="#">{{ r.package.id }} {{ r.version_text }}</a>
33+
<a href="/project/{{ r.package.id }}">{{ r.package.id }} {{ r.version_text }}</a>
3434
<div class="desc">{{ r.package.summary }}</div>
3535
</div>
3636
</div>

app/ch10_using_sqlachemy/final/pypi_org/views/package_views.py

+23-1
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,30 @@
77

88

99
@blueprint.route('/project/<package_name>')
10+
@response(template_file='packages/details.html')
1011
def package_details(package_name: str):
11-
return "Package details for {}".format(package_name)
12+
if not package_name:
13+
return flask.abort(status=404)
14+
15+
package = package_service.get_package_by_id(package_name.strip().lower())
16+
if not package:
17+
return flask.abort(status=404)
18+
19+
latest_version = "0.0.0"
20+
latest_release = None
21+
is_latest = True
22+
23+
if package.releases:
24+
latest_release = package.releases[0]
25+
latest_version = latest_release.version_text
26+
27+
return {
28+
'package': package,
29+
'latest_version': latest_version,
30+
'latest_release': latest_release,
31+
'release_version': latest_release,
32+
'is_latest': is_latest,
33+
}
1234

1335

1436
@blueprint.route('/<int:rank>')

0 commit comments

Comments
 (0)