gitea-client 1.5.0 → 1.5.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3834af0c17b279bc9664771bab2a2da7e96a86ee0cf28d95217cc639c3e516ff
4
- data.tar.gz: e6e1a73e61ea258ad1b16a1d762668b50b5c55c53cde900116f6ac79f78fabdc
3
+ metadata.gz: 6db227dd5245c47c243c9cd74dd7b11420b090c04ae179ba7d13fa6e474037b0
4
+ data.tar.gz: 308cf6cfb738e651a13762cdadb4f5e61c28b91b721034fcd106f4c28ade020d
5
5
  SHA512:
6
- metadata.gz: 86d7db185d6028ef1874310f0e4a7f575afcbf463870e77ab044a8b8bddea61d6a58410f24705a78ae3a7d252120c7c33739418ca62c9eb40b1d543e4616a740
7
- data.tar.gz: 9d7fc586d9f5af93bca7e994005fcedc56d6f0942296d4aad9e6d8ae1c0da4d013392ff4c7cc1eb2b09bdc4fe466d9bc888e573300de0c520d27da8a20e7e0a1
6
+ metadata.gz: fd1e439b56351b61149392971a79563b004a4d445b918a609ac1d023e42bfb6cadb0ed4536dee8fb60d95df2720cd845e0e1ffe27bb35c3ad9c8f8c4eac6190e
7
+ data.tar.gz: b7b19675211636fac49f372cd7314f3de7fd070f7a9be5a15b1344c0920223f42ace44bec514fd32f46e628d87797a791970797755e7f335f79f5773bf65f36b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitea-client (1.4.0)
4
+ gitea-client (1.5.7)
5
5
  rest-client (~> 2.1.0)
6
6
 
7
7
  GEM
@@ -48,6 +48,7 @@ GEM
48
48
 
49
49
  PLATFORMS
50
50
  -darwin-21
51
+ arm64-darwin-21
51
52
  x86_64-darwin-20
52
53
 
53
54
  DEPENDENCIES
data/README.md CHANGED
@@ -17,6 +17,7 @@ And then execute:
17
17
  Or install it yourself as:
18
18
 
19
19
  $ gem install gitea-client
20
+
20
21
 
21
22
  ## Usage Example
22
23
 
@@ -0,0 +1,13 @@
1
+ module Gitea
2
+ module Api
3
+ module Hat
4
+ module Admin
5
+
6
+ def patch_admin_users_by_username(username, opt = {})
7
+ @http.patch("/admin/users/#{username}", opt)
8
+ end
9
+
10
+ end # Admin
11
+ end # Hat
12
+ end # Api
13
+ end # Gitea
@@ -0,0 +1,48 @@
1
+ module Gitea
2
+ module Api
3
+ module Hat
4
+ class Client
5
+
6
+ # 构造Api client,用于操作Api数据
7
+ # @param opts [Hash] 构造client时的参数选项
8
+ # @option opts [string] domain [必填] gitea服务地址
9
+ # @option opts [string] hat_base_url [必填] api相对路径
10
+ # @option opts [string] admin_username [必填] 管理员账号
11
+ # @option opts [string] admin_password [必填] 管理员密码
12
+ # @option opts [string] username [选填] 用户账号
13
+ # @option opts [string] password [选填] 用户密码
14
+ # @option opts [string] gitea_token [选填] 用户token
15
+ def initialize(opts)
16
+ @config = Config.new(opts)
17
+ Gitea::Common::Logging.set_log_file(@config.log_filepath)
18
+ @http = Http.new(@config)
19
+ end
20
+
21
+ def config
22
+ @config
23
+ end
24
+
25
+ def config=(config)
26
+ unless config.is_a?(Gitea::Api::Hat::Config)
27
+ fail Exception, "load config failure!"
28
+ end
29
+ @config = config
30
+ @http = Http.new(config)
31
+ end
32
+
33
+ def token
34
+ @config.token
35
+ end
36
+
37
+ def token=(token)
38
+ @config.token = token
39
+ end
40
+
41
+ include Gitea::Api::Hat::Repository
42
+ include Gitea::Api::Hat::Users
43
+ include Gitea::Api::Hat::Organization
44
+ include Gitea::Api::Hat::Admin
45
+ end
46
+ end # Hat
47
+ end # Api
48
+ end # Gitea
@@ -0,0 +1,36 @@
1
+ module Gitea
2
+ module Api
3
+
4
+ module Hat
5
+ class Config < Common::Struct::Base
6
+ attrs :domain, :hat_base_url, :username, :password, :token, :open_timeout, :read_timeout, :log_filepath
7
+
8
+ def initialize(opts = {})
9
+ super(opts)
10
+
11
+ valid!
12
+ normalize_domain
13
+ end
14
+
15
+ private
16
+ def valid!
17
+ if @domain.nil? || @hat_base_url.nil?
18
+ fail Exception, "@domain, @hat_base_url not permit blank."
19
+ end
20
+ end
21
+
22
+ def normalize_domain
23
+ uri = URI.parse(domain)
24
+ uri = URI.parse(domain)
25
+ uri = URI.parse("http://#{domain}") unless uri.scheme
26
+
27
+ if uri.scheme != 'http' and uri.scheme != 'https'
28
+ fail ClientError, "Only HTTP and HTTPS domain are accepted."
29
+ end
30
+
31
+ @domain = uri
32
+ end
33
+ end
34
+ end # Hat
35
+ end # Api
36
+ end # Gitea
@@ -0,0 +1,132 @@
1
+ require 'base64'
2
+ require 'json'
3
+
4
+ module Gitea
5
+ module Api
6
+ module Hat
7
+ class Http
8
+ DEFAULT_CONTENT_TYPE = 'application/json'
9
+ TOKEN_HEADER = 'Authorization'
10
+ OPEN_TIMEOUT = 10
11
+ READ_TIMEOUT = 120
12
+
13
+
14
+ def initialize(config)
15
+ @config = config
16
+ end
17
+
18
+ include Gitea::Common::Logging
19
+
20
+ def get_request_url(api_url)
21
+ url = @config.domain.dup
22
+ url.query = nil
23
+ url.fragment = nil
24
+ [url.to_s, @config.hat_base_url, api_url].join('')
25
+ end
26
+
27
+ def get(api_url = '', http_options = {}, &block)
28
+ do_request('GET', api_url, http_options, &block)
29
+ end
30
+
31
+ def put(api_url = '', http_options = {}, &block)
32
+ do_request('PUT', api_url, http_options, &block)
33
+ end
34
+
35
+ def patch(api_url = '', http_options = {}, &block)
36
+ do_request('PATCH', api_url, http_options, &block)
37
+ end
38
+
39
+ def post(api_url = '', http_options = {}, &block)
40
+ do_request('POST', api_url, http_options, &block)
41
+ end
42
+
43
+ def delete(api_url = '', http_options = {}, &block)
44
+ do_request('DELETE', api_url, http_options, &block)
45
+ end
46
+
47
+ def head(api_url = '', http_options = {}, &block)
48
+ do_request('HEAD', api_url, http_options, &block)
49
+ end
50
+
51
+ def options(api_url = '', http_options = {}, &block)
52
+ do_request('OPTIONS', api_url, http_options, &block)
53
+ end
54
+
55
+ private
56
+ # Do Http request
57
+ def do_request(verb, api_url, http_options = {}, &block)
58
+
59
+ headers = http_options[:headers] || {}
60
+ headers['user-agent'] = get_user_agent
61
+ headers['date'] = Time.now.httpdate
62
+ headers['content-type'] ||= DEFAULT_CONTENT_TYPE
63
+
64
+ if @config.username and @config.password
65
+ headers[TOKEN_HEADER] = 'Basic ' + Base64::encode64(@config.username + ":" + @config.password)
66
+ end
67
+
68
+ headers[:params] = http_options[:query] || {}
69
+ headers[:params].merge!({access_token: @config.token}) if @config.token
70
+ logger.info("Gitea Hat Client Begin a Request!...")
71
+ logger.info("Send HTTP request, verb: #{verb}, http_options: #{http_options}")
72
+ logger.info("Relative Url: #{api_url}")
73
+ logger.info("Headers: #{headers}")
74
+ request = RestClient::Request.new(
75
+ :method => verb,
76
+ :url => get_request_url(api_url),
77
+ :headers => headers,
78
+ :payload => http_options[:body],
79
+ :open_timeout => @config.open_timeout || OPEN_TIMEOUT,
80
+ :read_timeout => @config.read_timeout || READ_TIMEOUT
81
+ )
82
+
83
+
84
+ response = request.execute do |resp, &blk|
85
+ if resp.code >= 300
86
+ e = Gitea::Api::ServerError.new(resp)
87
+ logger.error(e.to_s)
88
+ raise e
89
+ else
90
+ resp.return!(&blk)
91
+ end
92
+ end
93
+
94
+ # If streaming read_body is used, we need to create the
95
+ # RestClient::Response ourselves
96
+ unless response.is_a?(RestClient::Response)
97
+ if response.code.to_i >= 300
98
+ body = response.body
99
+ if RestClient::version < '2.1.0'
100
+ body = RestClient::Request.decode(response['content-encoding'], response.body)
101
+ end
102
+ response = RestClient::Response.create(body, response, request)
103
+ e = Gitea::Api::ServerError.new(response)
104
+ logger.error(e.to_s)
105
+ raise e
106
+ end
107
+ response = RestClient::Response.create(nil, response, request)
108
+ response.return!
109
+ end
110
+
111
+ begin
112
+ if response.headers.has_key?(:x_total) || response.headers.has_key?(:x_total_count)
113
+ return {data: JSON.parse(response), total_data: response.headers[:x_total_count]}
114
+ else
115
+ return JSON.parse(response)
116
+ end
117
+ rescue => e
118
+ logger.error(e.to_s)
119
+ return {}
120
+ end
121
+
122
+ logger.info("Gitea Hat Client Success End a Request!...")
123
+ end
124
+
125
+ def get_user_agent
126
+ "gitea-client/#{VERSION}"
127
+ end
128
+
129
+ end
130
+ end # Hat
131
+ end # Common
132
+ end # Gitea
@@ -0,0 +1,25 @@
1
+ module Gitea
2
+ module Api
3
+ module Hat
4
+ module Organization
5
+
6
+ def patch_orgs_by_org(org, opt = {})
7
+ @http.patch("/orgs/#{org}", opt)
8
+ end
9
+
10
+ def post_orgs(opt = {})
11
+ @http.post("/orgs", opt)
12
+ end
13
+
14
+ def put_teams_repos_by_id_org(id, org, opt = {})
15
+ @http.put("/teams/#{id}/repos/#{org}", opt)
16
+ end
17
+
18
+ def delete_teams_repos_by_id_org(id, org, opt = {})
19
+ @http.delete("/teams/#{id}/repos/#{org}", opt)
20
+ end
21
+
22
+ end # Organization
23
+ end # Hat
24
+ end # Api
25
+ end # Gitea
@@ -0,0 +1,193 @@
1
+ module Gitea
2
+ module Api
3
+ module Hat
4
+ module Repository
5
+
6
+ def get_repos_actions_by_owner_repo(owner, repo, opt = {})
7
+ @http.get("/repos/#{owner}/#{repo}/actions", opt)
8
+ end
9
+
10
+ def post_repos_actions_runs_jobs_by_owner_repo_run_job(owner, repo, run, job, opt = {})
11
+ @http.post("/repos/#{owner}/#{repo}/actions/runs/#{run}/jobs/#{job}", opt)
12
+ end
13
+
14
+ def post_repos_actions_runs_rerun_by_owner_repo_run(owner, repo, run, opt = {})
15
+ @http.post("/repos/#{owner}/#{repo}/actions/runs/#{run}/rerun", opt)
16
+ end
17
+
18
+ def post_repos_actions_runs_jobs_rerun_by_owner_repo_run_job(owner, repo, run, job, opt = {})
19
+ @http.post("/repos/#{owner}/#{repo}/actions/runs/#{run}/jobs/#{job}/rerun", opt)
20
+ end
21
+
22
+ def get_repos_actions_runs_jobs_logs_by_owner_repo_run_job(owner, repo, run, job, opt = {})
23
+ @http.get("/repos/#{owner}/#{repo}/actions/runs/#{run}/jobs/#{job}/logs")
24
+ end
25
+
26
+ def post_repos_actions_disable(owner, repo, opt= {})
27
+ @http.post("/repos/#{owner}/#{repo}/actions/disable", opt)
28
+ end
29
+
30
+ def post_repos_actions_enable(owner, repo, opt= {})
31
+ @http.post("/repos/#{owner}/#{repo}/actions/enable", opt)
32
+ end
33
+
34
+ def get_repos_contents_by_owner_repo(owner, repo, opt = {})
35
+ @http.get("/repos/#{owner}/#{repo}/contents", opt)
36
+ end
37
+
38
+ def get_repos_contents_by_owner_repo_filepath(owner, repo, filepath, opt = {})
39
+ @http.get("/repos/#{owner}/#{repo}/contents/#{filepath}", opt)
40
+ end
41
+
42
+ def get_repos_find_by_owner_repo(owner, repo, opt = {})
43
+ @http.get("/repos/#{owner}/#{repo}/find", opt)
44
+ end
45
+
46
+ def get_repos_git_commits_by_owner_repo_sha(owner, repo, sha, opt = {})
47
+ @http.get("/repos/#{owner}/#{repo}/git/commits/#{sha}", opt)
48
+ end
49
+
50
+ def get_repos_commits_diff_by_owner_repo_sha(owner, repo, sha, opt = {})
51
+ @http.get("/repos/#{owner}/#{repo}/commits/#{sha}/diff", opt)
52
+ end
53
+
54
+ def post_repos_hooks_by_owner_repo(owner, repo, opt = {})
55
+ @http.post("/repos/#{owner}/#{repo}/hooks", opt)
56
+ end
57
+
58
+ def patch_repos_hooks_by_owner_repo_id(owner, repo, id, opt = {})
59
+ @http.patch("/repos/#{owner}/#{repo}/hooks/#{id}", opt)
60
+ end
61
+
62
+ def get_repos_hooks_hooktasks_by_owner_repo_id(owner, repo, id, opt = {})
63
+ @http.get("/repos/#{owner}/#{repo}/hooks/#{id}/hooktasks", opt)
64
+ end
65
+
66
+ def get_repos_releases_latest_by_owner_repo(owner, repo, opt = {})
67
+ @http.get("/repos/#{owner}/#{repo}/releases/latest", opt)
68
+ end
69
+
70
+ def get_repos_releases_by_owner_repo(owner, repo, opt = {})
71
+ @http.get("/repos/#{owner}/#{repo}/releases", opt)
72
+ end
73
+
74
+ def get_repos_releases_by_owner_repo_id(owner, repo, opt = {})
75
+ @http.get("/repos/#{owner}/#{repo}/releases/#{id}", opt)
76
+ end
77
+
78
+ def post_repos_releases_by_owner_repo(owner, repo, opt = {})
79
+ @http.post("/repos/#{owner}/#{repo}/releases", opt)
80
+ end
81
+
82
+ def patch_repos_releases_by_owner_repo_id(owner, repo, id, opt = {})
83
+ @http.patch("/repos/#{owner}/#{repo}/releases/#{id}", opt)
84
+ end
85
+
86
+ def get_repos_branch_name_set_by_owner_repo(owner, repo, opt = {})
87
+ @http.get("/repos/#{owner}/#{repo}/branch_name_set", opt)
88
+ end
89
+
90
+ def get_repos_branches_by_owner_repo(owner, repo, opt={})
91
+ @http.get("/repos/#{owner}/#{repo}/branches", opt)
92
+ end
93
+
94
+ def get_repos_branches_branches_slice_by_owner_repo(owner, repo, opt = {})
95
+ @http.get("/repos/#{owner}/#{repo}/branches/branches_slice", opt)
96
+ end
97
+
98
+ def post_repos_branches_restore_by_owner_repo(owner, repo, opt = {})
99
+ @http.post("/repos/#{owner}/#{repo}/branches/restore", opt)
100
+ end
101
+
102
+ def get_repos_tag_name_set_by_owner_repo(owner, repo, opt = {})
103
+ @http.get("/repos/#{owner}/#{repo}/tag_name_set", opt)
104
+ end
105
+
106
+ def get_repos_tags_by_owner_repo(owner, repo, opt = {})
107
+ @http.get("/repos/#{owner}/#{repo}/tags", opt)
108
+ end
109
+
110
+ def get_repos_tags_by_owner_repo_tag(owner, repo, tag, opt = {})
111
+ @http.get("/repos/#{owner}/#{repo}/tags/#{tag}", opt)
112
+ end
113
+
114
+ def get_repos_branch_tag_count_by_owner_repo(owner, repo, opt = {})
115
+ @http.get("/repos/#{owner}/#{repo}/branch_tag_count", opt)
116
+ end
117
+
118
+ def get_repos_readme_by_owner_repo(owner, repo, opt = {})
119
+ @http.get("/repos/#{owner}/#{repo}/readme", opt)
120
+ end
121
+
122
+ def get_repos_readme_by_owner_repo_filepath(owner, repo, filepath, opt = {})
123
+ @http.get("/repos/#{owner}/#{repo}/readme/#{filepath}", opt)
124
+ end
125
+
126
+ def get_repos_commits_slice_by_owner_repo(owner, repo, opt = {})
127
+ @http.get("/repos/#{owner}/#{repo}/commits_slice", opt)
128
+ end
129
+
130
+ def get_repos_recent_commits_by_owner_repo(owner, repo, opt = {})
131
+ @http.get("/repos/#{owner}/#{repo}/recent_commits", opt)
132
+ end
133
+
134
+ def get_repos_contributors_by_owner_repo(owner, repo, opt = {})
135
+ @http.get("/repos/#{owner}/#{repo}/contributors", opt)
136
+ end
137
+
138
+ def get_repos_contributors_stat_by_owner_repo(owner, repo, opt = {})
139
+ @http.get("/repos/#{owner}/#{repo}/contributors/stat", opt)
140
+ end
141
+
142
+ def get_repos_code_stats_by_owner_repo(owner, repo, opt = {})
143
+ @http.get("/repos/#{owner}/#{repo}/code_stats", opt)
144
+ end
145
+
146
+ def get_repos_count_by_owner_repo(owner, repo, opt = {})
147
+ @http.get("/repos/#{owner}/#{repo}/count", opt)
148
+ end
149
+
150
+ def get_repos_file_commits_by_owner_repo_filepath(owner, repo, filepath, opt = {})
151
+ @http.get("/repos/#{owner}/#{repo}/file_commits/#{filepath}", opt)
152
+ end
153
+
154
+ def get_repos_blame_by_owner_repo(owner, repo, opt = {})
155
+ @http.get("/repos/#{owner}/#{repo}/blame", opt)
156
+ end
157
+
158
+ def get_repos_compare_by_owner_repo_baseref_headref(owner, repo, baseRef, headRef, opt = {})
159
+ @http.get("/repos/#{owner}/#{repo}/compare/#{baseRef}...#{headRef}", opt)
160
+ end
161
+
162
+ def post_repos_transfer_by_owner_repo(owner, repo, opt = {})
163
+ @http.post("/repos/#{owner}/#{repo}/transfer", opt)
164
+ end
165
+
166
+ def get_repos_pulls_by_owner_repo_index(owner, repo, index, opt = {})
167
+ @http.get("/repos/#{owner}/#{repo}/pulls/#{index}", opt)
168
+ end
169
+
170
+ def get_repos_pulls_commits_by_owner_repo_index(owner, repo, index, opt = {})
171
+ @http.get("/repos/#{owner}/#{repo}/pulls/#{index}/commits", opt)
172
+ end
173
+
174
+ def get_repos_pulls_files_by_owner_repo_index(owner, repo, index, opt = {})
175
+ @http.get("/repos/#{owner}/#{repo}/pulls/#{index}/files", opt)
176
+ end
177
+
178
+ def post_repos_contents_batch_by_owner_repo(owner, repo, opt = {})
179
+ @http.post("/repos/#{owner}/#{repo}/contents/batch", opt)
180
+ end
181
+
182
+ def get_repos_pulls_versions_by_owner_repo_index(owner, repo, index, opt = {})
183
+ @http.get("/repos/#{owner}/#{repo}/pulls/#{index}/versions", opt)
184
+ end
185
+
186
+ def get_repos_pulls_versions_diff_by_owner_repo_index_id(owner, repo, index, versionID, opt = {})
187
+ @http.get("/repos/#{owner}/#{repo}/pulls/#{index}/versions/#{versionID}/diff", opt)
188
+ end
189
+
190
+ end # Repository
191
+ end # Hat
192
+ end # Api
193
+ end # Gitea
@@ -0,0 +1,13 @@
1
+ module Gitea
2
+ module Api
3
+ module Hat
4
+ module Users
5
+
6
+ def get_users_heatmap_by_username(username, opt = {})
7
+ @http.get("/users/#{username}/heatmap", opt)
8
+ end
9
+
10
+ end # Users
11
+ end # Hat
12
+ end # Api
13
+ end # Gitea
data/lib/gitea/api.rb CHANGED
@@ -11,3 +11,10 @@ require_relative 'api/client'
11
11
  require_relative 'api/config'
12
12
  require_relative 'api/exception'
13
13
  require_relative 'api/http'
14
+ require_relative 'api/hat/repository'
15
+ require_relative 'api/hat/organization'
16
+ require_relative 'api/hat/users'
17
+ require_relative 'api/hat/admin'
18
+ require_relative 'api/hat/client'
19
+ require_relative 'api/hat/config'
20
+ require_relative 'api/hat/http'
data/lib/gitea/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gitea
4
- VERSION = "1.5.0"
4
+ VERSION = "1.5.7"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitea-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.5.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - viletyy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-04-26 00:00:00.000000000 Z
11
+ date: 2024-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -49,6 +49,13 @@ files:
49
49
  - lib/gitea/api/client.rb
50
50
  - lib/gitea/api/config.rb
51
51
  - lib/gitea/api/exception.rb
52
+ - lib/gitea/api/hat/admin.rb
53
+ - lib/gitea/api/hat/client.rb
54
+ - lib/gitea/api/hat/config.rb
55
+ - lib/gitea/api/hat/http.rb
56
+ - lib/gitea/api/hat/organization.rb
57
+ - lib/gitea/api/hat/repository.rb
58
+ - lib/gitea/api/hat/users.rb
52
59
  - lib/gitea/api/http.rb
53
60
  - lib/gitea/api/issue.rb
54
61
  - lib/gitea/api/miscellaneous.rb