@@ -372,6 +372,17 @@ def workspace_service(self, workspace_id):
372
372
373
373
return response
374
374
375
+ def workspace_usage (self , workspace_id ):
376
+ """
377
+ This Requests information about a workspace usage from /workspace/{id}/usage endpoint,
378
+ if such exists in self.url server.
379
+
380
+ Returns response from server as JSON dict or None if endpoint is not found
381
+ """
382
+
383
+ resp = self .get (f"/v1/workspace/{ workspace_id } /usage" )
384
+ return json .load (resp )
385
+
375
386
def server_type (self ):
376
387
"""
377
388
Returns the deployment type of the server
@@ -700,41 +711,84 @@ def project_info(self, project_path_or_id, since=None, version=None):
700
711
resp = self .get ("/v1/project/{}" .format (project_path_or_id ), params )
701
712
return json .load (resp )
702
713
703
- def project_versions (self , project_path , since = None , to = None ):
714
+ def paginated_project_versions (self , project_path , page , per_page = 100 , descending = False ):
715
+ """
716
+ Get records of project's versions (history) using calculated pagination.
717
+ wrapper around the /v1/project/versions/paginated/{} API end point
718
+
719
+ :param project_path: Project's full name (<namespace>/<name>)
720
+ :type project_path: String | Int
721
+ :param page: page number
722
+ :type page: Int
723
+ :param per_page: number of results per page default 100
724
+ :type per_page: Int
725
+ :param descending: order of sorting
726
+ :type descending: Bool
727
+
728
+ :rtype: List[Dict], Int
729
+ """
730
+ params = {"page" : page , "per_page" : per_page , "descending" : descending }
731
+ resp = self .get ("/v1/project/versions/paginated/{}" .format (project_path ), params )
732
+ resp_json = json .load (resp )
733
+ return resp_json ["versions" ], resp_json ["count" ]
734
+
735
+ def project_versions_count (self , project_path ):
736
+ """
737
+ return the total count of versions
738
+ To note we fetch only one page and one item as we only need the "count" response
739
+
740
+ :param project_path_or_id: Project's full name (<namespace>/<name>) or id
741
+ :type project_path_or_id: String
742
+
743
+ :rtype: Int
744
+ """
745
+ params = {"page" : 1 , "per_page" : 1 , "descending" : False }
746
+ resp = self .get ("/v1/project/versions/paginated/{}" .format (project_path ), params )
747
+ resp_json = json .load (resp )
748
+ return resp_json ["count" ]
749
+
750
+ def project_versions (self , project_path , since = 1 , to = None ):
704
751
"""
705
752
Get records of project's versions (history) in ascending order.
706
753
If neither 'since' nor 'to' is specified it will return all versions.
707
754
708
755
:param project_path: Project's full name (<namespace>/<name>)
709
756
:type project_path: String
710
757
:param since: Version to track project history from
711
- :type since: String
758
+ :type since: String | Int
712
759
:param to: Version to track project history to
713
- :type to: String
760
+ :type to: String | Int
714
761
715
762
:rtype: List[Dict]
716
763
"""
717
764
versions = []
718
765
per_page = 100 # server limit
719
- num_since = int_version (since ) if since else 1
720
- num_to = int_version (to ) if to else None # we may not know yet
766
+
767
+ if type (since ) == str :
768
+ num_since = int_version (since )
769
+ else :
770
+ # keep the since parameter as is
771
+ num_since = since
772
+
773
+ if type (to ) == str :
774
+ num_to = int_version (to )
775
+ else :
776
+ # keep the to parameter as is
777
+ num_to = to
778
+
721
779
start_page = math .ceil (num_since / per_page )
722
780
if not num_to :
723
781
# let's get first page and count
724
- params = {"page" : start_page , "per_page" : per_page , "descending" : False }
725
- resp = self .get ("/v1/project/versions/paginated/{}" .format (project_path ), params )
726
- resp_json = json .load (resp )
727
- versions = resp_json ["versions" ]
728
- num_to = resp_json ["count" ]
782
+ versions , num_to = self .paginated_project_versions (project_path , start_page , per_page )
783
+
729
784
latest_version = int_version (versions [- 1 ]["name" ])
730
785
if latest_version < num_to :
731
786
versions += self .project_versions (project_path , f"v{ latest_version + 1 } " , f"v{ num_to } " )
732
787
else :
733
788
end_page = math .ceil (num_to / per_page )
734
789
for page in range (start_page , end_page + 1 ):
735
- params = {"page" : page , "per_page" : per_page , "descending" : False }
736
- resp = self .get ("/v1/project/versions/paginated/{}" .format (project_path ), params )
737
- versions += json .load (resp )["versions" ]
790
+ page_versions , _ = self .paginated_project_versions (project_path , page , per_page )
791
+ versions += page_versions
738
792
739
793
# filter out versions not within range
740
794
filtered_versions = list (filter (lambda v : (num_since <= int_version (v ["name" ]) <= num_to ), versions ))
0 commit comments