Source code for instatools.instagram.profile
from cached_property import threaded_cached_property
from ..api import ApiMethod
[docs]class Profile:
def __init__(self, api=None):
self.api = api
@property
def biography(self):
return self._user.bio
@property
def external_url(self):
return self._user.external_url
@property
def full_name(self):
return self._user.full_name
@property
def follow_requests(self):
return ApiMethod(self.api).feed('pending')
[docs] def threads(self, thread, cursor=None):
# todo fix for usability
params = {'cursor': cursor} if cursor else {}
return ApiMethod(self.api).action('direct_threads', thread,
params=params)
[docs] def change_password(self, new_password):
success = ApiMethod(self.api).action('change_password', data={
'old_password': self.api.password,
'new_password1': new_password,
'new_password2': new_password
})
if success:
self.api.switch_user(self.api.username, new_password)
return success
[docs] def change_profile_picture(self):
pass
[docs] def edit(self, phone, email, *, full_name=None, username=None,
url=None, biography=None, gender=None):
data = {
'phone_number': phone,
'email': email,
'full_name': full_name or self.full_name,
'username': username or self.api.username,
'external_url': url or self.external_url,
'biography': biography or self.biography,
}
if gender:
data['gender'] = gender
return self._edit('edit_profile', data=data)
[docs] def remove_profile_picture(self):
return self._edit('remove_profile_picture')
[docs] def set_public(self):
return self._edit('set_public')
[docs] def set_private(self):
return self._edit('set_private')
@threaded_cached_property
def _user(self):
return ApiMethod(self.api).action('profile',
params={'edit': True},
return_key='user')
def _edit(self, *args, **kwargs):
success = ApiMethod(self.api).action(*args, **kwargs)
if success and '_user' in self.__dict__:
# Invalidate cached profile
del self.__dict__['_user']
return success