Browse Source

FIXBUG

devel
bashmak 9 years ago
parent
commit
774b3c107a
  1. 69
      djing/utils/load_from_nodeny.py
  2. 190
      djing/utils/save_from_nodeny.py

69
djing/utils/load_from_nodeny.py

@ -1,48 +1,55 @@
#!/bin/env python2
#!/bin/env python3
# coding=utf-8
import os
import MySQLdb
from json import dumps
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings")
db = MySQLdb.connect(host="localhost", user="root", passwd="PASSWORD", db="nodeny", charset='utf8')
cursor = db.cursor()
result = dict()
def load_users(cursor, grp_id):
# выбираем абонентов
sql = r"SELECT users.name, users.fio, data0._adr_telefon, dictionary.v, data0._adr_house, data0._birthday, users.grp FROM users LEFT JOIN data0 ON (data0.uid=users.id) LEFT JOIN dictionary ON (dictionary.k=data0._adr_street AND dictionary.type='street') WHERE users.grp=23"
sql = r"SELECT users.name, users.fio, data0._adr_telefon, dictionary.v AS street, data0._adr_house, data0._birthday, users.grp, INET_NTOA(ip_pool.ip) AS ip, users.balance, AES_DECRYPT(users.passwd, 'Vu6saiZa') as decr_passwd FROM users LEFT JOIN data0 ON (data0.uid = users.id) LEFT JOIN dictionary ON (dictionary.k = data0._adr_street AND dictionary.type = 'street') LEFT JOIN ip_pool ON (ip_pool.uid = users.id) WHERE users.grp = %d" % grp_id
cursor.execute(sql)
result['users'] = list()
res = cursor.fetchone()
while res:
result['users'].append({
'name': res[0],
'fio': res[1],
'tel': res[2],
'addr': u"ул. %s д. %s" % (res[3], res[4]),
'birth': int(res[5]),
'grp': int(res[6])
})
res = cursor.fetchone()
users = [{
'name': str(res[0]),
'fio': str(res[1]),
'tel': str(res[2]),
'street': str(res[3] or ''),
'house': str(res[4]),
'birth': res[5],
'grp': int(res[6]),
'ip': str(res[7] or ''),
'balance': float(res[8]),
'passw': res[9].decode("utf-8") if res[9] is not None else ''
} for res in cursor.fetchall()]
return users
def load_groups(cursor):
# выбираем группы
sql = r'SELECT grp_id, grp_name FROM user_grp'
cursor.execute(sql)
result['groups'] = list()
res = cursor.fetchone()
while res:
result['groups'].append({
groups = list()
for res in cursor.fetchall():
users = load_users(cursor=cursor, grp_id=int(res[0]))
groups.append({
'gid': int(res[0]),
'gname': res[1]
'gname': res[1],
'users': users
})
res = cursor.fetchone()
return groups
if __name__ == "__main__":
db = MySQLdb.connect(host="127.0.0.1", user="<username>", passwd="<password>", db="db", charset='utf8')
cursor = db.cursor()
result = dict()
result['groups'] = load_groups(cursor=cursor)
db.close()
f = open('dump_chkal.json', 'w')
f.write(dumps(result, ensure_ascii=False).encode('utf8'))
f = open('dump.json', 'w')
f.write(dumps(result, ensure_ascii=False))
f.close()

190
djing/utils/save_from_nodeny.py

@ -4,67 +4,143 @@
import os
from json import load
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings")
django.setup()
from abonapp.models import Abon, AbonGroup, AbonRawPassword, AbonStreet
from ip_pool.models import IpPoolItem
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings")
django.setup()
from abonapp.models import Abon, AbonGroup, AbonTariff, AbonRawPassword
from ip_pool.models import IpPoolItem
from tariff_app.models import Tariff
from accounts_app.models import UserProfile
with open('dump_pshen.json', 'r') as f:
dat = load(f)
#for dt in dat['groups']:
# try:
# grp = AbonGroup.objects.get(title=dt['gname'])
# except AbonGroup.DoesNotExist:
# grp = AbonGroup(title=dt['gname'])
# grp.save()
# dt['obj'] = grp
grp = AbonGroup.objects.get(id=43)
pshen_trf = Tariff.objects.get(id=3)
print(pshen_trf)
iam = UserProfile.objects.get(id=1)
for dt in dat['users']:
#grp = [gr for gr in dat['groups'] if dt['grp']==gr['gid']]
#grp = grp[0]['obj'] if len(grp)>0 else None
class DumpAbon(object):
def __init__(self, obj=None):
if obj is None: return
self.name = obj['name']
self.fio = obj['fio']
self.tel = obj['tel']
self.street = obj['street']
self.house = obj['house']
self.birth = obj['birth']
self.grp = obj['grp']
self.ip = obj['ip']
self.balance = obj['balance']
self.passw = obj['passw']
@staticmethod
def build_from_django(obj):
assert isinstance(obj, Abon)
self = DumpAbon()
self.name = obj.username
self.fio = obj.fio
self.tel = obj.telephone
self.street = obj.street
self.house = obj.house
self.birth = obj.birth_day
self.grp = obj.group.pk
self.ip = obj.ip_address
self.balance = obj.ballance
try:
abon = Abon.objects.get(username=dt['name'])
except Abon.DoesNotExist:
abon = Abon(username=dt['name'])
raw_passw = AbonRawPassword.objects.get(account=obj)
except AbonRawPassword.DoesNotExist:
raw_passw = ''
self.passw = raw_passw
return self
def __eq__(self, other):
assert isinstance(other, DumpAbon)
r = self.name == other.name
r = r and self.name == other.name
r = r and self.fio == other.fio
r = r and self.tel == other.tel
r = r and self.street == other.street
r = r and self.house == other.house
r = r and self.birth == other.birth
r = r and self.grp == other.grp
r = r and self.ip == other.ip
r = r and self.balance == other.ballance
return r
def __ne__(self, other):
return not self.__eq__(other)
def load_users(obj, group):
for usr in obj:
# абонент из дампа
dump_abon = DumpAbon(usr)
# абонент из биллинга
print('\t', dump_abon.name, dump_abon.fio, dump_abon.ip)
try:
ip_addr = IpPoolItem.objects.get(ip=dt['ip'])
except IpPoolItem.DoesNotExist:
ip_addr = None
abon.fio = dt['fio']
abon.telephone=dt['tel']
abon.house=dt['addr']
abon.group=grp
abon.ballance=dt['balance']
abon.ip_address=ip_addr
abon.set_password(dt['passw'])
abon.save()
abon = Abon.objects.get(username=dump_abon.name)
bl_abon = DumpAbon.build_from_django(abon)
if bl_abon != dump_abon:
update_user(abon, dump_abon, group)
except Abon.DoesNotExist:
# добавляем абонента
add_user(dump_abon, group)
def add_user(obj, user_group):
assert isinstance(obj, DumpAbon)
street = None
ip = None
try:
ip = IpPoolItem.objects.get(ip=obj.ip)
street = AbonStreet.objects.get(name=obj.street)
except IpPoolItem.DoesNotExist:
ip = IpPoolItem.objects.create(ip=obj.ip)
except AbonStreet.DoesNotExist:
street = AbonStreet.objects.create(name=obj.street, group=user_group)
Abon.objects.create(
username=obj.name,
fio=obj.fio,
telephone=obj.tel,
street=street,
house=obj.house,
birth_day=obj.birth,
group = user_group,
ip_address=ip,
ballance=obj.balance
)
def update_user(db_abon, obj, user_group):
assert isinstance(obj, DumpAbon)
assert isinstance(db_abon, Abon)
street = None
ip = None
try:
ip = IpPoolItem.objects.get(ip=obj.ip)
street = AbonStreet.objects.get(name=obj.street, group=user_group)
except IpPoolItem.DoesNotExist:
if obj.ip:
ip = IpPoolItem.objects.create(ip=obj.ip)
except AbonStreet.DoesNotExist:
street = AbonStreet.objects.create(name=obj.street, group=user_group)
db_abon.fio = obj.fio
db_abon.telephone = obj.tel
db_abon.street = street
db_abon.house = obj.house
#db_abon.birth_day = datetime(obj.birth)
db_abon.group = user_group
db_abon.ip_address = ip
db_abon.ballance = obj.balance
db_abon.save()
if __name__ == "__main__":
with open('dump.json', 'r') as f:
dat = load(f)
for grp in dat['groups']:
try:
abon_raw_passw = AbonRawPassword.objects.get(account=abon)
abon_raw_passw.passw_text = dt['passw']
abon_raw_passw.save(update_fields=['passw_text'])
except AbonRawPassword.DoesNotExist:
AbonRawPassword.objects.create(
account=abon,
passw_text=dt['passw']
abgrp=AbonGroup.objects.get(title=grp['gname'])
except AbonGroup.DoesNotExist:
abgrp = AbonGroup.objects.create(
title=grp['gname']
)
abtrfs = AbonTariff.objects.filter(abon=abon)
if abtrfs.count() > 0:
abtrf = abtrfs[0]
else:
abtrf = AbonTariff()
abtrf.abon = abon
abtrf.tariff = pshen_trf
abtrf.save()
abtrf.activate(iam)
print(abon.username, abon.fio, abon.group, ip_addr)
print(grp['gname'])
load_users(grp['users'], abgrp)
Loading…
Cancel
Save