コード例 #1
0
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)
コード例 #2
0
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
    )
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)
コード例 #7
0
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())
コード例 #8
0
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()
    )
コード例 #9
0
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())
コード例 #10
0
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())
コード例 #11
0
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()
コード例 #12
0
ファイル: web.py プロジェクト: eric011/gitmostwanted.com
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
    )
コード例 #13
0
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
コード例 #14
0
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
コード例 #15
0
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()
    )
コード例 #16
0
 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()
コード例 #17
0
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)
コード例 #18
0
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())
コード例 #19
0
    def test_accept_kwargs_in_constructor(self):
        entry = Repo(language='python')

        self.assertIsNone(entry.status_updated_at)
        self.assertEquals(entry.language, 'python')