File tree 3 files changed +44
-4
lines changed
app/ch10_using_sqlachemy/final/pypi_org
3 files changed +44
-4
lines changed Original file line number Diff line number Diff line change 1
- from typing import List
1
+ from typing import List , Optional
2
2
import sqlalchemy .orm
3
3
4
4
import pypi_org .data .db_session as db_session
@@ -10,7 +10,7 @@ def get_latest_releases(limit=10) -> List[Release]:
10
10
session = db_session .create_session ()
11
11
12
12
releases = session .query (Release ). \
13
- options (sqlalchemy .orm .joinedload (Release .package )).\
13
+ options (sqlalchemy .orm .joinedload (Release .package )). \
14
14
order_by (Release .created_date .desc ()). \
15
15
limit (limit ). \
16
16
all ()
@@ -28,3 +28,21 @@ def get_package_count() -> int:
28
28
def get_release_count () -> int :
29
29
session = db_session .create_session ()
30
30
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
Original file line number Diff line number Diff line change @@ -30,7 +30,7 @@ <h2>New releases</h2>
30
30
{% for r in releases %}
31
31
< div class ="project ">
32
32
< 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 >
34
34
< div class ="desc "> {{ r.package.summary }}</ div >
35
35
</ div >
36
36
</ div >
Original file line number Diff line number Diff line change 7
7
8
8
9
9
@blueprint .route ('/project/<package_name>' )
10
+ @response (template_file = 'packages/details.html' )
10
11
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
+ }
12
34
13
35
14
36
@blueprint .route ('/<int:rank>' )
You can’t perform that action at this time.
0 commit comments