diff --git a/DEVELOP b/DEVELOP new file mode 100644 index 000000000..e69de29bb diff --git a/knowledge_repo/app/app.py b/knowledge_repo/app/app.py index e733f484a..752cf42e6 100644 --- a/knowledge_repo/app/app.py +++ b/knowledge_repo/app/app.py @@ -273,6 +273,19 @@ def format_date(date): except: return date + def append_repo(self,name,uri): + temp = self.repository + self.repository = knowledge_repo.KnowledgeRepository.append_for_uri(name,uri,temp) + self.db_update_index(check_timeouts=False, force=True, reindex=True) + return self.repository + + + def append_repo_obj(self,name,obj): + temp = self.repository + self.repository = knowledge_repo.KnowledgeRepository.append_obj(name,obj,temp) + self.db_update_index(check_timeouts=False, force=True, reindex=True) + return self.repository + @property def repository(self): return getattr(self, '_repository') diff --git a/knowledge_repo/app/auth_providers/oauth2.py b/knowledge_repo/app/auth_providers/oauth2.py index 29baf159f..828f1d46c 100644 --- a/knowledge_repo/app/auth_providers/oauth2.py +++ b/knowledge_repo/app/auth_providers/oauth2.py @@ -156,15 +156,17 @@ def extract_from_dict(d, key): if isinstance(key, (list, tuple)): if len(key) == 1: key = key[0] - else: - return extract_from_dict(d[key[0]], key[1:]) - if isinstance(key, six.string_types): + elif d[key[0]] is None: + return extract_from_dict(d, key[1:]) + else: + return extract_from_dict(d, key[0]) + if isinstance(key, str): return d[key] raise RuntimeError("Invalid key type: {}.".format(key)) response = self.oauth_client.get(self.get_endpoint_url(self.user_info_endpoint), verify=self.verify_ssl_certs) try: - response_dict = json.loads(response.content) + response_dict = json.loads(request.content.decode('utf-8')) identifier = extract_from_dict(response_dict, self.user_info_mapping['identifier']) if identifier is None: raise ValueError("identifier '{}' not found in authentication response".format(self.user_info_mapping['identifier'])) diff --git a/knowledge_repo/app/routes/index.py b/knowledge_repo/app/routes/index.py index 980d24e59..7425951b8 100644 --- a/knowledge_repo/app/routes/index.py +++ b/knowledge_repo/app/routes/index.py @@ -51,6 +51,17 @@ def render_index(): return redirect('/feed') +@blueprint.route('/testupload') +@PageView.logged +def test_upload(): + global current_repo,current_app + #repo = current_app.append_repo("3","kr-test") + #current_repo = repo + dbobj = current_repo.migrate_to_dbrepo("ucla_rnaseq_tcga_analysis","ucla-kr") + + current_repo = current_app.append_repo_obj("3",dbobj) + return redirect('/feed') + @blueprint.route('/favorites') @PageView.logged @login_required @@ -82,10 +93,12 @@ def render_favorites(): @permissions.index_view.require() def render_feed(): """ Renders the index-feed view """ + global current_repo,current_app feed_params = from_request_get_feed_params(request) posts, post_stats = get_posts(feed_params) for post in posts: post.tldr = render_post_tldr(post) + return render_template("index-feed.html", feed_params=feed_params, diff --git a/knowledge_repo/repository.py b/knowledge_repo/repository.py index e6da32246..d4f55493b 100644 --- a/knowledge_repo/repository.py +++ b/knowledge_repo/repository.py @@ -58,6 +58,42 @@ def for_uris(cls, uri): krs = {name: cls.for_uri(uri) for name, uri in list(uris.items())} return MetaKnowledgeRepository(krs) + @classmethod + def migrate_to_dbrepo(cls,gitpath,newpath): + # A new (supposedly) git repository is going to be uploaded + # That must be migrated to the database. + # Inputs : + # gitpath + # newpath + + from .repositories.dbrepository import DbKnowledgeRepository + newpath = "mysql://abhi:1234@localhost/knowledgerepo:%s"%newpath + db_obj = DbKnowledgeRepository(newpath) + gitkr = cls.for_uri(gitpath) + for post in gitkr.posts(): + new_post = db_obj.add(post) + new_post_status = new_post.status + db_obj.submit(new_post.path) + db_obj.accept(new_post.path) + db_obj.publish(new_post.path) + return db_obj + + @classmethod + def append_obj(cls,name,new_obj,meta_repo): + from .repositories.meta import MetaKnowledgeRepository + krs = meta_repo.uri + krs[name] = new_obj + meta_repo = MetaKnowledgeRepository(krs) + return meta_repo + + @classmethod + def append_for_uri(cls,name,uri,meta_repo): + from .repositories.meta import MetaKnowledgeRepository + krs = meta_repo.uri + krs[name] = cls.for_uri(uri) + meta_repo = MetaKnowledgeRepository(krs) + return meta_repo + @classmethod def from_uri(cls, url, *args, **kwargs): return cls(url, *args, **kwargs) diff --git a/scripts/knowledge_repo b/scripts/knowledge_repo index 7b0240e37..93071aadb 100755 --- a/scripts/knowledge_repo +++ b/scripts/knowledge_repo @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 from __future__ import print_function from __future__ import unicode_literals @@ -42,6 +42,13 @@ if os.path.exists(os.path.join(contrib_dir, '__init__.py')): # we finish constructing the entire parser so that the syntax and arguments can change # from version to version of this script. +# Repeating what the argparse already does +def parse_repo_string(repo_str): + prefix_pattern = re.compile('^(?:\{(?P[a-zA-Z_0-9]*)\})?(?P.*)$') + + prefix = prefix_pattern.match(repo_str) + return prefix.groups() + class ParseRepositories(argparse.Action): def __init__(self, **kwargs):