def top(sort_by, page): query = Repo.filter_by_args(Repo.query, request.args).filter(Repo.worth > 4) sorts = { 'wanted': [Repo.worth.desc(), Repo.stargazers_count.desc()], 'stars': [Repo.stargazers_count.desc()] } for f in [ sort for sort in ( sorts['wanted'] if sort_by not in sorts else sorts[sort_by]) ]: query = query.order_by(f) if not g.user: query = query.add_columns(db.null()) else: query = UserAttitude.join_by_user_and_repo(query, g.user.id, Repo.id)\ .add_columns(UserAttitude.attitude) entries = query.paginate(page if page > 0 else 1, per_page=20, error_out=False) if entries.pages and entries.pages < entries.page: return top(sort_by, entries.pages) return render_template('repository/top.html', languages=Repo.language_distinct(), repos=entries, page=page, sort_by=sort_by)
def top(page, sort_by, filter_worth_by): query = Repo.filter_by_args(Repo.query, request.args).filter(Repo.mature.is_(True)) sorts = { 'wanted': [Repo.worth.desc(), Repo.stargazers_count.desc()], 'stars': [Repo.stargazers_count.desc()] } if filter_worth_by not in ('rising', 'solid'): filter_worth_by = 'solid' query = query.filter( (Repo.worth >= app.config['REPOSITORY_WORTH_SOLID']) if filter_worth_by == 'solid' else ( (Repo.worth > app.config['REPOSITORY_WORTH_DEFAULT']) & (Repo.worth < app.config['REPOSITORY_WORTH_SOLID']) ) ) for f in [sort for sort in (sorts['wanted'] if sort_by not in sorts else sorts[sort_by])]: query = query.order_by(f) if not g.user: query = query.add_columns(db.null()) else: query = UserAttitude.join_by_user_and_repo(query, g.user.id, Repo.id)\ .add_columns(UserAttitude.attitude) entries = query.paginate(page if page > 0 else 1, per_page=20, error_out=False) if entries.pages and entries.pages < entries.page: return top(entries.pages, sort_by, filter_worth_by) return render_template( 'repository/top.html', languages=Repo.language_distinct(), repos=entries, page=page, sort_by=sort_by, filter_worth_by=filter_worth_by )
def test_update_fields(self): entry = Repo() entry.homepage = 'example.com' self.assertEquals(entry.homepage, 'http://example.com') entry.description = '' self.assertEquals(entry.description, None) entry.description = 'atext' * 60 self.assertEquals(len(entry.description), 250)
def test_update_fields(self): entry = Repo() entry.homepage = ' example.com ' self.assertEquals(entry.homepage, 'http://example.com') entry.description = '' self.assertEquals(entry.description, None) entry.description = 'atext' * 60 self.assertEquals(len(entry.description), 250)
def test_update_status_with_timestamp(self): entry = Repo() entry.html_url = 'http://example.com' self.assertIsNone(entry.status_updated_at) entry.status = 'unknown' status_updated_at = entry.status_updated_at self.assertEquals(entry.status, 'unknown') self.assertIsNotNone(status_updated_at) entry.status = 'unknown' self.assertEquals(entry.status_updated_at, status_updated_at)
def list_by_range(rng): map_list = {'day': 'ReportAllDaily', 'week': 'ReportAllWeekly', 'month': 'ReportAllMonthly'} model = getattr(report, map_list.get(rng, map_list.get('day'))) query = Repo.filter_by_args(model.query, request.args)\ .join(Repo)\ .order_by(model.cnt_watch.desc()) if not g.user: query = query.add_columns(db.null()) else: query = UserAttitude.join_by_user_and_repo(query, g.user.id, Repo.id)\ .add_columns(UserAttitude.attitude) return render_template('index.html', entries=query, languages=Repo.language_distinct())
def list_by_attitude(attitude, page): q = UserAttitude.join_by_user_and_repo(Repo.query, g.user.id, Repo.id)\ .add_columns(UserAttitude.attitude if attitude else db.null())\ .filter(UserAttitude.attitude == attitude) q = Repo.filter_by_args(q, request.args) entries = q.paginate(page if page > 0 else 1, per_page=20, error_out=False) if entries.pages and entries.pages < entries.page: return list_by_attitude(attitude, entries.pages) return render_template( 'repository/attitude.html', repos=entries, attitude=attitude, languages=Repo.language_distinct() )
def list_by_attitude(attitude, page): q = UserAttitude.join_by_user_and_repo(Repo.query, g.user.id, Repo.id)\ .add_columns(UserAttitude.attitude if attitude else db.null())\ .filter(UserAttitude.attitude == attitude) q = Repo.filter_by_args(q, request.args) entries = q.paginate(page if page > 0 else 1, per_page=20, error_out=False) if entries.pages and entries.pages < entries.page: return list_by_attitude(attitude, entries.pages) return render_template('repository/attitude.html', repos=entries, attitude=attitude, languages=Repo.language_distinct())
def most_starred_sync(model_name: str, query: str): app.logger.info('Importing repos of %s', model_name) model = getattr(report, model_name) service = bigquery.instance(app) db.session.query(model).delete() job = Job(service, query) job.execute() for row in results_of(job): info, code = repo_info(row[1]) if not info: continue db.session.merge( model(id=row[0], cnt_watch=row[2], repo=Repo(id=info['id'], name=info['name'], language=info['language'], full_name=info['full_name'], description=info['description'], html_url=info['html_url'], homepage=info['homepage'], created_at=datetime.strptime( info['created_at'], '%Y-%m-%dT%H:%M:%SZ')))) db.session.commit()
def index(rng): map_list = {'day': 'ReportAllDaily', 'week': 'ReportAllWeekly', 'month': 'ReportAllMonthly'} if rng not in map_list: rng = 'day' model = getattr(report, map_list[rng]) if not g.user: q = model.query.join(Repo).add_columns(db.null()) else: q = model.query\ .join(Repo)\ .add_columns(UserAttitude.attitude)\ .outerjoin( UserAttitude, (UserAttitude.user_id == g.user.id) & (UserAttitude.repo_id == Repo.id) ) languages = Repo.language_distinct() lang = request.args.get('lang') if lang != 'All' and (lang,) in languages: q = q.filter(Repo.language == lang) status = request.args.get('status') if status in ('promising', 'hopeless'): q = q.filter(Repo.status == status) if bool(request.args.get('mature')): q = q.filter(Repo.mature.is_(True)) return render_template( 'index.html', range=rng, entries=q.order_by(db.desc(model.cnt_watch)), languages=languages )
def repo_like(repo_name: str, uid: int): repo = Repo.get_one_by_full_name(repo_name) if not repo: return None db.session.merge(UserAttitude.like(uid, repo.id)) db.session.commit() return repo.id
def top(page): q = Repo.filter_by_args(Repo.query, request.args)\ .filter(Repo.worth > 4)\ .order_by(Repo.worth.desc())\ .order_by(Repo.created_at.asc()) if not g.user: q = q.add_columns(db.null()) else: q = UserAttitude.join_by_user_and_repo(q, g.user.id, Repo.id)\ .add_columns(UserAttitude.attitude) entries = q.paginate(page if page > 0 else 1, per_page=20, error_out=False) if entries.pages and entries.pages < entries.page: return top(entries.pages) return render_template( 'repository/top.html', repos=entries, page=page, languages=Repo.language_distinct() )
def setUpClass(cls): db.create_all() db.session.add( Repo(created_at=datetime.now(), description='test', full_name='test/test', html_url='http://py.test', id=1, name='test')) db.session.commit()
def top(page, sort_by, filter_worth_by): query = Repo.filter_by_args(Repo.query, request.args).filter(Repo.mature.is_(True)) sorts = { 'wanted': [Repo.worth.desc(), Repo.stargazers_count.desc()], 'stars': [Repo.stargazers_count.desc()] } if filter_worth_by not in ('rising', 'solid'): filter_worth_by = 'solid' query = query.filter(( Repo.worth >= app.config['REPOSITORY_WORTH_SOLID'] ) if filter_worth_by == 'solid' else ( (Repo.worth > app.config['REPOSITORY_WORTH_DEFAULT']) & (Repo.worth < app.config['REPOSITORY_WORTH_SOLID']))) for f in [ sort for sort in ( sorts['wanted'] if sort_by not in sorts else sorts[sort_by]) ]: query = query.order_by(f) if not g.user: query = query.add_columns(db.null()) else: query = UserAttitude.join_by_user_and_repo(query, g.user.id, Repo.id)\ .add_columns(UserAttitude.attitude) entries = query.paginate(page if page > 0 else 1, per_page=20, error_out=False) if entries.pages and entries.pages < entries.page: return top(entries.pages, sort_by, filter_worth_by) return render_template('repository/top.html', languages=Repo.language_distinct(), repos=entries, page=page, sort_by=sort_by, filter_worth_by=filter_worth_by)
def top(page): q = Repo.filter_by_args(Repo.query, request.args)\ .filter(Repo.worth > 6)\ .order_by(Repo.worth.desc())\ .order_by(Repo.stargazers_count.desc()) if not g.user: q = q.add_columns(db.null()) else: q = UserAttitude.join_by_user_and_repo(q, g.user.id, Repo.id)\ .add_columns(UserAttitude.attitude) entries = q.paginate(page if page > 0 else 1, per_page=20, error_out=False) if entries.pages and entries.pages < entries.page: return top(entries.pages) return render_template('repository/top.html', repos=entries, page=page, languages=Repo.language_distinct())
def test_accept_kwargs_in_constructor(self): entry = Repo(language='python') self.assertIsNone(entry.status_updated_at) self.assertEquals(entry.language, 'python')