@@ -337,6 +337,7 @@ def upload():
337
337
dependencies = "Test dependencies" ,
338
338
created_at = datetime .utcnow (),
339
339
is_deprecated = False ,
340
+ oid = file_object_id ,
340
341
download_url = f"/tarballs/{ file_object_id } " ,
341
342
)
342
343
@@ -383,6 +384,7 @@ def upload():
383
384
dependencies = "Test dependencies" ,
384
385
created_at = datetime .utcnow (),
385
386
is_deprecated = False ,
387
+ oid = file_object_id ,
386
388
download_url = f"/tarballs/{ file_object_id } " ,
387
389
)
388
390
@@ -444,16 +446,12 @@ def serve_gridfs_file(oid):
444
446
try :
445
447
file = file_storage .get (ObjectId (oid ))
446
448
447
- package_version_doc = db .packages .update_one (
448
- {
449
- "versions.oid" : oid ,
450
- },
449
+ package_version_doc = db .tarballs .files .update_one (
450
+ {"_id" : ObjectId (oid )},
451
451
{
452
452
"$inc" : {
453
- f"downloads_stats.versions.{ oid } " : 1 ,
454
453
"downloads_stats.total_downloads" : 1 ,
455
- f"downloads_stats.dates.{ str (datetime .now ())[:10 ]} .{ oid } " : 1 ,
456
- f"downloads_stats.dates.{ str (datetime .now ())[:10 ]} .total_downloads" : 1 ,
454
+ f"downloads_stats.dates.{ str (datetime .now ())[:10 ]} " : 1 ,
457
455
}
458
456
},
459
457
)
@@ -513,13 +511,46 @@ def get_package(namespace_name, package_name):
513
511
ratings = 0
514
512
rating_count = {}
515
513
514
+ # package_obj.downloads_stats Data Model
515
+ # downloads_stats:
516
+ # total_downloads:1
517
+ # versions:
518
+ # oid1:1
519
+ # oid2:1
520
+ # dates:
521
+ # date1:
522
+ # oid1:1
523
+ # oid2:1
524
+ # total_downloads:1
525
+
526
+ downloads_stats = dict ()
527
+ downloads_stats ['versions' ] = dict ()
528
+ downloads_stats ['dates' ] = dict ()
529
+ downloads_stats ['total_downloads' ] = 0
530
+ try :
531
+ for i in package_obj .versions :
532
+ version_oid = db .tarballs .files .find_one ({"_id" : ObjectId (i .oid )})
533
+ downloads_stats ['versions' ][str (i .oid )] = version_oid ['downloads_stats' ]['total_downloads' ]
534
+ downloads_stats ['total_downloads' ] += version_oid ['downloads_stats' ]['total_downloads' ]
535
+ for DATE_VALUE in version_oid ['downloads_stats' ]['dates' ]:
536
+ downloads_stats ['dates' ][DATE_VALUE ] = dict ()
537
+ downloads_stats ['dates' ][DATE_VALUE ][str (i .oid )] = version_oid ['downloads_stats' ]['dates' ][DATE_VALUE ]
538
+ for i in downloads_stats ['dates' ]:
539
+ downloads_stats ['dates' ][i ]['total_downloads' ] = sum (downloads_stats ['dates' ][i ].values ())
540
+ except :
541
+ downloads_stats = dict ()
542
+
516
543
version_history = [{k : v for k , v in i .items () if k != 'tarball' } for i in package_obj .to_json ()["versions" ]]
544
+ latest_version_data = package_obj .versions [- 1 ].to_json ()
545
+ latest_version_data ['oid' ] = str (latest_version_data ['oid' ])
546
+ for i in version_history :
547
+ i ['oid' ] = str (i ['oid' ])
517
548
518
549
# Only latest version of the package will be sent as a response.
519
550
package_response_data = {
520
551
"name" : package_obj .name ,
521
552
"namespace" : namespace_obj .namespace ,
522
- "latest_version_data" : package_obj . versions [ - 1 ]. to_json () ,
553
+ "latest_version_data" : latest_version_data ,
523
554
"author" : package_author_obj .username ,
524
555
"keywords" : package_obj .keywords if package_obj .keywords else [],
525
556
"categories" : package_obj .categories if package_obj .categories else [],
@@ -529,10 +560,9 @@ def get_package(namespace_name, package_name):
529
560
"updated_at" : package_obj .updated_at ,
530
561
"description" : package_obj .description ,
531
562
"ratings" : ratings ,
532
- "downloads" : package_obj . downloads_stats ,
563
+ "downloads" : downloads_stats ,
533
564
"ratings_count" : rating_count
534
565
}
535
-
536
566
return jsonify ({"data" : package_response_data , "code" : 200 })
537
567
538
568
@@ -617,7 +647,8 @@ def get_package_from_version(namespace_name, package_name, version):
617
647
version_data = next (
618
648
filter (lambda obj : obj .version == version , version_history ), None
619
649
)
620
-
650
+ version_history = version_data .to_json ()
651
+ version_history ['oid' ] = str (version_history ['oid' ])
621
652
# Only queried version should be sent as response.
622
653
package_response_data = {
623
654
"name" : package_obj .name ,
@@ -627,7 +658,7 @@ def get_package_from_version(namespace_name, package_name, version):
627
658
"categories" : package_obj .categories ,
628
659
"license" : package_obj .license ,
629
660
"created_at" : package_obj .created_at ,
630
- "version_data" : version_data . to_json () ,
661
+ "version_data" : version_history ,
631
662
"updatedAt" : package_obj .updated_at ,
632
663
"description" : package_obj .description ,
633
664
}
0 commit comments