import logging import string from random import SystemRandom from datetime import datetime from data.database import initialize_db from data import model from app import app logger = logging.getLogger(__name__) logging.basicConfig(**app.config['LOGGING_CONFIG']) def __gen_hex_id(length=64): random = SystemRandom() return ''.join([random.choice('abcdef' + string.digits) for x in range(length)]) def __gen_checksum(): return 'tarsum+sha256:' + __gen_hex_id(64) def create_subtree(repo, structure, parent): num_nodes, subtrees, last_node_tags = structure # create the nodes for i in range(num_nodes): docker_image_id = __gen_hex_id() checksum = __gen_checksum() new_image = model.create_image(docker_image_id, repo) model.set_image_checksum(docker_image_id, repo, checksum) new_image = model.set_image_metadata(docker_image_id, repo.namespace, repo.name, str(datetime.now()), 'no comment', parent) parent = new_image if last_node_tags: if not isinstance(last_node_tags, list): last_node_tags = [last_node_tags] for tag_name in last_node_tags: model.create_or_update_tag(repo.namespace, repo.name, tag_name, new_image.docker_image_id) for subtree in subtrees: create_subtree(repo, subtree, new_image) def __generate_repository(user, name, description, is_public, permissions, structure): repo = model.create_repository(user.username, name, user) if is_public: model.set_repository_visibility(repo, 'public') if description: repo.description = description repo.save() for delegate, role in permissions: model.set_user_repo_permission(delegate.username, user.username, name, role) create_subtree(repo, structure, None) if __name__ == '__main__': initialize_db() if app.config.get('POPULATE_DB_TEST_DATA', False): logger.debug('Populating the DB with test data.') new_user_1 = model.create_user('devtable', 'password', 'jschorr@devtable.com') new_user_1.verified = True new_user_1.save() new_user_2 = model.create_user('public', 'password', 'jacob.moshenko@gmail.com') new_user_2.verified = True new_user_2.save() __generate_repository(new_user_1, 'simple', 'Simple repository.', False, [], (4, [], ['latest', 'prod'])) __generate_repository(new_user_1, 'complex', 'Complex repository with many branches and tags.', False, [(new_user_2, 'read')], (2, [(3, [], 'v2.0'), (1, [(1, [(1, [], ['latest', 'prod'])], 'staging'), (1, [], None)], None)], None)) __generate_repository(new_user_1, 'gargantuan', None, False, [], (2, [(3, [], 'v2.0'), (1, [(1, [(1, [], ['latest', 'prod'])], 'staging'), (1, [], None)], None), (20, [], 'v3.0'), (5, [], 'v4.0'), (1, [(1, [], 'v5.0'), (1, [], 'v6.0')], None)], None)) __generate_repository(new_user_2, 'publicrepo', 'Public repository pullable by the world.', True, [], (10, [], 'latest')) __generate_repository(new_user_1, 'shared', 'Shared repository, another user can write.', False, [(new_user_2, 'write')], (5, [], 'latest'))