From fcb9a97f2bf9d37420c2842bc1d5132637053874 Mon Sep 17 00:00:00 2001 From: Zergey Loshkarev <saloshkarev@miem.hse.ru> Date: Fri, 2 Jul 2021 20:39:16 +0300 Subject: [PATCH 1/6] add TaigaReader class --- get_from_tagia.py | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/get_from_tagia.py b/get_from_tagia.py index 3f33831..a36cc3b 100644 --- a/get_from_tagia.py +++ b/get_from_tagia.py @@ -20,12 +20,29 @@ class Person(): self.bio = user.bio self.role_name = member.role_name[0], -def get_users_from_taiga(host, username, password, project_slug): +class TaigaReader(): ''' - function for connecting to taiga at host, with username and password - and getting information about users from project by project_slug + object to read information from taiga ''' - api = TaigaAPI(host=host) - api.auth(username, password) - members = api.projects.get_by_slug(project_slug).list_memberships() - return [Person(member, api.users.get(member.user)) for member in members] + + def __init__(self, taiga_config): + ''' + Constructor to TaigaReader + ''' + self._api = TaigaAPI(host=taiga_config['host']) + self._api.auth(taiga_config['username'], taiga_config['password']) + + def create_person(self, member): + ''' + Create Person with member and request to getting information from user + ''' + user = api.users.get(member.user) + return Person(member, user) + + def get_persons(self): + ''' + function for connecting to taiga at host, with username and password + and getting information about users from project by project_slug + ''' + members = api.projects.get_by_slug(project_slug).list_memberships() + return map(self.create_person, members) -- GitLab From 5477f989a71c47c994416059e5703c7559baa698 Mon Sep 17 00:00:00 2001 From: Zergey Loshkarev <saloshkarev@miem.hse.ru> Date: Fri, 2 Jul 2021 20:45:30 +0300 Subject: [PATCH 2/6] add link recording --- get_from_tagia.py | 3 +++ main.py | 19 ++++++++++++------- page_writer.py | 5 +++++ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/get_from_tagia.py b/get_from_tagia.py index a36cc3b..c39161a 100644 --- a/get_from_tagia.py +++ b/get_from_tagia.py @@ -20,6 +20,9 @@ class Person(): self.bio = user.bio self.role_name = member.role_name[0], + def add_link(self, link): + self.link = link + class TaigaReader(): ''' object to read information from taiga diff --git a/main.py b/main.py index 04d52f1..9c129ab 100644 --- a/main.py +++ b/main.py @@ -1,16 +1,21 @@ from config import read_config -from get_from_tagia import get_users_from_taiga +from get_from_tagia import TaigaReader from page_writer import PageWriter taiga, wiki = read_config('config.ini') -persons = get_users_from_taiga( - taiga['host'], taiga['username'], - taiga['password'], taiga['project_slug'] -) - +reader = TaigaReader(taiga) writer = PageWriter(wiki) -for person in persons: + +persons_by_roles = dict() +for person in reader.get_persons(): + if not (person.role_name in persons_by_roles): + persons_by_roles[person.role_name] = [] + persons_by_roles[person.role_name].append(person) + is_succes, message = writer.write_person_page(person) if not is_succes: print(f'Page not created for: {person.username}, message: {message}') + +# writer.write_list_page(persons_by_roles) + print('Pages created') \ No newline at end of file diff --git a/page_writer.py b/page_writer.py index f6a9166..75fec48 100644 --- a/page_writer.py +++ b/page_writer.py @@ -41,4 +41,9 @@ class PageWriter(): resp = self._client.execute( gql(query_text) )['pages']['create']['responseResult'] + + link = '' + if resp['succeeded']: + link = self._path + person.user_name + person.set_link(link) return resp['succeeded'], resp['message'] -- GitLab From 8cf003cb4a7f4862a7d6f1f9d7b87b60e7ef1948 Mon Sep 17 00:00:00 2001 From: Zergey Loshkarev <saloshkarev@miem.hse.ru> Date: Fri, 2 Jul 2021 20:46:18 +0300 Subject: [PATCH 3/6] adapt to relative link --- page_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/page_writer.py b/page_writer.py index 75fec48..d387cbd 100644 --- a/page_writer.py +++ b/page_writer.py @@ -44,6 +44,6 @@ class PageWriter(): link = '' if resp['succeeded']: - link = self._path + person.user_name + link = './' + person.user_name person.set_link(link) return resp['succeeded'], resp['message'] -- GitLab From 82464bf05a65c94bbac32d6d50a661f0841a5b38 Mon Sep 17 00:00:00 2001 From: Zergey Loshkarev <saloshkarev@miem.hse.ru> Date: Fri, 2 Jul 2021 20:48:04 +0300 Subject: [PATCH 4/6] fix bugs in get_from_taiga --- get_from_tagia.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/get_from_tagia.py b/get_from_tagia.py index c39161a..8de3e1a 100644 --- a/get_from_tagia.py +++ b/get_from_tagia.py @@ -34,12 +34,13 @@ class TaigaReader(): ''' self._api = TaigaAPI(host=taiga_config['host']) self._api.auth(taiga_config['username'], taiga_config['password']) + self._project_slug = taiga_config['project_slug'] def create_person(self, member): ''' Create Person with member and request to getting information from user ''' - user = api.users.get(member.user) + user = self._api.users.get(member.user) return Person(member, user) def get_persons(self): @@ -47,5 +48,5 @@ class TaigaReader(): function for connecting to taiga at host, with username and password and getting information about users from project by project_slug ''' - members = api.projects.get_by_slug(project_slug).list_memberships() + members = self._api.projects.get_by_slug(self._project_slug).list_memberships() return map(self.create_person, members) -- GitLab From b7c0d2da3b4c637a51d54674f48630f41e018919 Mon Sep 17 00:00:00 2001 From: Zergey Loshkarev <saloshkarev@miem.hse.ru> Date: Fri, 2 Jul 2021 22:57:07 +0300 Subject: [PATCH 5/6] all changes in one commit... --- get_from_tagia.py | 10 ++++++---- list_page.tmpl | 8 ++++++++ main.py | 2 +- page_writer.py | 17 +++++++++++++++-- person_page.tmpl | 2 +- 5 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 list_page.tmpl diff --git a/get_from_tagia.py b/get_from_tagia.py index 8de3e1a..178b75a 100644 --- a/get_from_tagia.py +++ b/get_from_tagia.py @@ -10,7 +10,7 @@ class Person(): Person class for describing informatron about users to page writer ''' - def __init__(self, member, user) -> (None): + def __init__(self, member, user, role_name) -> (None): ''' Constructor to Person object ''' @@ -18,9 +18,9 @@ class Person(): self.username = user.username self.photo = user.big_photo self.bio = user.bio - self.role_name = member.role_name[0], + self.role_name = role_name - def add_link(self, link): + def set_link(self, link): self.link = link class TaigaReader(): @@ -41,7 +41,9 @@ class TaigaReader(): Create Person with member and request to getting information from user ''' user = self._api.users.get(member.user) - return Person(member, user) + roles = self._api.projects.get_by_slug(self._project_slug).list_roles() + role_name = str(roles.get(id=member.role).name) + return Person(member, user, role_name) def get_persons(self): ''' diff --git a/list_page.tmpl b/list_page.tmpl new file mode 100644 index 0000000..21da375 --- /dev/null +++ b/list_page.tmpl @@ -0,0 +1,8 @@ +# РЎРїРёСЃРѕРє участников проектной школы +{% for role, persons in persons_by_role.items() %} +## {{role}} +{% for person in persons %} +* [{{person.full_name}}]({{person.link}}) +{% endfor %} +--- +{% endfor %} \ No newline at end of file diff --git a/main.py b/main.py index 9c129ab..b3f50bb 100644 --- a/main.py +++ b/main.py @@ -16,6 +16,6 @@ for person in reader.get_persons(): if not is_succes: print(f'Page not created for: {person.username}, message: {message}') -# writer.write_list_page(persons_by_roles) +writer.write_list_page(persons_by_roles) print('Pages created') \ No newline at end of file diff --git a/page_writer.py b/page_writer.py index d387cbd..ab61589 100644 --- a/page_writer.py +++ b/page_writer.py @@ -11,10 +11,12 @@ class PageWriter(): def __init__( self, wiki_config, person_template='person_page.tmpl', + list_template='list_page.tmpl', query_template='query.tmpl' ): env = Environment(loader=FileSystemLoader('./')) self._user_template = env.get_template(person_template) + self._list_template = env.get_template(list_template) self._query_template = env.get_template(query_template) self._path = wiki_config['path'] sample_transport=RequestsHTTPTransport( @@ -37,13 +39,24 @@ class PageWriter(): path=self._path + person.username, title=person.full_name ) - print(query_text) resp = self._client.execute( gql(query_text) )['pages']['create']['responseResult'] link = '' if resp['succeeded']: - link = './' + person.user_name + link = './' + person.username person.set_link(link) return resp['succeeded'], resp['message'] + + def write_list_page(self, persons_by_role, title='РЎРїРёСЃРѕРє участников'): + content = self._list_template.render(persons_by_role=persons_by_role) + query_text = self._query_template.render( + content=_normalise_str(content), + path=self._path + 'list', + title=title + ) + resp = self._client.execute( + gql(query_text) + )['pages']['create']['responseResult'] + return resp['succeeded'], resp['message'] diff --git a/person_page.tmpl b/person_page.tmpl index 716ed11..56e18d6 100644 --- a/person_page.tmpl +++ b/person_page.tmpl @@ -1,4 +1,4 @@ -# {{person.full_name}} {{person.full_name}} +# {{person.full_name}} ({{person.role_name}}) <img src='{{person.photo}}'> --- -- GitLab From 6262164dda6e393fec133009375847654c0d3329 Mon Sep 17 00:00:00 2001 From: Zergey Loshkarev <saloshkarev@miem.hse.ru> Date: Fri, 2 Jul 2021 23:07:07 +0300 Subject: [PATCH 6/6] edit readme --- README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0116de9..84748ac 100644 --- a/README.md +++ b/README.md @@ -13,12 +13,21 @@ pip install -r requirements.txt # config.ini [taiga] host = https://track.miem.hse.ru/ # Адрес хоста -username = *** # Логин/почта РѕС‚ тайги +username = *** # Логин/почта РѕС‚ taiga password = *** # Пароль project_name = ps # slug проекта +[wiki] +url = https://wiki-dev.miem.vmnet.top/graphql # Адрес хоста +token = *** # Токен для доступа Рє wiki +path = ps/members4/ # Путь Рє создаваемым страницам РІ wiki (Важно, чтобы РѕРЅ заканчивался РЅР° '/') +``` + +Запустить проект +``` +python main.py ``` ## Возможные ошибки * Может возникнуть проблема СЃ авторизацией РІ тайге, так как РІСЃРµ акаунты внутри РњРРРњ автоматически авторизовывались через gmail Рё пароля для тайги нет. Проблема решается добавлением пароля через настройки профиля РІ тайге - +* Страницы РјРѕРіСѓС‚ РЅРµ создаться, если директория содержит файлы СЃ одинаоквым путем -- GitLab