Script 552455e5910e_new_table_packages_py
|
|
1 """new table Packages
2
3 Revision ID: 552455e5910e
4 Revises: 450fe5f7942d
5 Create Date: 2015-07-07 12:19:28.536592
6
7 """
8
9
10 revision = '552455e5910e'
11 down_revision = '450fe5f7942d'
12
13 from alembic import op
14 import sqlalchemy as sa
15 from sqlalchemy import and_
16 from rpmUtils.miscutils import splitFilename
17 import os
18 import json
19
21 if pkg.count(".") >= 3 and pkg.count("-") >= 2:
22 return splitFilename(pkg)[0]
23
24 result = ""
25 pkg = pkg.replace(".rpm", "").replace(".src", "")
26 for delim in ["-", "."]:
27 if delim in pkg:
28 parts = pkg.split(delim)
29 for part in parts:
30 if any(map(lambda x: x.isdigit(), part)):
31 return result[:-1]
32 result += part + "-"
33 return result[:-1]
34 return pkg
35
37
38 op.create_table('package',
39 sa.Column('id', sa.Integer(), nullable=False),
40 sa.Column('name', sa.String(length=100), nullable=False),
41 sa.Column('source_type', sa.Integer(), nullable=True),
42 sa.Column('source_json', sa.Text(), nullable=True),
43 sa.Column('copr_id', sa.Integer(), nullable=True),
44 sa.ForeignKeyConstraint(['copr_id'], ['copr.id'], ),
45 sa.PrimaryKeyConstraint('id')
46 )
47 op.add_column(u'build', sa.Column('package_id', sa.Integer(), nullable=True))
48 op.add_column(u'build', sa.Column('source_json', sa.Text(), nullable=True))
49 op.add_column(u'build', sa.Column('source_type', sa.Integer(), nullable=True))
50 op.add_column(u'build_chroot', sa.Column('git_hash', sa.String(length=40), nullable=True))
51
52 op.create_index('package_copr_id_name', 'package', ['copr_id', 'name'])
53 op.create_index('build_copr_id_package_id', 'build', ['copr_id', 'package_id'])
54
55
56 bind = op.get_bind()
57 connection = bind.connect()
58
59 package_table = sa.Table(
60 "package",
61 sa.MetaData(),
62 sa.Column("id", sa.Integer, nullable=False),
63 sa.Column("name", sa.String(100), nullable=False),
64 sa.Column("copr_id", sa.Integer, nullable=False),
65 sa.Column("source_type", sa.Integer, default=0),
66 sa.Column("source_json", sa.Text),
67 )
68
69 build_table = sa.Table(
70 "build",
71 sa.MetaData(),
72 sa.Column("id", sa.Integer, nullable=False),
73 sa.Column("pkgs", sa.Text),
74 sa.Column("copr_id", sa.Integer),
75 sa.Column("package_id", sa.Integer),
76 sa.Column("source_type", sa.Integer, default=0),
77 sa.Column("source_json", sa.Text),
78 )
79
80 for build in connection.execute(build_table.select()):
81 pkg_name = parse_package_name(os.path.basename(build.pkgs))
82 package = connection.execute(package_table.select().where(and_(
83 package_table.c.name == pkg_name, package_table.c.copr_id == build.copr_id))).first()
84 if not package:
85 connection.execute(package_table.insert().values(
86 name = pkg_name,
87 copr_id = build.copr_id,
88 source_type = 0,
89 source_json = json.dumps({})))
90 package = connection.execute(package_table.select().where(and_(
91 package_table.c.name == pkg_name, package_table.c.copr_id == build.copr_id))).first()
92 connection.execute(build_table.update().where(build_table.c.id == build.id).values(
93 package_id = package.id,
94 source_type = 1,
95 source_json = json.dumps({"url": build.pkgs})))
96
97
99
100 op.drop_column(u'build_chroot', 'git_hash')
101 op.drop_column(u'build', 'source_type')
102 op.drop_column(u'build', 'source_json')
103 op.drop_column(u'build', 'package_id')
104 op.drop_table('package')
105
106