Merge remote-tracking branch 'origin/master'
authorIlya.Kazakevich <Ilya.Kazakevich@jetbrains.com>
Thu, 10 Mar 2016 22:15:23 +0000 (01:15 +0300)
committerIlya.Kazakevich <Ilya.Kazakevich@jetbrains.com>
Thu, 10 Mar 2016 22:15:23 +0000 (01:15 +0300)
python/helpers/python-skeletons/django/forms/formsets.py
python/helpers/python-skeletons/django/forms/models.py [new file with mode: 0644]
python/src/com/jetbrains/python/psi/PsiQuery.java

index 2f229065ce19aaf26dded3a08847eb71c13e3295..0414571e48bd91df5855e54a9a12f9f2f38c8e34 100644 (file)
@@ -1,4 +1,4 @@
-from django.forms import Form
+from django.forms import BaseForm
 class BaseFormSet(object):
     """
     A collection of instances of the same Form class.
@@ -8,7 +8,7 @@ class BaseFormSet(object):
     def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
                  initial=None, error_class=ErrorList, form_kwargs=None):
         """
-        :rtype: BaseFormSet[T <= Form]
+        :rtype: BaseFormSet[T <= BaseForm]
         """
 
     def __iter__(self):
diff --git a/python/helpers/python-skeletons/django/forms/models.py b/python/helpers/python-skeletons/django/forms/models.py
new file mode 100644 (file)
index 0000000..39fa520
--- /dev/null
@@ -0,0 +1,30 @@
+from django.forms.formsets import BaseFormSet
+class BaseModelFormSet(BaseFormSet):
+    """
+    A ``FormSet`` for editing a queryset and/or adding new objects to it.
+    """
+    model = None
+
+    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
+                 queryset=None, **kwargs):
+        """
+        :rtype: BaseModelFormSet[T <= BaseForm]
+        """
+        self.queryset = queryset
+        self.initial_extra = kwargs.pop('initial', None)
+        defaults = {'data': data, 'files': files, 'auto_id': auto_id, 'prefix': prefix}
+        defaults.update(kwargs)
+        super(BaseModelFormSet, self).__init__(**defaults)
+
+    def __iter__(self):
+        """
+
+        :rtype: collections.Iterator[T]
+        """
+        pass
+
+    def __getitem__(self, index):
+        """
+        :rtype: T
+        """
+        pass
index a6acda999ae7382c154b1a29b5392b72d90b99de..56862acb26fa91fc0c9f934c3b37da928524e34a 100644 (file)
@@ -24,6 +24,7 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 // TODO: Propogate typization to all class like in PsiTypedQuery
 
@@ -77,17 +78,18 @@ public class PsiQuery {
     return new PsiQuery(result.toArray(new PsiElement[result.size()]));
   }
 
-  
+
   /**
    * Searches for string literals with specific text
-   * @param clazz string literal class
+   * @param clazz        string literal class
    * @param expectedText expected text
    * @return query {@link com.jetbrains.python.psi.PsiQuery}
    */
   @NotNull
-  public final PsiQuery childrenStringLiterals(@NotNull final Class<? extends PyStringLiteralExpression> clazz, @NotNull final String expectedText) {
+  public final PsiQuery childrenStringLiterals(@NotNull final Class<? extends PyStringLiteralExpression> clazz,
+                                               @NotNull final String expectedText) {
     final List<PsiElement> result = new ArrayList<PsiElement>();
-    for ( final PyStringLiteralExpression element : getChildrenElements(clazz)) {
+    for (final PyStringLiteralExpression element : getChildrenElements(clazz)) {
       if (element.getStringValue().equals(expectedText)) {
         result.add(element);
       }
@@ -153,6 +155,19 @@ public class PsiQuery {
     return new PsiQuery(result);
   }
 
+  /**
+   * Get qualifiers of all elements if elements do have any
+   */
+  @NotNull
+  public PsiQuery qualifiers() {
+    return new PsiQuery(Arrays.stream(myPsiElements)
+                          .filter(o -> o instanceof PyQualifiedExpression)
+                          .map(o -> ((PyQualifiedExpression)o).getQualifier())
+                          .filter(o -> o != null)
+                          .collect(Collectors.toList())
+    );
+  }
+
 
   /**
    * Filter parents by condition