@@ -711,7 +711,25 @@ def project_info(self, project_path_or_id, since=None, version=None):
711711 resp = self .get ("/v1/project/{}" .format (project_path_or_id ), params )
712712 return json .load (resp )
713713
714- def project_versions (self , project_path , since = None , to = None ):
714+
715+ def project_versions_page (self , project_path , page , per_page = 100 , descending = False ):
716+ params = {"page" : page , "per_page" : per_page , "descending" : descending }
717+ resp = self .get ("/v1/project/versions/paginated/{}" .format (project_path ), params )
718+ resp_json = json .load (resp )
719+ return resp_json ["versions" ]
720+
721+ def project_versions_count (self , project_path ):
722+ """
723+ return the total count of versions
724+
725+ To note the requested informations are kept to the minimal
726+ """
727+ params = {"page" : 1 , "per_page" : 1 , "descending" : False }
728+ resp = self .get ("/v1/project/versions/paginated/{}" .format (project_path ), params )
729+ resp_json = json .load (resp )
730+ return resp_json ["count" ]
731+
732+ def project_versions_in_range (self , project_path , since = None , to = None ):
715733 """
716734 Get records of project's versions (history) in ascending order.
717735 If neither 'since' nor 'to' is specified it will return all versions.
@@ -745,21 +763,16 @@ def project_versions(self, project_path, since=None, to=None):
745763 start_page = math .ceil (num_since / per_page )
746764 if not num_to :
747765 # let's get first page and count
748- params = {"page" : start_page , "per_page" : per_page , "descending" : False }
749- resp = self .get ("/v1/project/versions/paginated/{}" .format (project_path ), params )
750- resp_json = json .load (resp )
751- versions = resp_json ["versions" ]
752- num_to = resp_json ["count" ]
766+ versions = self .project_versions_page (project_path , start_page , per_page )
767+ num_to = self .project_versions_count (project_path )
753768 latest_version = int_version (versions [- 1 ]["name" ])
754769 if latest_version < num_to :
755770 #add yield here
756- versions += self .project_versions (project_path , f"v{ latest_version + 1 } " , f"v{ num_to } " )
771+ versions += self .project_versions_in_range (project_path , f"v{ latest_version + 1 } " , f"v{ num_to } " )
757772 else :
758773 end_page = math .ceil (num_to / per_page )
759774 for page in range (start_page , end_page + 1 ):
760- params = {"page" : page , "per_page" : per_page , "descending" : False }
761- resp = self .get ("/v1/project/versions/paginated/{}" .format (project_path ), params )
762- versions += json .load (resp )["versions" ]
775+ versions += self .project_versions_page (project_path , page , per_page )
763776
764777 # filter out versions not within range
765778 filtered_versions = list (filter (lambda v : (num_since <= int_version (v ["name" ]) <= num_to ), versions ))
0 commit comments