Mercurial > repos > yating-l > jbrowsehubtoapollo
comparison apollo/ApolloInstance.py @ 3:6f262a92e8dc draft default tip
planemo upload for repository https://github.com/Yating-L/suite_gonramp_apollo.git commit 91b46f7c891c2466bc5b6a063411cdae75964515-dirty
author | yating-l |
---|---|
date | Mon, 27 Nov 2017 12:06:18 -0500 |
parents | 8ff4b84d709f |
children |
comparison
equal
deleted
inserted
replaced
2:8ff4b84d709f | 3:6f262a92e8dc |
---|---|
1 #!/usr/bin/env python | |
2 import os | |
3 import json | |
4 import shutil | |
5 import tempfile | |
6 import logging | |
7 import random | |
8 import string | |
9 from util import subtools | |
10 from mako.lookup import TemplateLookup | |
11 | |
12 | |
13 class ApolloInstance(object): | |
14 def __init__(self, apollo_host, apollo_admin, tool_directory): | |
15 self.apollo_host = apollo_host | |
16 self.tool_directory = tool_directory | |
17 self.logger = logging.getLogger(__name__) | |
18 self.apollo_admin = apollo_admin | |
19 self.apolloTemplate = self._getApolloTemplate() | |
20 self._arrow_init() | |
21 | |
22 | |
23 def _arrow_init(self): | |
24 subtools.verify_user_login(self.apollo_admin.user_email, self.apollo_admin.password, self.apollo_host) | |
25 arrow_config = tempfile.NamedTemporaryFile(bufsize=0) | |
26 with open(arrow_config.name, 'w') as conf: | |
27 htmlMakoRendered = self.apolloTemplate.render( | |
28 apollo_host = self.apollo_host, | |
29 admin_user = self.apollo_admin.user_email, | |
30 admin_pw = self.apollo_admin.password | |
31 ) | |
32 conf.write(htmlMakoRendered) | |
33 | |
34 home_dir = os.path.expanduser('~') | |
35 arrow_config_dir = os.path.join(home_dir, '.apollo-arrow.yml') | |
36 shutil.copyfile(arrow_config.name, arrow_config_dir) | |
37 self.logger.debug("Initated arrow: apollo-arrow.yml= %s", arrow_config_dir) | |
38 | |
39 #TODO: Encode admin password | |
40 ''' | |
41 def _generatePassword(self, length=8): | |
42 chars = string.digits + string.letters | |
43 pw = ''.join([random.choice(chars) for _ in range(length)]) | |
44 return pw | |
45 ''' | |
46 | |
47 def _getApolloTemplate(self): | |
48 mylookup = TemplateLookup(directories=[os.path.join(self.tool_directory, 'templates')], | |
49 output_encoding='utf-8', encoding_errors='replace') | |
50 apolloTemplate = mylookup.get_template("apollo-arrow.yml") | |
51 return apolloTemplate | |
52 | |
53 def createApolloUser(self, apollo_user, admin=None): | |
54 p = subtools.arrow_create_user(apollo_user.user_email, apollo_user.firstname, apollo_user.lastname, apollo_user.password, admin) | |
55 user_info = json.loads(p) | |
56 user_id = user_info.get('userId') | |
57 if not user_id: | |
58 self.logger.debug("Cannot create new user: %s; The user may already exist", apollo_user.user_email) | |
59 subtools.verify_user_login(apollo_user.user_email, apollo_user.password, self.apollo_host) | |
60 user_id = subtools.arrow_get_users(apollo_user.user_email) | |
61 self.logger.debug("Got user_id for new or existing user: user_id = %s", str(user_id)) | |
62 return user_id | |
63 | |
64 def grantPermission(self, user_id, organism_id, **user_permissions): | |
65 subtools.arrow_update_organism_permissions(user_id, organism_id, **user_permissions) | |
66 self.logger.debug("Grant user %s permissions to organism %s, permissions = %s", str(user_id), str(organism_id), ','.join(user_permissions)) | |
67 | |
68 def addOrganism(self, organism_name, organism_dir): | |
69 p = subtools.arrow_add_organism(organism_name, organism_dir) | |
70 if not p: | |
71 self.logger.error("The user is not authorized to add organism") | |
72 exit(-1) | |
73 organism = json.loads(p) | |
74 organism_id = organism['id'] | |
75 self.logger.debug("Added new organism to Apollo instance, %s", p) | |
76 return organism_id | |
77 | |
78 def loadHubToApollo(self, apollo_user, organism_name, organism_dir, admin_user=False, **user_permissions): | |
79 #user_id = self.createApolloUser(apollo_user, admin_user) | |
80 organism_id = self.addOrganism(organism_name, organism_dir) | |
81 #self.grantPermission(user_id, organism_id, **user_permissions) | |
82 self.logger.debug("Successfully load the hub to Apollo") |