Skip to content

Commit

Permalink
Merge 1df7476 into 8ec9368
Browse files Browse the repository at this point in the history
  • Loading branch information
abhirathb committed Feb 6, 2019
2 parents 8ec9368 + 1df7476 commit b45e652
Show file tree
Hide file tree
Showing 9 changed files with 92 additions and 8 deletions.
19 changes: 18 additions & 1 deletion knowledge_repo/app/app.py
Expand Up @@ -64,7 +64,6 @@ def __init__(self, repo, db_uri=None, debug=None, config=None, **kwargs):
repo = config.prepare_repo(repo)
self.repository = repo
assert isinstance(self.repository, knowledge_repo.KnowledgeRepository), "Invalid repository object provided."

# Set debug mode from kwargs or else maintain current setting
if debug is not None:
self.config['DEBUG'] = debug
Expand All @@ -77,6 +76,7 @@ def __init__(self, repo, db_uri=None, debug=None, config=None, **kwargs):
self.config['SQLALCHEMY_DATABASE_URI'] = db_uri
logger.debug(u"Using database: {}".format(self.config['SQLALCHEMY_DATABASE_URI']))


# Register database schema with flask app
sqlalchemy_db.init_app(self)

Expand Down Expand Up @@ -143,6 +143,7 @@ def load_user_from_request(request):
# anonymous users too.
self.principal.identity_loaders.append(lambda: AnonymousIdentity())


# Synchronise user permissions with data model
@user_loaded_from_request.connect
def on_user_loaded_from_request(sender, user):
Expand Down Expand Up @@ -273,10 +274,26 @@ 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')


@repository.setter
def repository(self, repo):
self._repository = repo
Expand Down
12 changes: 7 additions & 5 deletions knowledge_repo/app/auth_providers/oauth2.py
Expand Up @@ -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']))
Expand Down
Binary file added knowledge_repo/app/kr-server.db
Binary file not shown.
15 changes: 15 additions & 0 deletions knowledge_repo/app/routes/index.py
Expand Up @@ -51,6 +51,19 @@ 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
Expand Down Expand Up @@ -82,10 +95,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,
Expand Down
2 changes: 1 addition & 1 deletion knowledge_repo/app/routes/posts.py
Expand Up @@ -61,10 +61,10 @@ def render(path):
return render_template("error.html")

if post.private and not (username in post.authors or username in current_repo.config.editors):
print "so we came here"
allowed_users = set(user.id for group in post.groups for user in group.users)
if user_id not in allowed_users:
return render_template("permission_ask.html", authors=post.authors_string)

rendered = render_post(post, with_toc=True)
raw_post = render_post_raw(post) if mode == 'raw' else None

Expand Down
2 changes: 2 additions & 0 deletions knowledge_repo/app/templates/base.html
Expand Up @@ -97,6 +97,8 @@
Write a Post!
</a>



<!-- Drop down menu to surface less used links on large screens -->
<ul class="nav navbar-nav navbar-right visible-sm-block visible-md-block visible-lg-block">
<li class="dropdown">
Expand Down
Binary file added knowledge_repo/app/testdb
Binary file not shown.
36 changes: 36 additions & 0 deletions knowledge_repo/repository.py
Expand Up @@ -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)
Expand Down
14 changes: 13 additions & 1 deletion scripts/knowledge_repo
Expand Up @@ -42,6 +42,15 @@ 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<name>[a-zA-Z_0-9]*)\})?(?P<uri>.*)$')

prefix = prefix_pattern.match(repo_str)
return prefix.groups()



class ParseRepositories(argparse.Action):

def __init__(self, **kwargs):
Expand Down Expand Up @@ -97,7 +106,6 @@ try:
except (ValueError, git.GitError, gitdb.exc.ODBError): # TODO: Generalise error to cater for all KnowledgeRepository instances.
repo = None


# Update repository so that we can ensure git repository configuration is up to date
# We wrap this in a try/except block because failing to update a repository can
# happen for all sorts of reasons that should not inhibit other actions
Expand Down Expand Up @@ -237,6 +245,10 @@ if args.dev and os.path.exists(os.path.join(os.path.dirname(__file__), '..', '.g

args = parser.parse_args()





if not hasattr(args, 'action'):
parser.print_help()
sys.exit(1)
Expand Down

0 comments on commit b45e652

Please sign in to comment.