class NewSubscriptionForm(forms.Form): email = lkforms.LKEmailField(required=False) my_email = lkforms.LKBooleanField(required=False) twitter_app_connection_id = lkforms.LKEncryptedIdReferenceField(TwitterAppConnection, required=False) app_id = lkforms.LKEncryptedIdReferenceField(AppStoreApp, required=False) slack_channel_name = forms.CharField(required=False, max_length=64) slack_url = forms.URLField(required=False) def clean_slack_url(self): slack_url = self.cleaned_data.get('slack_url') if slack_url: if urlparse.urlparse(slack_url).netloc != 'hooks.slack.com' or '/services/' not in slack_url: raise forms.ValidationError('Slack URL should be a hooks.slack.com URL and start with /services/.') return slack_url def clean(self): email = self.cleaned_data.get('email') slack_url = self.cleaned_data.get('slack_url') my_email = self.cleaned_data.get('my_email', False) slack_channel_name = self.cleaned_data.get('slack_channel_name', False) twitter_app_connection = self.cleaned_data.get('twitter_app_connection_id') app = self.cleaned_data.get('app_id') # the form is considered legit if it contains just one of the parameters for creating a review subsciption legit = len(filter(lambda x: x, [slack_url, email, my_email, slack_channel_name, twitter_app_connection, app])) == 1 if not legit: raise forms.ValidationError( 'Please provide `email` or `slack_url` or `my_email` or `slack_channel` or `twitter_app_connection_id` or `app_id`, but just one.') return self.cleaned_data
class NewSubscriptionForm(forms.Form): email = lkforms.LKEmailField(required=False) my_email = lkforms.LKBooleanField(required=False) slack_channel_name = forms.CharField(required=False, max_length=128) slack_url = forms.URLField(required=False) def clean_slack_url(self): slack_url = self.cleaned_data.get('slack_url') if slack_url: if urlparse.urlparse( slack_url ).netloc != 'hooks.slack.com' or '/services/' not in slack_url: raise forms.ValidationError( 'Slack URL should be a hooks.slack.com URL and start with /services/.' ) return slack_url def clean(self): email = self.cleaned_data.get('email') my_email = self.cleaned_data.get('my_email', False) slack_url = self.cleaned_data.get('slack_url') slack_channel_name = self.cleaned_data.get('slack_channel_name', False) # the form is considered legit if it contains just one of the parameters for creating a sales report subsciption legit = len( filter(lambda x: x, [email, my_email, slack_channel_name, slack_url])) == 1 if not legit: raise forms.ValidationError( 'Please provide `email` or `my_email` or `slack_url` or `slack_channel`, but just one.' ) return self.cleaned_data
class TopUsersForm(forms.Form): app_id = lkforms.LKEncryptedIdReferenceField(SDKApp, required=True) query = forms.CharField(required=False) sort_key = forms.ChoiceField(choices=[ (k, k) for k in sessions.TOP_USER_SORTABLE_ATTRIBUTES ], required=False) start_sdk_user_id = lkforms.LKEncryptedIdReferenceField(SDKUser, required=False) raw_labels = lkforms.LKBooleanField(required=False)
class GetConfigForm(forms.Form): namespace = forms.CharField(required=False, max_length=16) def clean_namespace(self): value = self.cleaned_data.get('namespace') return value or None bundle_id = forms.RegexField(required=True, regex=BUNDLE_RE) version = forms.RegexField(required=False, regex=VERSION_RE) build = forms.RegexField(required=False, regex=BUILD_RE) ios_version = forms.RegexField(required=False, regex=BUILD_RE) debug = lkforms.LKBooleanField(required=False) sdk_user_labels = forms.RegexField(required=False, regex=USER_LABELS_RE)
class CreateUpdateShotForm(forms.Form): screenshot_image_id = lkforms.LKEncryptedIdReferenceField(Image, required=False) def clean_screenshot_image_id(self): image = self.cleaned_data.get('screenshot_image_id') if image and image.kind != 'screenshot': raise forms.ValidationError('Invalid image; not a screenshot.') return image background_image_id = lkforms.LKEncryptedIdReferenceField(Image, required=False) def clean_background_image_id(self): image = self.cleaned_data.get('background_image_id') if image and image.kind != 'background': raise forms.ValidationError('Invalid image; not a background.') return image label = forms.CharField(min_length=0, max_length=500, required=False) label_position = forms.ChoiceField(choices=[ ('above', 'Cropped Device with Text Above',), ('below', 'Cropped Device with Text Below',), ('above_full_device', 'Full Device with Text Above',), ('below_full_device', 'Full Device with Text Below',), ('device', 'Full Device Only',), ('above_screenshot', 'Screenshot with Text Above',), ('below_screenshot', 'Screenshot with Text Below',), ('none', 'Screenshot Only'), ], required=False) font = forms.CharField(min_length=0, max_length=50, required=False) font_size = forms.IntegerField(required=False) font_weight = forms.IntegerField(required=False) font_color = lkforms.LKColorField(required=False) phone_color = forms.ChoiceField(choices=[ ('white', 'White phone',), ('black', 'Black phone',), ('gold', 'Gold phone',), ('rose', 'Rose Gold phone',), ], required=False) background_color = lkforms.LKColorField(required=False) is_landscape = lkforms.LKBooleanField(required=False)
class ListAppsForm(forms.Form): only_config_parents = lkforms.LKBooleanField(required=False) product = forms.ChoiceField(choices=SDKProduct.choices(), required=False)
from backend.lk.views.base import api_user_view from backend.lk.views.base import bad_request from backend.lk.views.base import not_found from backend.lk.models import SDKApp from backend.lk.models import SDKProduct from backend.lk.models import SDKToken from backend.util import lkforms # # PRODUCTS # # Creates a form with all products as optional booleans. SDKProductForm = type( 'SDKProductForm', (forms.Form, ), { product_name: lkforms.LKBooleanField(required=False) for product_name in SDKProduct.kinds() }) # # SDK TOKENS # @api_user_view('GET') def tokens_view(request): my_tokens = tokens.get_my_tokens(request.user) return api_response({ 'tokens': [t.to_dict() for t in my_tokens], })