##// END OF EJS Templates
cleanup: remove left over print statement
marcink -
r648:c421e71d default
parent child Browse files
Show More
@@ -1,285 +1,284 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2012-2016 RhodeCode GmbH
3 # Copyright (C) 2012-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22 RhodeCode task modules, containing all task that suppose to be run
22 RhodeCode task modules, containing all task that suppose to be run
23 by celery daemon
23 by celery daemon
24 """
24 """
25
25
26
26
27 import os
27 import os
28 import logging
28 import logging
29
29
30 from celery.task import task
30 from celery.task import task
31 from pylons import config
31 from pylons import config
32
32
33 import rhodecode
33 import rhodecode
34 from rhodecode.lib.celerylib import (
34 from rhodecode.lib.celerylib import (
35 run_task, dbsession, __get_lockkey, LockHeld, DaemonLock,
35 run_task, dbsession, __get_lockkey, LockHeld, DaemonLock,
36 get_session, vcsconnection, RhodecodeCeleryTask)
36 get_session, vcsconnection, RhodecodeCeleryTask)
37 from rhodecode.lib.hooks_base import log_create_repository
37 from rhodecode.lib.hooks_base import log_create_repository
38 from rhodecode.lib.rcmail.smtp_mailer import SmtpMailer
38 from rhodecode.lib.rcmail.smtp_mailer import SmtpMailer
39 from rhodecode.lib.utils import add_cache, action_logger
39 from rhodecode.lib.utils import add_cache, action_logger
40 from rhodecode.lib.utils2 import safe_int, str2bool
40 from rhodecode.lib.utils2 import safe_int, str2bool
41 from rhodecode.model.db import Repository, User
41 from rhodecode.model.db import Repository, User
42
42
43
43
44 add_cache(config) # pragma: no cover
44 add_cache(config) # pragma: no cover
45
45
46
46
47 def get_logger(cls):
47 def get_logger(cls):
48 if rhodecode.CELERY_ENABLED:
48 if rhodecode.CELERY_ENABLED:
49 try:
49 try:
50 log = cls.get_logger()
50 log = cls.get_logger()
51 except Exception:
51 except Exception:
52 log = logging.getLogger(__name__)
52 log = logging.getLogger(__name__)
53 else:
53 else:
54 log = logging.getLogger(__name__)
54 log = logging.getLogger(__name__)
55
55
56 return log
56 return log
57
57
58
58
59 @task(ignore_result=True, base=RhodecodeCeleryTask)
59 @task(ignore_result=True, base=RhodecodeCeleryTask)
60 @dbsession
60 @dbsession
61 def send_email(recipients, subject, body='', html_body='', email_config=None):
61 def send_email(recipients, subject, body='', html_body='', email_config=None):
62 """
62 """
63 Sends an email with defined parameters from the .ini files.
63 Sends an email with defined parameters from the .ini files.
64
64
65 :param recipients: list of recipients, it this is empty the defined email
65 :param recipients: list of recipients, it this is empty the defined email
66 address from field 'email_to' is used instead
66 address from field 'email_to' is used instead
67 :param subject: subject of the mail
67 :param subject: subject of the mail
68 :param body: body of the mail
68 :param body: body of the mail
69 :param html_body: html version of body
69 :param html_body: html version of body
70 """
70 """
71 log = get_logger(send_email)
71 log = get_logger(send_email)
72
72
73 email_config = email_config or rhodecode.CONFIG
73 email_config = email_config or rhodecode.CONFIG
74 print email_config
75 subject = "%s %s" % (email_config.get('email_prefix', ''), subject)
74 subject = "%s %s" % (email_config.get('email_prefix', ''), subject)
76 if not recipients:
75 if not recipients:
77 # if recipients are not defined we send to email_config + all admins
76 # if recipients are not defined we send to email_config + all admins
78 admins = [
77 admins = [
79 u.email for u in User.query().filter(User.admin == True).all()]
78 u.email for u in User.query().filter(User.admin == True).all()]
80 recipients = [email_config.get('email_to')] + admins
79 recipients = [email_config.get('email_to')] + admins
81
80
82 mail_server = email_config.get('smtp_server') or None
81 mail_server = email_config.get('smtp_server') or None
83 if mail_server is None:
82 if mail_server is None:
84 log.error("SMTP server information missing. Sending email failed. "
83 log.error("SMTP server information missing. Sending email failed. "
85 "Make sure that `smtp_server` variable is configured "
84 "Make sure that `smtp_server` variable is configured "
86 "inside the .ini file")
85 "inside the .ini file")
87 return False
86 return False
88
87
89 mail_from = email_config.get('app_email_from', 'RhodeCode')
88 mail_from = email_config.get('app_email_from', 'RhodeCode')
90 user = email_config.get('smtp_username')
89 user = email_config.get('smtp_username')
91 passwd = email_config.get('smtp_password')
90 passwd = email_config.get('smtp_password')
92 mail_port = email_config.get('smtp_port')
91 mail_port = email_config.get('smtp_port')
93 tls = str2bool(email_config.get('smtp_use_tls'))
92 tls = str2bool(email_config.get('smtp_use_tls'))
94 ssl = str2bool(email_config.get('smtp_use_ssl'))
93 ssl = str2bool(email_config.get('smtp_use_ssl'))
95 debug = str2bool(email_config.get('debug'))
94 debug = str2bool(email_config.get('debug'))
96 smtp_auth = email_config.get('smtp_auth')
95 smtp_auth = email_config.get('smtp_auth')
97
96
98 try:
97 try:
99 m = SmtpMailer(mail_from, user, passwd, mail_server, smtp_auth,
98 m = SmtpMailer(mail_from, user, passwd, mail_server, smtp_auth,
100 mail_port, ssl, tls, debug=debug)
99 mail_port, ssl, tls, debug=debug)
101 m.send(recipients, subject, body, html_body)
100 m.send(recipients, subject, body, html_body)
102 except Exception:
101 except Exception:
103 log.exception('Mail sending failed')
102 log.exception('Mail sending failed')
104 return False
103 return False
105 return True
104 return True
106
105
107
106
108 @task(ignore_result=True, base=RhodecodeCeleryTask)
107 @task(ignore_result=True, base=RhodecodeCeleryTask)
109 @dbsession
108 @dbsession
110 @vcsconnection
109 @vcsconnection
111 def create_repo(form_data, cur_user):
110 def create_repo(form_data, cur_user):
112 from rhodecode.model.repo import RepoModel
111 from rhodecode.model.repo import RepoModel
113 from rhodecode.model.user import UserModel
112 from rhodecode.model.user import UserModel
114 from rhodecode.model.settings import SettingsModel
113 from rhodecode.model.settings import SettingsModel
115
114
116 log = get_logger(create_repo)
115 log = get_logger(create_repo)
117 DBS = get_session()
116 DBS = get_session()
118
117
119 cur_user = UserModel(DBS)._get_user(cur_user)
118 cur_user = UserModel(DBS)._get_user(cur_user)
120 owner = cur_user
119 owner = cur_user
121
120
122 repo_name = form_data['repo_name']
121 repo_name = form_data['repo_name']
123 repo_name_full = form_data['repo_name_full']
122 repo_name_full = form_data['repo_name_full']
124 repo_type = form_data['repo_type']
123 repo_type = form_data['repo_type']
125 description = form_data['repo_description']
124 description = form_data['repo_description']
126 private = form_data['repo_private']
125 private = form_data['repo_private']
127 clone_uri = form_data.get('clone_uri')
126 clone_uri = form_data.get('clone_uri')
128 repo_group = safe_int(form_data['repo_group'])
127 repo_group = safe_int(form_data['repo_group'])
129 landing_rev = form_data['repo_landing_rev']
128 landing_rev = form_data['repo_landing_rev']
130 copy_fork_permissions = form_data.get('copy_permissions')
129 copy_fork_permissions = form_data.get('copy_permissions')
131 copy_group_permissions = form_data.get('repo_copy_permissions')
130 copy_group_permissions = form_data.get('repo_copy_permissions')
132 fork_of = form_data.get('fork_parent_id')
131 fork_of = form_data.get('fork_parent_id')
133 state = form_data.get('repo_state', Repository.STATE_PENDING)
132 state = form_data.get('repo_state', Repository.STATE_PENDING)
134
133
135 # repo creation defaults, private and repo_type are filled in form
134 # repo creation defaults, private and repo_type are filled in form
136 defs = SettingsModel().get_default_repo_settings(strip_prefix=True)
135 defs = SettingsModel().get_default_repo_settings(strip_prefix=True)
137 enable_statistics = form_data.get(
136 enable_statistics = form_data.get(
138 'enable_statistics', defs.get('repo_enable_statistics'))
137 'enable_statistics', defs.get('repo_enable_statistics'))
139 enable_locking = form_data.get(
138 enable_locking = form_data.get(
140 'enable_locking', defs.get('repo_enable_locking'))
139 'enable_locking', defs.get('repo_enable_locking'))
141 enable_downloads = form_data.get(
140 enable_downloads = form_data.get(
142 'enable_downloads', defs.get('repo_enable_downloads'))
141 'enable_downloads', defs.get('repo_enable_downloads'))
143
142
144 try:
143 try:
145 RepoModel(DBS)._create_repo(
144 RepoModel(DBS)._create_repo(
146 repo_name=repo_name_full,
145 repo_name=repo_name_full,
147 repo_type=repo_type,
146 repo_type=repo_type,
148 description=description,
147 description=description,
149 owner=owner,
148 owner=owner,
150 private=private,
149 private=private,
151 clone_uri=clone_uri,
150 clone_uri=clone_uri,
152 repo_group=repo_group,
151 repo_group=repo_group,
153 landing_rev=landing_rev,
152 landing_rev=landing_rev,
154 fork_of=fork_of,
153 fork_of=fork_of,
155 copy_fork_permissions=copy_fork_permissions,
154 copy_fork_permissions=copy_fork_permissions,
156 copy_group_permissions=copy_group_permissions,
155 copy_group_permissions=copy_group_permissions,
157 enable_statistics=enable_statistics,
156 enable_statistics=enable_statistics,
158 enable_locking=enable_locking,
157 enable_locking=enable_locking,
159 enable_downloads=enable_downloads,
158 enable_downloads=enable_downloads,
160 state=state
159 state=state
161 )
160 )
162
161
163 action_logger(cur_user, 'user_created_repo',
162 action_logger(cur_user, 'user_created_repo',
164 repo_name_full, '', DBS)
163 repo_name_full, '', DBS)
165 DBS.commit()
164 DBS.commit()
166
165
167 # now create this repo on Filesystem
166 # now create this repo on Filesystem
168 RepoModel(DBS)._create_filesystem_repo(
167 RepoModel(DBS)._create_filesystem_repo(
169 repo_name=repo_name,
168 repo_name=repo_name,
170 repo_type=repo_type,
169 repo_type=repo_type,
171 repo_group=RepoModel(DBS)._get_repo_group(repo_group),
170 repo_group=RepoModel(DBS)._get_repo_group(repo_group),
172 clone_uri=clone_uri,
171 clone_uri=clone_uri,
173 )
172 )
174 repo = Repository.get_by_repo_name(repo_name_full)
173 repo = Repository.get_by_repo_name(repo_name_full)
175 log_create_repository(created_by=owner.username, **repo.get_dict())
174 log_create_repository(created_by=owner.username, **repo.get_dict())
176
175
177 # update repo commit caches initially
176 # update repo commit caches initially
178 repo.update_commit_cache()
177 repo.update_commit_cache()
179
178
180 # set new created state
179 # set new created state
181 repo.set_state(Repository.STATE_CREATED)
180 repo.set_state(Repository.STATE_CREATED)
182 DBS.commit()
181 DBS.commit()
183 except Exception as e:
182 except Exception as e:
184 log.warning('Exception %s occurred when creating repository, '
183 log.warning('Exception %s occurred when creating repository, '
185 'doing cleanup...', e)
184 'doing cleanup...', e)
186 # rollback things manually !
185 # rollback things manually !
187 repo = Repository.get_by_repo_name(repo_name_full)
186 repo = Repository.get_by_repo_name(repo_name_full)
188 if repo:
187 if repo:
189 Repository.delete(repo.repo_id)
188 Repository.delete(repo.repo_id)
190 DBS.commit()
189 DBS.commit()
191 RepoModel(DBS)._delete_filesystem_repo(repo)
190 RepoModel(DBS)._delete_filesystem_repo(repo)
192 raise
191 raise
193
192
194 # it's an odd fix to make celery fail task when exception occurs
193 # it's an odd fix to make celery fail task when exception occurs
195 def on_failure(self, *args, **kwargs):
194 def on_failure(self, *args, **kwargs):
196 pass
195 pass
197
196
198 return True
197 return True
199
198
200
199
201 @task(ignore_result=True, base=RhodecodeCeleryTask)
200 @task(ignore_result=True, base=RhodecodeCeleryTask)
202 @dbsession
201 @dbsession
203 @vcsconnection
202 @vcsconnection
204 def create_repo_fork(form_data, cur_user):
203 def create_repo_fork(form_data, cur_user):
205 """
204 """
206 Creates a fork of repository using internal VCS methods
205 Creates a fork of repository using internal VCS methods
207
206
208 :param form_data:
207 :param form_data:
209 :param cur_user:
208 :param cur_user:
210 """
209 """
211 from rhodecode.model.repo import RepoModel
210 from rhodecode.model.repo import RepoModel
212 from rhodecode.model.user import UserModel
211 from rhodecode.model.user import UserModel
213
212
214 log = get_logger(create_repo_fork)
213 log = get_logger(create_repo_fork)
215 DBS = get_session()
214 DBS = get_session()
216
215
217 cur_user = UserModel(DBS)._get_user(cur_user)
216 cur_user = UserModel(DBS)._get_user(cur_user)
218 owner = cur_user
217 owner = cur_user
219
218
220 repo_name = form_data['repo_name'] # fork in this case
219 repo_name = form_data['repo_name'] # fork in this case
221 repo_name_full = form_data['repo_name_full']
220 repo_name_full = form_data['repo_name_full']
222 repo_type = form_data['repo_type']
221 repo_type = form_data['repo_type']
223 description = form_data['description']
222 description = form_data['description']
224 private = form_data['private']
223 private = form_data['private']
225 clone_uri = form_data.get('clone_uri')
224 clone_uri = form_data.get('clone_uri')
226 repo_group = safe_int(form_data['repo_group'])
225 repo_group = safe_int(form_data['repo_group'])
227 landing_rev = form_data['landing_rev']
226 landing_rev = form_data['landing_rev']
228 copy_fork_permissions = form_data.get('copy_permissions')
227 copy_fork_permissions = form_data.get('copy_permissions')
229 fork_id = safe_int(form_data.get('fork_parent_id'))
228 fork_id = safe_int(form_data.get('fork_parent_id'))
230
229
231 try:
230 try:
232 fork_of = RepoModel(DBS)._get_repo(fork_id)
231 fork_of = RepoModel(DBS)._get_repo(fork_id)
233 RepoModel(DBS)._create_repo(
232 RepoModel(DBS)._create_repo(
234 repo_name=repo_name_full,
233 repo_name=repo_name_full,
235 repo_type=repo_type,
234 repo_type=repo_type,
236 description=description,
235 description=description,
237 owner=owner,
236 owner=owner,
238 private=private,
237 private=private,
239 clone_uri=clone_uri,
238 clone_uri=clone_uri,
240 repo_group=repo_group,
239 repo_group=repo_group,
241 landing_rev=landing_rev,
240 landing_rev=landing_rev,
242 fork_of=fork_of,
241 fork_of=fork_of,
243 copy_fork_permissions=copy_fork_permissions
242 copy_fork_permissions=copy_fork_permissions
244 )
243 )
245 action_logger(cur_user, 'user_forked_repo:%s' % repo_name_full,
244 action_logger(cur_user, 'user_forked_repo:%s' % repo_name_full,
246 fork_of.repo_name, '', DBS)
245 fork_of.repo_name, '', DBS)
247 DBS.commit()
246 DBS.commit()
248
247
249 base_path = Repository.base_path()
248 base_path = Repository.base_path()
250 source_repo_path = os.path.join(base_path, fork_of.repo_name)
249 source_repo_path = os.path.join(base_path, fork_of.repo_name)
251
250
252 # now create this repo on Filesystem
251 # now create this repo on Filesystem
253 RepoModel(DBS)._create_filesystem_repo(
252 RepoModel(DBS)._create_filesystem_repo(
254 repo_name=repo_name,
253 repo_name=repo_name,
255 repo_type=repo_type,
254 repo_type=repo_type,
256 repo_group=RepoModel(DBS)._get_repo_group(repo_group),
255 repo_group=RepoModel(DBS)._get_repo_group(repo_group),
257 clone_uri=source_repo_path,
256 clone_uri=source_repo_path,
258 )
257 )
259 repo = Repository.get_by_repo_name(repo_name_full)
258 repo = Repository.get_by_repo_name(repo_name_full)
260 log_create_repository(created_by=owner.username, **repo.get_dict())
259 log_create_repository(created_by=owner.username, **repo.get_dict())
261
260
262 # update repo commit caches initially
261 # update repo commit caches initially
263 config = repo._config
262 config = repo._config
264 config.set('extensions', 'largefiles', '')
263 config.set('extensions', 'largefiles', '')
265 repo.update_commit_cache(config=config)
264 repo.update_commit_cache(config=config)
266
265
267 # set new created state
266 # set new created state
268 repo.set_state(Repository.STATE_CREATED)
267 repo.set_state(Repository.STATE_CREATED)
269 DBS.commit()
268 DBS.commit()
270 except Exception as e:
269 except Exception as e:
271 log.warning('Exception %s occurred when forking repository, '
270 log.warning('Exception %s occurred when forking repository, '
272 'doing cleanup...', e)
271 'doing cleanup...', e)
273 # rollback things manually !
272 # rollback things manually !
274 repo = Repository.get_by_repo_name(repo_name_full)
273 repo = Repository.get_by_repo_name(repo_name_full)
275 if repo:
274 if repo:
276 Repository.delete(repo.repo_id)
275 Repository.delete(repo.repo_id)
277 DBS.commit()
276 DBS.commit()
278 RepoModel(DBS)._delete_filesystem_repo(repo)
277 RepoModel(DBS)._delete_filesystem_repo(repo)
279 raise
278 raise
280
279
281 # it's an odd fix to make celery fail task when exception occurs
280 # it's an odd fix to make celery fail task when exception occurs
282 def on_failure(self, *args, **kwargs):
281 def on_failure(self, *args, **kwargs):
283 pass
282 pass
284
283
285 return True
284 return True
General Comments 0
You need to be logged in to leave comments. Login now