1
|
|
|
# -*- coding: utf-8 -*- |
2
|
|
|
# Generated by Django 1.9.6 on 2017-03-17 08:04 |
3
|
|
|
from __future__ import unicode_literals |
4
|
|
|
|
5
|
|
|
from django.db import migrations |
6
|
|
|
from django.db.models import F |
7
|
|
|
|
8
|
|
|
def convert_version_string_to_int(string, number_bits): |
9
|
|
|
""" |
10
|
|
|
Take in a verison string e.g. '3.0.1' |
11
|
|
|
Store it as a converted int: 3*(2**number_bits[0])+0*(2**number_bits[1])+1*(2**number_bits[2]) |
12
|
|
|
|
13
|
|
|
>>> convert_version_string_to_int('3.0.1',[8,8,16]) |
14
|
|
|
50331649 |
15
|
|
|
""" |
16
|
|
|
numbers = [int(number_string) for number_string in string.split(".")] |
17
|
|
|
|
18
|
|
|
if len(numbers) > len(number_bits): |
19
|
|
|
raise NotImplementedError( |
20
|
|
|
"Versions with more than {0} decimal places are not supported".format( |
21
|
|
|
len(number_bits) - 1)) |
22
|
|
|
|
23
|
|
|
# add 0s for missing numbers |
24
|
|
|
numbers.extend([0] * (len(number_bits) - len(numbers))) |
25
|
|
|
|
26
|
|
|
#convert to single int and return |
27
|
|
|
number = 0 |
28
|
|
|
total_bits = 0 |
29
|
|
|
for num, bits in reversed(list(zip(numbers, number_bits))): |
30
|
|
|
max_num = (bits + 1) - 1 |
31
|
|
|
if num >= 1 << max_num: |
32
|
|
|
raise ValueError( |
33
|
|
|
"Number {0} cannot be stored with only {1} bits. Max is {2}".format(num, bits, |
34
|
|
|
max_num)) |
35
|
|
|
number += num << total_bits |
36
|
|
|
total_bits += bits |
37
|
|
|
|
38
|
|
|
return number |
39
|
|
|
|
40
|
|
|
def char_to_version(apps, schema_editor): |
41
|
|
|
SparkleVersion = apps.get_model("sparkle", "SparkleVersion") |
42
|
|
|
versions = SparkleVersion.objects.iterator() |
43
|
|
|
for version in versions: |
44
|
|
|
version._version = convert_version_string_to_int(version.version, [16, 16]) |
45
|
|
|
if version.short_version: |
46
|
|
|
version._short_version = convert_version_string_to_int(version.short_version, [8, 8, 16, 16]) |
47
|
|
|
version.save() |
48
|
|
|
|
49
|
|
|
|
50
|
|
|
|
51
|
|
|
|
52
|
|
|
class Migration(migrations.Migration): |
53
|
|
|
|
54
|
|
|
dependencies = [ |
55
|
|
|
('sparkle', '0010_auto_20170317_0804'), |
56
|
|
|
] |
57
|
|
|
|
58
|
|
|
operations = [ |
59
|
|
|
migrations.RunPython( |
60
|
|
|
char_to_version, |
61
|
|
|
reverse_code=migrations.RunPython.noop |
62
|
|
|
), |
63
|
|
|
] |
64
|
|
|
|