# -*- coding: cp1251 -*-
"""
Информация о типах даных, порядке и так далее
"""
# Справочники
DictionaryInfo=[
# Сначала идет группа simple_spr
{
"dictname":"first_name", # Длинное имя справочника
"db_table_name":"spr_simple", # Таблица, в которйо ищется справочник
"db_spr_name":"fname", # название справочнка в БД
"spr_type":"simple", # тип, simple (простой) или paired (пара код-значение)
"used_in_list":("fname","dir_fname") # Список полей, для которых может использоваться справочник
},
{
"dictname":"last_name",
"db_table_name":"spr_simple",
"db_spr_name":"lname",
"spr_type":"simple",
"used_in_list":("lname","dir_lname")
},
{
"dictname":"street",
"db_table_name":"spr_simple",
"db_spr_name":"street",
"spr_type":"simple",
"used_in_list":("street","adr_street")
},
{
"dictname":"pop_area",
"db_table_name":"spr_simple",
"db_spr_name":"pop_area",
"spr_type":"simple",
"used_in_list":("pop_area","adr_pop_area")
},
# Парные справочники
{
"dictname":"agency_name",
"db_table_name":"spr_asko",
"db_spr_name":"agency",
"spr_type":"paired",
"used_in_list":("agency_cod")
},
{
"dictname":"agreem_type",
"db_table_name":"spr_asko",
"db_spr_name":"agr_type",
"spr_type":"paired",
"used_in_list":("agr_type")
},
{ # Район
"dictname":"district_name",
"db_table_name":"spr_asko",
"db_spr_name":"district",
"spr_type":"paired",
"used_in_list":("ds_cod","adr_ds_cod")
},
{ # Регион
"dictname":"region_name",
"db_table_name":"spr_asko",
"db_spr_name":"region",
"spr_type":"paired",
"used_in_list":("rg_cod","adr_rg_cod")
},
{ # Республика
"dictname":"republic_name",
"db_table_name":"spr_asko",
"db_spr_name":"republic",
"spr_type":"paired",
"used_in_list":("rp_cod","adr_rp_cod")
},
{ # Тип документа, удостоверяющего личность
"dictname":"pasport_type",
"db_table_name":"spr_asko",
"db_spr_name":"pasp_doc",
"spr_type":"paired",
"used_in_list":("pasp_doc")
},
{ # Тип документа
"dictname":"document_type",
"db_table_name":"spr_asko",
"db_spr_name":"doc_type",
"spr_type":"paired",
"used_in_list":("doc_type")
},
{ # Статус полиса
"dictname":"polis_status",
"db_table_name":"spr_asko",
"db_spr_name":"pol_sta",
"spr_type":"paired",
"used_in_list":("status_cod")
},
{ # Социальный статус человека (по полису)
"dictname":"social_status",
"db_table_name":"spr_asko",
"db_spr_name":"soc_sta",
"spr_type":"paired",
"used_in_list":("social_cod")
},
{ # Типа страховщика
"dictname":"str_type",
"db_table_name":"spr_asko",
"db_spr_name":"str_type",
"spr_type":"paired",
"used_in_list":("str_type")
}
]
class clDictionaryInfo:
"""
Предоставляет весь спектр информации о справочниках
Использует структуру DictionaryInfo, все изменения
следует приводить к изменению единйо структуры
"""
def __init__(self):
self.InfoList=DictionaryInfo
pass
def GetDictionaryFullArray(self):
"""
Return list of dictionaries
"""
return self.InfoList
def GetDictionaryLongNamesList(self):
"""
Возвращает список длинных имен справочников
"""
Result=[]
for item in self.GetDictionaryFullArray():
try:
Result.append(item["dictname"])
except KeyError:
raise LookupError("Can't find key 'dictname' in item.")
return None
return Result
def GetDictTypeOverDictName(self,dict_name):
"Возвращает тип справочника для имени справочника"
for item in self.GetDictionaryFullArray():
if dict_name==item["db_spr_name"]:
return item["spr_type"]
return None
def GetDictNameOverFieldName(self,field_name):
"Возвращает имя справочника для поля"
for item in self.GetDictionaryFullArray():
if field_name in item["used_in_list"]:
return item["db_spr_name"]
return None
def GetDictionaryNamesList(self):
"""
Возвращает список коротких имен справочников, как в БД
"""
Result=[]
for item in self.GetDictionaryFullArray():
try:
Result.append(item["db_spr_name"])
except KeyError:
raise LookupError("Can't find key 'db_spr_name' in item.")
return None
return Result
def GetTableNameOverDictName(self,name):
"""
Если такой справочник существует - возвращает имя таблицы для него
"""
if name==None or name not in self.GetDictionaryNamesList():
raise ValueError(u"Unknown dictionary name: "+unicode(name))
for item in self.GetDictionaryFullArray():
if item["db_spr_name"]==name:
return item["db_table_name"]
return
if __name__=="__main__":
Info=clDictionaryInfo()
print Info.GetDictionaryNamesList()