Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reverts commits that were accidentally included in the previous PR #34

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore

This file was deleted.

14 changes: 10 additions & 4 deletions pytryfi/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,9 @@ def updatePets(self):
try:
petListJSON = query.getPetList(self._session)
updatedPets = []
h = 0
for house in petListJSON:
for pet in house['household']['pets']:
for pet in petListJSON[h]['household']['pets']:
p = FiPet(pet['id'])
p.setPetDetailsJSON(pet)
#get the current location and set it
Expand All @@ -107,6 +108,7 @@ def updatePets(self):
p.setRestStats(pRestStatsJSON['dailyStat'],pRestStatsJSON['weeklyStat'],pRestStatsJSON['monthlyStat'])
LOGGER.debug(f"Adding Pet: {p._name} with Device: {p._device._deviceId}")
updatedPets.append(p)
h = h + 1
self._pets = updatedPets
except Exception as e:
capture_exception(e)
Expand Down Expand Up @@ -141,14 +143,15 @@ def updateBases(self):
try:
updatedBases = []
baseListJSON = query.getBaseList(self._session)
h = 0
for house in baseListJSON:
for base in house['household']['bases']:
for base in baseListJSON[h]['household']['bases']:
b = FiBase(base['baseId'])
b.setBaseDetailsJSON(base)
updatedBases.append(b)
h = h + 1
self._bases = updatedBases
except Exception as e:
LOGGER.error("Error fetching bases", exc_info=e)
capture_exception(e)

# return the pet object based on petId
Expand Down Expand Up @@ -225,4 +228,7 @@ def login(self):
LOGGER.debug(f"Successfully logged in. UserId: {self._userId}")
except requests.RequestException as e:
LOGGER.error(f"Cannot login, error: ({e})")
raise e
capture_exception(e)
raise requests.RequestException(e)
except Exception as e:
capture_exception(e)
217 changes: 138 additions & 79 deletions pytryfi/common/query.py
Original file line number Diff line number Diff line change
@@ -1,113 +1,172 @@
from pytryfi.const import *
from pytryfi.exceptions import *
import json
import logging
import requests
from typing import Literal
import logging
from sentry_sdk import capture_exception

LOGGER = logging.getLogger(__name__)

def getUserDetail(sessionId):
qString = QUERY_CURRENT_USER + FRAGMENT_USER_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getUserDetails: {response}")
return response['data']['currentUser']
try:
qString = QUERY_CURRENT_USER + FRAGMENT_USER_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getUserDetails: {response}")
return response['data']['currentUser']
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def getPetList(sessionId):
qString = QUERY_CURRENT_USER_FULL_DETAIL + FRAGMENT_USER_DETAILS \
+ FRAGMENT_USER_FULL_DETAILS + FRAGMENT_PET_PROFILE + FRAGEMENT_BASE_PET_PROFILE \
+ FRAGMENT_BASE_DETAILS + FRAGMENT_POSITION_COORDINATES + FRAGMENT_BREED_DETAILS \
+ FRAGMENT_PHOTO_DETAILS + FRAGMENT_DEVICE_DETAILS + FRAGMENT_LED_DETAILS + FRAGMENT_OPERATIONAL_DETAILS \
+ FRAGMENT_CONNECTION_STATE_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getPetList: {response}")
return response['data']['currentUser']['userHouseholds']
try:
qString = QUERY_CURRENT_USER_FULL_DETAIL + FRAGMENT_USER_DETAILS \
+ FRAGMENT_USER_FULL_DETAILS + FRAGMENT_PET_PROFILE + FRAGEMENT_BASE_PET_PROFILE \
+ FRAGMENT_BASE_DETAILS + FRAGMENT_POSITION_COORDINATES + FRAGMENT_BREED_DETAILS \
+ FRAGMENT_PHOTO_DETAILS + FRAGMENT_DEVICE_DETAILS + FRAGMENT_LED_DETAILS + FRAGMENT_OPERATIONAL_DETAILS \
+ FRAGMENT_CONNECTION_STATE_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getPetList: {response}")
return response['data']['currentUser']['userHouseholds']
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def getBaseList(sessionId):
qString = QUERY_CURRENT_USER_FULL_DETAIL + FRAGMENT_USER_DETAILS \
+ FRAGMENT_USER_FULL_DETAILS + FRAGMENT_PET_PROFILE + FRAGEMENT_BASE_PET_PROFILE \
+ FRAGMENT_BASE_DETAILS + FRAGMENT_POSITION_COORDINATES + FRAGMENT_BREED_DETAILS \
+ FRAGMENT_PHOTO_DETAILS + FRAGMENT_DEVICE_DETAILS + FRAGMENT_LED_DETAILS + FRAGMENT_OPERATIONAL_DETAILS \
+ FRAGMENT_CONNECTION_STATE_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getBaseList: {response}")
return response['data']['currentUser']['userHouseholds']
try:
qString = QUERY_CURRENT_USER_FULL_DETAIL + FRAGMENT_USER_DETAILS \
+ FRAGMENT_USER_FULL_DETAILS + FRAGMENT_PET_PROFILE + FRAGEMENT_BASE_PET_PROFILE \
+ FRAGMENT_BASE_DETAILS + FRAGMENT_POSITION_COORDINATES + FRAGMENT_BREED_DETAILS \
+ FRAGMENT_PHOTO_DETAILS + FRAGMENT_DEVICE_DETAILS + FRAGMENT_LED_DETAILS + FRAGMENT_OPERATIONAL_DETAILS \
+ FRAGMENT_CONNECTION_STATE_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getBaseList: {response}")
return response['data']['currentUser']['userHouseholds']
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def getCurrentPetLocation(sessionId, petId):
qString = QUERY_PET_CURRENT_LOCATION.replace(VAR_PET_ID, petId) + FRAGMENT_ONGOING_ACTIVITY_DETAILS \
+ FRAGMENT_UNCERTAINTY_DETAILS + FRAGMENT_CIRCLE_DETAILS + FRAGMENT_LOCATION_POINT \
+ FRAGMENT_PLACE_DETAILS + FRAGMENT_USER_DETAILS + FRAGMENT_POSITION_COORDINATES
response = query(sessionId, qString)
LOGGER.debug(f"getCurrentPetLocation: {response}")
return response['data']['pet']['ongoingActivity']
try:
qString = QUERY_PET_CURRENT_LOCATION.replace(VAR_PET_ID, petId) + FRAGMENT_ONGOING_ACTIVITY_DETAILS \
+ FRAGMENT_UNCERTAINTY_DETAILS + FRAGMENT_CIRCLE_DETAILS + FRAGMENT_LOCATION_POINT \
+ FRAGMENT_PLACE_DETAILS + FRAGMENT_USER_DETAILS + FRAGMENT_POSITION_COORDINATES
response = query(sessionId, qString)
LOGGER.debug(f"getCurrentPetLocation: {response}")
return response['data']['pet']['ongoingActivity']
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def getCurrentPetStats(sessionId, petId):
qString = QUERY_PET_ACTIVITY.replace(VAR_PET_ID, petId) + FRAGMENT_ACTIVITY_SUMMARY_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getCurrentPetStats: {response}")
return response['data']['pet']
try:
qString = QUERY_PET_ACTIVITY.replace(VAR_PET_ID, petId) + FRAGMENT_ACTIVITY_SUMMARY_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getCurrentPetStats: {response}")
return response['data']['pet']
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def getCurrentPetRestStats(sessionId, petId):
qString = QUERY_PET_REST.replace(VAR_PET_ID, petId) + FRAGMENT_REST_SUMMARY_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getCurrentPetStats: {response}")
return response['data']['pet']
try:
qString = QUERY_PET_REST.replace(VAR_PET_ID, petId) + FRAGMENT_REST_SUMMARY_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getCurrentPetStats: {response}")
return response['data']['pet']
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def getDevicedetails(sessionId, petId):
qString = QUERY_PET_DEVICE_DETAILS.replace(VAR_PET_ID, petId) + FRAGMENT_PET_PROFILE + FRAGEMENT_BASE_PET_PROFILE + FRAGMENT_DEVICE_DETAILS + FRAGMENT_LED_DETAILS + FRAGMENT_OPERATIONAL_DETAILS + FRAGMENT_CONNECTION_STATE_DETAILS + FRAGMENT_USER_DETAILS + FRAGMENT_BREED_DETAILS + FRAGMENT_PHOTO_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getDevicedetails: {response}")
return response['data']['pet']
try:
qString = QUERY_PET_DEVICE_DETAILS.replace(VAR_PET_ID, petId) + FRAGMENT_PET_PROFILE + FRAGEMENT_BASE_PET_PROFILE + FRAGMENT_DEVICE_DETAILS + FRAGMENT_LED_DETAILS + FRAGMENT_OPERATIONAL_DETAILS + FRAGMENT_CONNECTION_STATE_DETAILS + FRAGMENT_USER_DETAILS + FRAGMENT_BREED_DETAILS + FRAGMENT_PHOTO_DETAILS
response = query(sessionId, qString)
LOGGER.debug(f"getDevicedetails: {response}")
return response['data']['pet']
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def setLedColor(sessionId, deviceId, ledColorCode):
qString = MUTATION_SET_LED_COLOR + FRAGMENT_DEVICE_DETAILS + FRAGMENT_OPERATIONAL_DETAILS + FRAGMENT_CONNECTION_STATE_DETAILS + FRAGMENT_USER_DETAILS + FRAGMENT_LED_DETAILS
qVariables = '{"moduleId":"'+deviceId+'","ledColorCode":'+str(ledColorCode)+'}'
response = mutation(sessionId, qString, qVariables)
LOGGER.debug(f"setLedColor: {response}")
return response['data']
try:
qString = MUTATION_SET_LED_COLOR + FRAGMENT_DEVICE_DETAILS + FRAGMENT_OPERATIONAL_DETAILS + FRAGMENT_CONNECTION_STATE_DETAILS + FRAGMENT_USER_DETAILS + FRAGMENT_LED_DETAILS
qVariables = '{"moduleId":"'+deviceId+'","ledColorCode":'+str(ledColorCode)+'}'
response = mutation(sessionId, qString, qVariables)
LOGGER.debug(f"setLedColor: {response}")
return response['data']
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def turnOnOffLed(sessionId, moduleId, ledEnabled):
qString = MUTATION_DEVICE_OPS + FRAGMENT_DEVICE_DETAILS + FRAGMENT_OPERATIONAL_DETAILS + FRAGMENT_CONNECTION_STATE_DETAILS + FRAGMENT_USER_DETAILS + FRAGMENT_LED_DETAILS
qVariables = '{"input": {"moduleId":"'+moduleId+'","ledEnabled":'+str(ledEnabled).lower()+'}}'
response = mutation(sessionId, qString, qVariables)
LOGGER.debug(f"turnOnOffLed: {response}")
return response['data']
try:
qString = MUTATION_DEVICE_OPS + FRAGMENT_DEVICE_DETAILS + FRAGMENT_OPERATIONAL_DETAILS + FRAGMENT_CONNECTION_STATE_DETAILS + FRAGMENT_USER_DETAILS + FRAGMENT_LED_DETAILS
qVariables = '{"input": {"moduleId":"'+moduleId+'","ledEnabled":'+str(ledEnabled).lower()+'}}'
response = mutation(sessionId, qString, qVariables)
LOGGER.debug(f"turnOnOffLed: {response}")
return response['data']
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def setLostDogMode(sessionId, moduleId, action):
if action:
mode = PET_MODE_LOST
else:
mode = PET_MODE_NORMAL
qString = MUTATION_DEVICE_OPS + FRAGMENT_DEVICE_DETAILS + FRAGMENT_OPERATIONAL_DETAILS + FRAGMENT_CONNECTION_STATE_DETAILS + FRAGMENT_USER_DETAILS + FRAGMENT_LED_DETAILS
qVariables = '{"input": {"moduleId":"'+moduleId+'","mode":"'+mode+'"}}'
response = mutation(sessionId, qString, qVariables)
LOGGER.debug(f"setLostDogMode: {response}")
return response['data']
try:
if action:
mode = PET_MODE_LOST
else:
mode = PET_MODE_NORMAL
qString = MUTATION_DEVICE_OPS + FRAGMENT_DEVICE_DETAILS + FRAGMENT_OPERATIONAL_DETAILS + FRAGMENT_CONNECTION_STATE_DETAILS + FRAGMENT_USER_DETAILS + FRAGMENT_LED_DETAILS
qVariables = '{"input": {"moduleId":"'+moduleId+'","mode":"'+mode+'"}}'
response = mutation(sessionId, qString, qVariables)
LOGGER.debug(f"setLostDogMode: {response}")
return response['data']
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def getGraphqlURL():
return API_HOST_URL_BASE + API_GRAPHQL
try:
return API_HOST_URL_BASE + API_GRAPHQL
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def mutation(sessionId, qString, qVariables):
jsonObject = None
url = getGraphqlURL()

params = {"query": qString, "variables": json.loads(qVariables)}
jsonObject = execute(url, sessionId, params=params, method='POST').json()
return jsonObject
try:
jsonObject = None
url = getGraphqlURL()

params = {"query": qString, "variables": json.loads(qVariables)}
jsonObject = execute(url, sessionId, params=params, method='POST').json()
return jsonObject
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def query(sessionId : requests.Session, qString):
jsonObject = None
url = getGraphqlURL()
params={'query': qString}
jsonObject = execute(url, sessionId, params=params).json()
return jsonObject
def query(sessionId, qString):
try:
jsonObject = None
url = getGraphqlURL()
params={'query': qString}
jsonObject = execute(url, sessionId, params=params).json()
return jsonObject
except Exception as e:
LOGGER.error(f"Error performing query", exc_info=e)
capture_exception(e)

def execute(url : str, sessionId : requests.Session, method: Literal['GET', 'POST'] = 'GET', params=None, cookies=None):
def execute(url, sessionId, method='GET', params=None, cookies=None):
response = None
if method == 'GET':
response = sessionId.get(url, params=params)
elif method == 'POST':
response = sessionId.post(url, json=params)
else:
raise TryFiError(f"Method Passed was invalid: {method}. Only GET and POST are supported")
try:
if method == 'GET':
response = sessionId.get(url, params=params)
elif method == 'POST':
response = sessionId.post(url, json=params)
else:
raise TryFiError(f"Method Passed was invalid: {method}")
except requests.RequestException as e:
capture_exception(e)
raise requests.RequestException(e)
except Exception as e:
capture_exception(e)
return response

Loading