Show More
@@ -0,0 +1,107 b'' | |||||
|
1 | # -*- coding: utf-8 -*- | |||
|
2 | ||||
|
3 | # Copyright (C) 2016-2019 RhodeCode GmbH | |||
|
4 | # | |||
|
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 | |||
|
7 | # (only), as published by the Free Software Foundation. | |||
|
8 | # | |||
|
9 | # This program is distributed in the hope that it will be useful, | |||
|
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
12 | # GNU General Public License for more details. | |||
|
13 | # | |||
|
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/>. | |||
|
16 | # | |||
|
17 | # This program is dual-licensed. If you wish to learn more about the | |||
|
18 | # RhodeCode Enterprise Edition, including its added features, Support services, | |||
|
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ | |||
|
20 | ||||
|
21 | import sys | |||
|
22 | import logging | |||
|
23 | ||||
|
24 | import click | |||
|
25 | ||||
|
26 | from rhodecode.lib.pyramid_utils import bootstrap | |||
|
27 | from rhodecode.model.db import Session, User, Repository | |||
|
28 | from rhodecode.model.user import UserModel | |||
|
29 | from rhodecode.apps.file_store import utils as store_utils | |||
|
30 | ||||
|
31 | log = logging.getLogger(__name__) | |||
|
32 | ||||
|
33 | ||||
|
34 | @click.command() | |||
|
35 | @click.argument('ini_path', type=click.Path(exists=True)) | |||
|
36 | @click.option( | |||
|
37 | '--filename', | |||
|
38 | required=True, | |||
|
39 | help='Filename for artifact.') | |||
|
40 | @click.option( | |||
|
41 | '--file-path', | |||
|
42 | required=True, | |||
|
43 | type=click.Path(exists=True, dir_okay=False, readable=True), | |||
|
44 | help='Path to a file to be added as artifact') | |||
|
45 | @click.option( | |||
|
46 | '--repo-id', | |||
|
47 | required=True, | |||
|
48 | type=int, | |||
|
49 | help='ID of repository to add this artifact to.') | |||
|
50 | @click.option( | |||
|
51 | '--user-id', | |||
|
52 | default=None, | |||
|
53 | type=int, | |||
|
54 | help='User ID for creator of artifact. ' | |||
|
55 | 'Default would be first super admin.') | |||
|
56 | @click.option( | |||
|
57 | '--description', | |||
|
58 | default=None, | |||
|
59 | type=str, | |||
|
60 | help='Add description to this artifact') | |||
|
61 | def main(ini_path, filename, file_path, repo_id, user_id, description): | |||
|
62 | return command(ini_path, filename, file_path, repo_id, user_id, description) | |||
|
63 | ||||
|
64 | ||||
|
65 | def command(ini_path, filename, file_path, repo_id, user_id, description): | |||
|
66 | with bootstrap(ini_path, env={'RC_CMD_SETUP_RC': '1'}) as env: | |||
|
67 | try: | |||
|
68 | from rc_ee.api.views.store_api import _store_file | |||
|
69 | except ImportError: | |||
|
70 | click.secho('ERROR: Unable to import store_api. ' | |||
|
71 | 'store_api is only available in EE edition of RhodeCode', | |||
|
72 | fg='red') | |||
|
73 | sys.exit(-1) | |||
|
74 | ||||
|
75 | request = env['request'] | |||
|
76 | ||||
|
77 | repo = Repository.get(repo_id) | |||
|
78 | if not repo: | |||
|
79 | click.secho('ERROR: Unable to find repository with id `{}`'.format(repo_id), | |||
|
80 | fg='red') | |||
|
81 | sys.exit(-1) | |||
|
82 | ||||
|
83 | # if we don't give user, or it's "DEFAULT" user we pick super-admin | |||
|
84 | if user_id is not None or user_id == 1: | |||
|
85 | db_user = User.get(user_id) | |||
|
86 | else: | |||
|
87 | db_user = User.get_first_super_admin() | |||
|
88 | ||||
|
89 | if not db_user: | |||
|
90 | click.secho('ERROR: Unable to find user with id/username `{}`'.format(user_id), | |||
|
91 | fg='red') | |||
|
92 | sys.exit(-1) | |||
|
93 | ||||
|
94 | auth_user = db_user.AuthUser(ip_addr='127.0.0.1') | |||
|
95 | ||||
|
96 | storage = store_utils.get_file_storage(request.registry.settings) | |||
|
97 | ||||
|
98 | with open(file_path, 'rb') as f: | |||
|
99 | click.secho('Adding new artifact from path: `{}`'.format(file_path), | |||
|
100 | fg='green') | |||
|
101 | ||||
|
102 | file_data = _store_file( | |||
|
103 | storage, auth_user, filename, content=None, check_acl=True, | |||
|
104 | file_obj=f, description=description, | |||
|
105 | scope_repo_id=repo.repo_id) | |||
|
106 | click.secho('File Data: {}'.format(file_data), | |||
|
107 | fg='green') |
@@ -169,6 +169,7 b' setup(' | |||||
169 | 'rc-setup-app=rhodecode.lib.rc_commands.setup_rc:main', |
|
169 | 'rc-setup-app=rhodecode.lib.rc_commands.setup_rc:main', | |
170 | 'rc-upgrade-db=rhodecode.lib.rc_commands.upgrade_db:main', |
|
170 | 'rc-upgrade-db=rhodecode.lib.rc_commands.upgrade_db:main', | |
171 | 'rc-ishell=rhodecode.lib.rc_commands.ishell:main', |
|
171 | 'rc-ishell=rhodecode.lib.rc_commands.ishell:main', | |
|
172 | 'rc-add-artifact=rhodecode.lib.rc_commands.add_artifact:main', | |||
172 | 'rc-ssh-wrapper=rhodecode.apps.ssh_support.lib.ssh_wrapper:main', |
|
173 | 'rc-ssh-wrapper=rhodecode.apps.ssh_support.lib.ssh_wrapper:main', | |
173 | ], |
|
174 | ], | |
174 | 'beaker.backends': [ |
|
175 | 'beaker.backends': [ |
General Comments 0
You need to be logged in to leave comments.
Login now