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")