Skip to content

Instantly share code, notes, and snippets.

View NathanW2's full-sized avatar

Nathan Woodrow NathanW2

  • Chartis Technology/Metrix Assets
  • Australia
View GitHub Profile
@NathanW2
NathanW2 / logger.py
Last active December 17, 2015 22:39
Easier method logging
import logging
logging.basicConfig(filename=LOG_FILENAME,level=logging.NOTSET)
def _getCallerLogger():
""" Get the method that called the logging methods """
caller = inspect.currentframe().f_back.f_back
name = "{}-{}".format(caller.f_globals['__name__'], caller.f_code.co_name )
logger = logging.getLogger(name)
return logger
@NathanW2
NathanW2 / getattr.py
Last active December 18, 2015 00:18
Add __getattr__ and __setattr__ on QgsFeature (won't be needed after 2.0)
def __setattr__(feature, name, value):
if feature.fieldNameIndex(name) == -1:
# Try replacing underscores with spaces
if feature.fieldNameIndex(name.replace('_', ' ')) == -1:
QgsFeature.__setattr__(feature, name, value)
feature[name] = value
def __getattr__(feature, name):
if feature.fieldNameIndex(name) == -1:
@NathanW2
NathanW2 / pyqgis-sip2.rst
Last active December 18, 2015 05:39
A conversion guide for the new QGIS API

The QVariant type doesn't exsits any more so any methods returning QVariant will be auto converted to Python types. You no longer need to convert the return type using the toXXXX methods.

Remove all:

toString()
toList()
toInt()
toStringList()
toByteArray()
QVariant(..)
+++ b/src/providers/ogr/qgsogrfeatureiterator.cpp
@@ -32,16 +32,8 @@
QgsOgrFeatureIterator::QgsOgrFeatureIterator( QgsOgrProvider* p, const QgsFeatureRequest& request )
- : QgsAbstractFeatureIterator( request ), P( p )
+ : QgsAbstractFeatureIterator( request ), P( p ), id(0)
{
- // make sure that only one iterator is active
- if ( P->mActiveIterator )
from functools import partial
for key, item in self.layerOptionsList.items():
if item['widget']:
control = item['widget']
slot = partial(self.setLayerProperty, key)
if item['wType'] in ('text', 'spinbox'):
control.editingFinished.connect(slot)
elif item['wType'] == 'textarea':
control.textChanged.connect(slot)
self.signalMapper = QSignalMapper()
QObject.connect(self.signalMapper, SIGNAL("mapped(QString)"), self.setLayerProperty)
for key, item in self.layerOptionsList.items():
if item['widget']:
self.signalMapper.setMapping(item['widget'], key)
if item['wType'] in ('text', 'spinbox'):
QObject.connect(
item['widget'],
SIGNAL("editingFinished()"),
self.signalMapper, SLOT("map()"))
def __iter__(self):
for i in xrange(self.size()):
yield self[i]
from types import MethodType
QgsAttributeAction.__iter__ = MethodType(__iter__, None, QgsAttributeAction)
regexp_replace( ramp_color('usa', scale_linear( "unemployed_by_county_xgv_Rate",0,15,0,1)),',[^,]*$',','|| toint(scale_linear(
"unemployed_by_county_xgv_Labor_Force",0,100000,0,255)))
class RangeDomain(Domain):
name = "Range"
def __init__(lower, upper):
self.lower = 100
self.upper = 500
def values(self):
for i in range(lower, upper):
yield i
import os
import sys
import sip
from qgis.core import (
QgsApplication, QgsVectorLayer, QgsField,
QgsFields, QgsFeature, QgsGeometry, QgsPoint, QgsMapLayerRegistry)
from PyQt4.QtCore import QVariant