| 60 | |
| 61 | |
| 62 | def deploy_egg(host, port, project_name, file_suffix): |
| 63 | # deploy egg |
| 64 | egg_files = find_files(file_suffix, os.path.join(cur_dir, 'dist')) |
| 65 | if len(egg_files) > 1: |
| 66 | raise Exception('ERROR: there are more than one egg files') |
| 67 | elif len(egg_files) == 0: |
| 68 | raise Exception('ERROR: egg file not found') |
| 69 | |
| 70 | # deploy to spiderkeeper |
| 71 | session = requests.session() |
| 72 | base_url = 'https://{host}:{port}'.format(host=host, port=port) |
| 73 | resp = session.get(os.path.join(base_url, 'project/manage')) |
| 74 | if not resp.ok: |
| 75 | raise Exception('visit {} failed'.format(base_url)) |
| 76 | resp = session.get(os.path.join(base_url, 'api/projects')) |
| 77 | projects = json.loads(resp.text) |
| 78 | project_id = None |
| 79 | for project in projects: |
| 80 | if project['project_name'] == project_name: |
| 81 | project_id = project['project_id'] |
| 82 | break |
| 83 | if project_id is None: |
| 84 | raise Exception('ERROR: project {} not found'.format(project_name)) |
| 85 | |
| 86 | files = {'file': (open(egg_files[0], 'rb'))} |
| 87 | headers = {} |
| 88 | headers['Origin'] = base_url |
| 89 | headers['Referer'] = os.path.join(base_url, 'project/{}/spider/deploy'.format(project_id)) |
| 90 | upload_url = os.path.join(base_url, 'project/{}/spider/upload'.format(project_id)) |
| 91 | resp = session.post(upload_url, files=files, stream=True, allow_redirects=True, headers=headers) |
| 92 | if not resp.ok: |
| 93 | raise Exception('ERROR: deploy failed. status code: {}, reason: {}\n'.format(resp.status_code, resp.reason)) |
| 94 | |
| 95 | |
| 96 | def clean(): |