Big improve on gchange likenator

This commit is contained in:
poka 2020-11-29 23:33:50 +01:00
parent bc758cdc62
commit 7be1821efb
2 changed files with 59 additions and 26 deletions

View File

@ -4,7 +4,7 @@ import argparse, sys, os
from os.path import join, dirname
from shutil import copyfile
from dotenv import load_dotenv
from lib.gchange import ReadLikes, SendLikes, DeleteLikes
from lib.gchange import ReadLikes, SendLikes, UnLikes
# Get variables environment
if not os.path.isfile('.env'):
@ -23,32 +23,33 @@ if not dunikey or not pod:
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
readLike_cmd = subparsers.add_parser('readlike', help="Lire les likes d'un profile")
like_cmd = subparsers.add_parser('like', help="Liker un profile")
deleteLike_cmd = subparsers.add_parser('deletelike', help="Supprimer un like")
# readLike_cmd = subparsers.add_parser('readlike', help="Lire les likes d'un profile")
like_cmd = subparsers.add_parser('like', help="Voir les likes d'un profile / Liker un profile (option -s NOTE")
unlike_cmd = subparsers.add_parser('unlike', help="Supprimer un like")
if len(sys.argv) <= 1 or not sys.argv[1] in ('readlike','like','deletelike'):
if len(sys.argv) <= 1 or not sys.argv[1] in ('like','unlike'):
sys.stderr.write("Veuillez indiquer une commande valide:\n\n")
parser.print_help()
sys.exit(1)
readLike_cmd.add_argument('-p', '--profile', help="Profile cible")
# readLike_cmd.add_argument('-p', '--profile', help="Profile cible")
like_cmd.add_argument('-p', '--profile', help="Profile cible")
like_cmd.add_argument('-s', '--stars', type=int, help="Nombre d'étoile")
deleteLike_cmd.add_argument('-i', '--id', help="ID du like à supprimer")
unlike_cmd.add_argument('-p', '--profile', help="Profile à déliker")
args = parser.parse_args()
# Build gchange class
if sys.argv[1] == "readlike":
gchange = ReadLikes(dunikey, pod)
gchange.readLikes(args.profile)
elif sys.argv[1] == "like":
gchange = SendLikes(dunikey, pod)
gchange.like(args.profile, args.stars)
elif sys.argv[1] == "deletelike":
gchange = DeleteLikes(dunikey, pod)
gchange.deleteLike(args.id)
if sys.argv[1] == "like":
if args.stars:
gchange = SendLikes(dunikey, pod)
gchange.like(args.profile, args.stars)
else:
gchange = ReadLikes(dunikey, pod)
gchange.readLikes(args.profile)
elif sys.argv[1] == "unlike":
gchange = UnLikes(dunikey, pod)
gchange.unLike(args.profile)

View File

@ -28,7 +28,6 @@ class ReadLikes:
# Configure JSON document to send
def configDoc(self, profile):
timeSent = int(time.time())
if not profile: profile = self.issuer
data = {}
@ -41,7 +40,7 @@ class ReadLikes:
{'term': {'kind': 'STAR'}}
]
data['query']['bool']['should'] = {'term':{'issuer': self.issuer}}
data['size'] = 1
data['size'] = 5000
data['_source'] = ['issuer','level']
data['aggs'] = {
'level_sum': {
@ -75,21 +74,36 @@ class ReadLikes:
def parseResult(self, result):
result = json.loads(result)
totalLikes = result['hits']['total']
totalValue = result['aggregations']['level_sum']['value']
score = totalValue/totalLikes
raw = result['hits']['hits']
finalPrint = {}
finalPrint['likes'] = []
for i in raw:
issuer = i['_source']['issuer']
id = i['_id']
level = i['_source']['level']
print('ID:', id,'\nLevel:', level)
if issuer == self.issuer:
finalPrint['yours'] = { 'id' : id, 'level' : level }
else:
finalPrint['likes'].append({ 'issuer' : issuer, 'level' : level })
finalPrint['score'] = score
return json.dumps(finalPrint)
def readLikes(self, profile=False):
document = self.configDoc(profile)
result = self.sendDocument(document)
self.parseResult(result)
result = self.parseResult(result)
print(result)
return result
#################### Sending class ####################
#################### Like class ####################
@ -167,12 +181,12 @@ class SendLikes:
#################### Sending class ####################
#################### Unlike class ####################
class DeleteLikes:
class UnLikes:
def __init__(self, dunikey, pod):
# Get my pubkey from my private key
try:
@ -189,6 +203,22 @@ class DeleteLikes:
if not re.match(PUBKEY_REGEX, self.issuer) or len(self.issuer) > 45:
sys.stderr.write("La clé publique n'est pas au bon format.\n")
sys.exit(1)
# Check if you liked this profile
def checkLike(self, pubkey):
readProfileLikes = ReadLikes(self.dunikey, self.pod)
document = readProfileLikes.configDoc(pubkey)
result = readProfileLikes.sendDocument(document)
result = readProfileLikes.parseResult(result)
result = json.loads(result)
if 'yours' in result:
myLike = result['yours']['id']
return myLike
else:
sys.stderr.write("Vous n'avez pas liké ce profile\n")
return False
# Configure JSON document to send
def configDoc(self, idLike):
@ -236,7 +266,9 @@ class DeleteLikes:
sys.stderr.write("Echec de l'envoi du document de lecture des messages...\n" + result.text + '\n')
def deleteLike(self, idLike):
document = self.configDoc(idLike)
self.sendDocument(document)
def unLike(self, pubkey):
idLike = self.checkLike(pubkey)
if idLike:
document = self.configDoc(idLike)
self.sendDocument(document)