Retrieve all cases for user names and stores them in a new structure. Added get_user(user_id, key) that will return a dictionary with keys similar to key_gen, key_nom, key_acc

This commit is contained in:
Manuel Cortez 2019-01-10 17:29:17 -06:00
parent 2b8ed2192b
commit 21570ea5ec

View File

@ -3,6 +3,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import os import os
import logging import logging
import warnings
import languageHandler import languageHandler
import paths import paths
from . import vkSessionHandler from . import vkSessionHandler
@ -186,11 +187,13 @@ class vkSession(object):
def get_user_name(self, user_id, case_name="gen"): def get_user_name(self, user_id, case_name="gen"):
if user_id > 0: if user_id > 0:
warnings.warn("Call to a deprecated function. Use get_user instead.")
if user_id in self.db["users"]: if user_id in self.db["users"]:
if case_name in self.db["users"][user_id]: if case_name in self.db["users"][user_id]:
return self.db["users"][user_id][case_name] return self.db["users"][user_id][case_name]
else: else:
return self.db["users"][user_id]["nom"] # print(self.get_user(user_id, key="usuario1"))
return self.db["users"][user_id]["first_name_nom"]+" "+self.db["users"][user_id]["last_name_nom"]
else: else:
self.get_users(user_ids=user_id) self.get_users(user_ids=user_id)
return self.get_user_name(user_id) return self.get_user_name(user_id)
@ -209,34 +212,53 @@ class vkSession(object):
if group_ids != None: if group_ids != None:
g = self.vk.client.groups.getById(group_ids=group_ids, fields="name") g = self.vk.client.groups.getById(group_ids=group_ids, fields="name")
for i in g: for i in g:
self.db["groups"][i["id"]] = dict(nom=i["name"]) self.db["groups"][i["id"]] = dict(nom=i["name"], gen=i["name"], dat=i["name"], acc=i["name"], ins=i["name"], abl=i["name"])
def get_user(self, user_id, key="user1"):
if user_id > 0:
if user_id in self.db["users"]:
user_data = {}
user_fields = "nom, gen, ins, dat, abl, acc".split(", ")
for i in user_fields:
k = "{key}_{case}".format(key=key, case=i)
v = "{first_name} {last_name}".format(first_name=self.db["users"][user_id]["first_name_"+i], last_name=self.db["users"][user_id]["last_name_"+i])
user_data[k] = v
return user_data
else:
if abs(user_id) in self.db["groups"]:
user_data = {}
user_fields = "nom, gen, ins, dat, abl, acc".split(", ")
for i in user_fields:
k = "{key}_{case}".format(key=key, case=i)
v = self.db["groups"][abs(user_id)][i]
user_data[k] = v
return user_data
def process_usernames(self, data): def process_usernames(self, data):
""" processes user IDS and saves them in a local storage system. """ processes user IDS and saves them in a local storage system.
Every function wich needs to convert from an ID to user or community name will have to call the get_user_name function in this session object. Every function wich needs to convert from an ID to user or community name will have to call the get_user_name function in this session object.
Every function that needs to save a set ot user ids for a future use needs to pass a data dictionary with a profiles key being a list of user objects. Every function that needs to save a set ot user ids for a future use needs to pass a data dictionary with a profiles key being a list of user objects.
For russian, it gets the genitive case of every name for future use.""" It gets first and last name for people in the 6 russian cases and saves them for future reference."""
log.debug("Adding usernames to the local database...") log.debug("Adding usernames to the local database...")
ids = "" ids = ""
for i in data["profiles"]: for i in data["profiles"]:
if (i["id"] in self.db["users"]) == False: if (i["id"] in self.db["users"]) == False:
self.db["users"][i["id"]] = dict(nom="{0} {1}".format(i["first_name"], i["last_name"]))
ids = ids + "{0},".format(i["id"],) ids = ids + "{0},".format(i["id"],)
gids = "" gids = ""
for i in data["groups"]: for i in data["groups"]:
self.db["groups"][i["id"]] = dict(nom=i["name"]) self.db["groups"][i["id"]] = dict(nom=i["name"], gen=i["name"], dat=i["name"], acc=i["name"], ins=i["name"], abl=i["name"])
gids = "{0},".format(i["id"],) gids = "{0},".format(i["id"],)
if not "ru" in languageHandler.getLanguage(): user_fields = "first_name_nom, last_name_nom, first_name_gen, last_name_gen, first_name_ins, last_name_ins, first_name_dat, last_name_dat, first_name_abl, last_name_abl, first_name_acc, last_name_acc, sex"
return user_fields_list = user_fields.split(", ")
if ids != "": if ids != "":
users_genitive = self.vk.client.users.get(user_ids=ids, fields="first_name, last_name", name_case="gen") users = self.vk.client.users.get(user_ids=ids, fields=user_fields)
users_instrumental = self.vk.client.users.get(user_ids=ids, fields="first_name, last_name", name_case="ins") for i in users:
for i in users_genitive: if i["id"] not in self.db["users"]:
if i["id"] in self.db["users"]: userdata = {}
self.db["users"][i["id"]]["gen"] = "{0} {1}".format(i["first_name"], i["last_name"]) for field in user_fields_list:
for i in users_instrumental: if field in i:
if i["id"] in self.db["users"]: userdata[field] = i[field]
self.db["users"][i["id"]]["ins"] = "{0} {1}".format(i["first_name"], i["last_name"]) self.db["users"][i["id"]] = userdata
def get_my_data(self): def get_my_data(self):
log.debug("Getting user identifier...") log.debug("Getting user identifier...")