123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470 |
- #!/usr/bin/env python
- """ Populate the pagure db with some dev data. """
- import sys
- import os
- import pagure
- import tests
- from sqlalchemy import create_engine, MetaData
- import argparse
- '''
- Usage:
- python dev-data.py --init
- python dev-data.py --clean
- python dev-data.py --populate
- python dev-data.py --all
- '''
- def init_database():
- DB_URL = pagure.APP.config['DB_URL']
- # create the table if it doesnt exist
- pagure.lib.model.create_tables(
- DB_URL,
- pagure.APP.config.get('PATH_ALEMBIC_INI', None),
- acls=pagure.APP.config.get('ACLS', {}),
- debug=True)
- engine = create_engine('%s' % DB_URL, echo=True)
- metadata = MetaData(engine)
- metadata.reflect(bind=engine)
- return engine, metadata
- def empty_dev_db(metadata, engine):
- print('')
- print('')
- print('WARNING: Deleting all data from ', pagure.APP.config['DB_URL'])
- # Dangerous: this will wipe the data from the table but keep the schema
- print('')
- response = raw_input('Do you want to continue yes or no? ')
- if 'yes'.startswith(response.lower()):
- for tbl in reversed(metadata.sorted_tables):
- if tbl.fullname != 'acls':
- engine.execute(tbl.delete())
- def insert_data(session, username, user_email):
- pagure.APP.config['EMAIL_SEND'] = False
- pagure.APP.config['TESTING'] = True
- ######################################
- # tags
- item = pagure.lib.model.Tag(
- tag='tag1',
- )
- session.add(item)
- session.commit()
- ######################################
- # Users
- # Create a couple of users
- item = pagure.lib.model.User(
- user='pingou',
- fullname='PY C',
- password='foo',
- default_email='bar@pingou.com',
- )
- session.add(item)
- session.commit()
- item = pagure.lib.model.User(
- user='foo',
- fullname='foo bar',
- password='foo',
- default_email='foo@bar.com',
- )
- session.add(item)
- session.commit()
- item = pagure.lib.model.User(
- user=username,
- fullname=username,
- password='foo',
- default_email=user_email,
- )
- session.add(item)
- session.commit()
- ######################################
- # pagure_group
- item = pagure.lib.model.PagureGroup(
- group_name='admin',
- user_id=1,
- display_name='admin',
- description='Admin Group',
- )
- session.add(item)
- session.commit()
- # Add a couple of groups so that we can list them
- item = pagure.lib.model.PagureGroup(
- group_name='group',
- group_type='user',
- user_id=1, # pingou
- display_name='group group',
- description='this is a group group',
- )
- session.add(item)
- session.commit()
- item = pagure.lib.model.PagureGroup(
- group_name='rel-eng',
- group_type='user',
- user_id=1, # pingou
- display_name='Release Engineering',
- description='The group of release engineers',
- )
- session.add(item)
- session.commit()
- ######################################
- # projects
- import shutil
- # delete folder from local instance to start from a clean slate
- if os.path.exists(pagure.APP.config['GIT_FOLDER']):
- shutil.rmtree(pagure.APP.config['GIT_FOLDER'])
- tests.create_projects(session)
- tests.create_projects_git(pagure.APP.config['GIT_FOLDER'], bare=True)
- tests.add_content_git_repo(
- os.path.join(pagure.APP.config['GIT_FOLDER'], 'test.git'))
- tests.add_readme_git_repo(
- os.path.join(pagure.APP.config['GIT_FOLDER'], 'test.git'))
- # Add some content to the git repo
- tests.add_content_git_repo(
- os.path.join(pagure.APP.config['GIT_FOLDER'], 'forks', 'pingou',
- 'test.git'))
- tests.add_readme_git_repo(
- os.path.join(pagure.APP.config['GIT_FOLDER'], 'forks', 'pingou',
- 'test.git'))
- tests.add_commit_git_repo(
- os.path.join(pagure.APP.config['GIT_FOLDER'], 'forks', 'pingou',
- 'test.git'), ncommits=10)
- ######################################
- # user_emails
- item = pagure.lib.model.UserEmail(
- user_id=1,
- email='bar@pingou.com')
- session.add(item)
- item = pagure.lib.model.UserEmail(
- user_id=1,
- email='foo@pingou.com')
- session.add(item)
- item = pagure.lib.model.UserEmail(
- user_id=2,
- email='foo@bar.com')
- session.add(item)
- item = pagure.lib.model.UserEmail(
- user_id=3,
- email=user_email)
- session.add(item)
- session.commit()
- ######################################
- # user_emails_pending
- user = pagure.lib.search_user(session, username='pingou')
- email_pend = pagure.lib.model.UserEmailPending(
- user_id=user.id,
- email='foo@fp.o',
- token='abcdef',
- )
- session.add(email_pend)
- session.commit()
- ######################################
- # issues
- # Add an issue and tag it so that we can list them
- item = pagure.lib.model.Issue(
- id=1,
- uid='foobar',
- project_id=1,
- title='Problem with jenkins build',
- content='For some reason the tests fail at line:24',
- user_id=1, # pingou
- )
- session.add(item)
- session.commit()
- item = pagure.lib.model.Issue(
- id=2,
- uid='foobar2',
- project_id=1,
- title='Unit tests failing',
- content='Need to fix code for the unit tests to '
- 'pass so jenkins build can complete.',
- user_id=1, # pingou
- )
- session.add(item)
- session.commit()
- user = pagure.lib.search_user(session, username=username)
- item = pagure.lib.model.Issue(
- id=3,
- uid='foobar3',
- project_id=1,
- title='Segfault during execution',
- content='Index out of bounds for variable i?',
- user_id=user.id, # current user
- )
- session.add(item)
- session.commit()
- ######################################
- # pagure_user_group
- group = pagure.lib.search_groups(session, pattern=None,
- group_name="rel-eng", group_type=None)
- user = pagure.lib.search_user(session, username='pingou')
- item = pagure.lib.model.PagureUserGroup(
- user_id=user.id,
- group_id=group.id
- )
- session.add(item)
- session.commit()
- user = pagure.lib.search_user(session, username=username)
- group = pagure.lib.search_groups(session, pattern=None,
- group_name="admin", group_type=None)
- item = pagure.lib.model.PagureUserGroup(
- user_id=user.id,
- group_id=group.id
- )
- session.add(item)
- session.commit()
- user = pagure.lib.search_user(session, username='foo')
- group = pagure.lib.search_groups(session, pattern=None,
- group_name="group", group_type=None)
- item = pagure.lib.model.PagureUserGroup(
- user_id=user.id,
- group_id=group.id
- )
- session.add(item)
- session.commit()
- ######################################
- # projects_groups
- group = pagure.lib.search_groups(session, pattern=None,
- group_name="rel-eng", group_type=None)
- repo = pagure.lib.get_project(session, 'test')
- item = pagure.lib.model.ProjectGroup(
- project_id=repo.id,
- group_id=group.id
- )
- session.add(item)
- session.commit()
- group = pagure.lib.search_groups(session, pattern=None,
- group_name="admin", group_type=None)
- repo = pagure.lib.get_project(session, 'test2')
- item = pagure.lib.model.ProjectGroup(
- project_id=repo.id,
- group_id=group.id
- )
- session.add(item)
- session.commit()
- ######################################
- # pull_requests
- repo = pagure.lib.get_project(session, 'test')
- forked_repo = pagure.lib.get_project(session, 'test')
- req = pagure.lib.new_pull_request(
- session=session,
- repo_from=forked_repo,
- branch_from='master',
- repo_to=repo,
- branch_to='master',
- title='Fixing code for unittest',
- user=username,
- requestfolder=None,
- )
- session.commit()
- ######################################
- # tokens
- tests.create_tokens(session)
- ######################################
- # user_projects
- user = pagure.lib.search_user(session, username='foo')
- repo = pagure.lib.get_project(session, 'test')
- item = pagure.lib.model.ProjectUser(
- project_id=repo.id,
- user_id=user.id
- )
- session.add(item)
- session.commit()
- user = pagure.lib.search_user(session, username=username)
- repo = pagure.lib.get_project(session, 'test2')
- item = pagure.lib.model.ProjectUser(
- project_id=repo.id,
- user_id=user.id
- )
- session.add(item)
- session.commit()
- ######################################
- # issue_comments
- item = pagure.lib.model.IssueComment(
- user_id=1,
- issue_uid='foobar',
- comment='We may need to adjust the unittests instead of the code.',
- )
- session.add(item)
- session.commit()
- ######################################
- # issue_to_issue
- repo = pagure.lib.get_project(session, 'test')
- all_issues = pagure.lib.search_issues(session, repo)
- pagure.lib.add_issue_dependency(session, all_issues[0],
- all_issues[1], 'pingou',
- pagure.APP.config['GIT_FOLDER'])
- ######################################
- # pull_request_comments
- user = pagure.lib.search_user(session, username='pingou')
- # only 1 pull request available atm
- pr = pagure.lib.get_pull_request_of_user(session, "pingou")[0]
- item = pagure.lib.model.PullRequestComment(
- pull_request_uid=pr.uid,
- user_id=user.id,
- comment="+1 for me. Btw, could you rebase before you merge?",
- notification=0
- )
- session.add(item)
- session.commit()
- ######################################
- # pull_request_flags
- user = pagure.lib.search_user(session, username='pingou')
- # only 1 pull request available atm
- pr = pagure.lib.get_pull_request_of_user(session, "pingou")[0]
- item = pagure.lib.model.PullRequestFlag(
- uid="random_pr_flag_uid",
- pull_request_uid=pr.uid,
- user_id=user.id,
- username=user.user,
- percent=80,
- comment="Jenkins build passes",
- url=str(pr.id)
- )
- session.add(item)
- session.commit()
- ######################################
- # tags_issues
- repo = pagure.lib.get_project(session, 'test')
- issues = pagure.lib.search_issues(session, repo)
- item = pagure.lib.model.TagIssue(
- issue_uid=issues[0].uid,
- tag='Blocker',
- )
- session.add(item)
- session.commit()
- ######################################
- # tokens_acls
- tests.create_tokens_acl(session)
- ######################################
- # Fork a project
- # delete fork data
- fork_proj_location = "forks/foo/test.git"
- try:
- shutil.rmtree(os.path.join(pagure.APP.config['GIT_FOLDER'],
- fork_proj_location))
- except:
- print('git folder already deleted')
- try:
- shutil.rmtree(os.path.join(pagure.APP.config['DOCS_FOLDER'],
- fork_proj_location))
- except:
- print('docs folder already deleted')
- try:
- shutil.rmtree(os.path.join(pagure.APP.config['TICKETS_FOLDER'],
- fork_proj_location))
- except:
- print('tickets folder already deleted')
- try:
- shutil.rmtree(os.path.join(pagure.APP.config['REQUESTS_FOLDER'],
- fork_proj_location))
- except:
- print('requests folder already deleted')
- repo = pagure.lib.get_project(session, 'test')
- result = pagure.lib.fork_project(session, 'foo', repo,
- pagure.APP.config['GIT_FOLDER'],
- pagure.APP.config['DOCS_FOLDER'],
- pagure.APP.config['TICKETS_FOLDER'],
- pagure.APP.config['REQUESTS_FOLDER'])
- if result == 'Repo "test" cloned to "foo/test"':
- session.commit()
- if __name__ == "__main__":
- desc = "Run the dev database initialization/insertion/deletion " \
- "script for db located " + str(pagure.APP.config['DB_URL'])
- parser = argparse.ArgumentParser(prog="dev-data", description=desc)
- parser.add_argument('-i', '--init', action="store_true",
- help="Create the dev db")
- parser.add_argument('-p', '--populate', action="store_true",
- help="Add test data to the db")
- parser.add_argument('-d', '--delete', action="store_true",
- help="Wipe the dev db")
- parser.add_argument('-a', '--all', action="store_true",
- help="Create, Wipe, Populate the dev db")
- args = parser.parse_args()
- # forcing the user to choose
- if not any(vars(args).values()):
- parser.error('No arguments provided.')
- if args.init or args.delete or args.all:
- eng, meta = init_database()
- if args.delete or args.all:
- empty_dev_db(meta, eng)
- if args.populate or args.all:
- session = pagure.SESSION
- invalid_option = ['pingou', 'bar@pingou.com', 'foo', 'foo@bar.com']
- print("")
- user_name = raw_input(
- "Enter your username so we can add you into the test data: ")
- while user_name in invalid_option:
- print("Reserved names: " + str(invalid_option))
- user_name = raw_input(
- "Enter your username so we can add you into the test data: ")
- if not user_name.replace(" ", ""):
- user_name = 'pythagoras'
- print("")
- user_email = raw_input("Enter your user email: ")
- while user_email in invalid_option:
- print("Reserved names: " + str(invalid_option))
- user_email = raw_input("Enter your user email: ")
- if not user_email.replace(" ", ""):
- user_email = 'pythagoras@math.com'
- insert_data(session, user_name, user_email)
|