|
1 |
| -import logging |
2 |
| -import json |
3 |
| -import re |
4 |
| - |
5 |
| -from django.conf import settings |
6 |
| -from django.db import models |
| 1 | +"""Managers for OAuth models""" |
7 | 2 |
|
8 | 3 | from readthedocs.privacy.loader import RelatedUserManager
|
9 | 4 |
|
10 |
| -from .constants import OAUTH_SOURCE_GITHUB, OAUTH_SOURCE_BITBUCKET |
11 |
| - |
12 |
| - |
13 |
| -logger = logging.getLogger(__name__) |
14 |
| - |
15 |
| - |
16 |
| -DEFAULT_PRIVACY_LEVEL = getattr(settings, 'DEFAULT_PRIVACY_LEVEL', 'public') |
17 |
| - |
18 | 5 |
|
19 | 6 | class RemoteRepositoryManager(RelatedUserManager):
|
20 |
| - |
21 |
| - """Model managers for remote repositories""" |
22 |
| - |
23 |
| - def create_from_github_api(self, api_json, user, organization=None, |
24 |
| - privacy=DEFAULT_PRIVACY_LEVEL): |
25 |
| - logger.info('Trying GitHub: %s' % api_json['full_name']) |
26 |
| - if ( |
27 |
| - (privacy == 'private') or |
28 |
| - (api_json['private'] is False and privacy == 'public')): |
29 |
| - project, created = self.get_or_create( |
30 |
| - full_name=api_json['full_name'], |
31 |
| - users__pk=user.pk, |
32 |
| - ) |
33 |
| - if project.organization and project.organization != organization: |
34 |
| - logger.debug('Not importing %s because mismatched orgs' % |
35 |
| - api_json['name']) |
36 |
| - return None |
37 |
| - else: |
38 |
| - project.organization = organization |
39 |
| - project.users.add(user) |
40 |
| - project.name = api_json['name'] |
41 |
| - project.description = api_json['description'] |
42 |
| - project.ssh_url = api_json['ssh_url'] |
43 |
| - project.html_url = api_json['html_url'] |
44 |
| - project.private = api_json['private'] |
45 |
| - if project.private: |
46 |
| - project.clone_url = api_json['ssh_url'] |
47 |
| - else: |
48 |
| - project.clone_url = api_json['clone_url'] |
49 |
| - project.admin = api_json.get('permissions', {}).get('admin', False) |
50 |
| - project.vcs = 'git' |
51 |
| - project.source = OAUTH_SOURCE_GITHUB |
52 |
| - project.avatar_url = api_json.get('owner', {}).get('avatar_url') |
53 |
| - project.json = json.dumps(api_json) |
54 |
| - project.save() |
55 |
| - return project |
56 |
| - else: |
57 |
| - logger.debug('Not importing %s because mismatched type' % |
58 |
| - api_json['name']) |
59 |
| - |
60 |
| - def create_from_bitbucket_api(self, api_json, user, organization=None, |
61 |
| - privacy=DEFAULT_PRIVACY_LEVEL): |
62 |
| - logger.info('Trying Bitbucket: %s' % api_json['full_name']) |
63 |
| - if (api_json['is_private'] is True and privacy == 'private' or |
64 |
| - api_json['is_private'] is False and privacy == 'public'): |
65 |
| - project, created = self.get_or_create( |
66 |
| - full_name=api_json['full_name']) |
67 |
| - if project.organization and project.organization != organization: |
68 |
| - logger.debug('Not importing %s because mismatched orgs' % |
69 |
| - api_json['name']) |
70 |
| - return None |
71 |
| - else: |
72 |
| - project.organization = organization |
73 |
| - project.users.add(user) |
74 |
| - project.name = api_json['name'] |
75 |
| - project.description = api_json['description'] |
76 |
| - project.clone_url = api_json['links']['clone'][0]['href'] |
77 |
| - project.ssh_url = api_json['links']['clone'][1]['href'] |
78 |
| - project.html_url = api_json['links']['html']['href'] |
79 |
| - project.vcs = api_json['scm'] |
80 |
| - project.private = api_json['is_private'] |
81 |
| - project.source = OAUTH_SOURCE_BITBUCKET |
82 |
| - |
83 |
| - avatar_url = api_json['links']['avatar']['href'] or '' |
84 |
| - project.avatar_url = re.sub(r'\/16\/$', r'/32/', avatar_url) |
85 |
| - |
86 |
| - project.json = json.dumps(api_json) |
87 |
| - project.save() |
88 |
| - return project |
89 |
| - else: |
90 |
| - logger.debug('Not importing %s because mismatched type' % |
91 |
| - api_json['name']) |
| 7 | + pass |
92 | 8 |
|
93 | 9 |
|
94 | 10 | class RemoteOrganizationManager(RelatedUserManager):
|
95 |
| - |
96 |
| - def create_from_github_api(self, api_json, user): |
97 |
| - organization, created = self.get_or_create(slug=api_json.get('login')) |
98 |
| - organization.html_url = api_json.get('html_url') |
99 |
| - organization.name = api_json.get('name') |
100 |
| - organization.email = api_json.get('email') |
101 |
| - organization.avatar_url = api_json.get('avatar_url') |
102 |
| - organization.json = json.dumps(api_json) |
103 |
| - organization.users.add(user) |
104 |
| - organization.save() |
105 |
| - return organization |
106 |
| - |
107 |
| - def create_from_bitbucket_api(self): |
108 |
| - pass |
| 11 | + pass |
0 commit comments